Ubuntu16.04+pipevn+uswgi+supervisor+flask+nginx实现项目部署

一、安装python3.8版本

1. 在 Ubuntu 16.04 中,python3 的默认版本为 3.5:

~# python3 -V
Python 3.5.2

2. Ubuntu 官方 apt 库中还未收录 python 3.8,这里使用 deadsnakes PPA 库安装。

$ sudo apt update
$ sudo apt install software-properties-common
  1. 添加 deadsnakes PPA 源
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
  1. 安装python 3.8
$ sudo apt install python3.8
  1. 检查是否安装成功
$ python3.8 -V
Python 3.8.5

二、配置python3.8为系统默认python3

1. 将 python 各版本添加到 update-alternatives

$ which python3.8
/usr/bin/python3.8

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1

$ which python3.5
/usr/bin/python3.5

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 2
  1. 配置 python3 默认指向 python3.8
sudo update-alternatives --config python3
  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.5   2         auto mode
  1            /usr/bin/python3.5   2         manual mode
  2            /usr/bin/python3.8   1         manual mode

Press  to keep the current choice[*], or type selection number:

选择2,回车
以下说明配置成功了

update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python3 (python3) in manual mode

三、安装pip

$ sudo apt-get install python3-pip

更新pip版本

$ sudo pip3 install --upgrade pip

四、安装pipenv

pip3 install pipenv

检查pipenv

pipenv --version

五、安装nginx

1. 进入usr目录,创建tengine文件夹

cd /usr
mkdir tengine

2. 进入创建的文件夹,下载Tengine 最新版本

cd /usr/tengine
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

3.解压下载的文件

tar -xvf tengine-2.3.2.tar.gz

4. 进入解压的目录(/usr/tengine/tengine-2.3.2),开始安装

cd tengine-2.3.2/
./configure

报错了

./configure: error: the HTTP rewrite module requires the PCRE library.

5. 安装Nginx所需依赖

(1)更新apt-get

apt-get update

(2)解决依赖包openssl安装

apt-get install openssl libssl-dev

(3)解决依赖包pcre安装

apt-get install libpcre3 libpcre3-dev

(4)解决依赖包zlib安装

apt-get install zlib1g-dev

6. 正式安装Nginx

./configure 
make
make install 

7.找到Nginx的安装位置(/usr/local/nginx )

cd /usr/local/nginx
ls

8.开启nginx(在sbin目录下)

cd sbin
./nginx

9.打开浏览器,输入ip/域名查看Nginx是否安装成功

六、配置nginx.conf文件

1.进入Nginx安装目录

find / -name nginx
cd /usr/local/nginx
cd conf
vim nginx.conf

2. 重新编写nginx.conf文件

#基础配置,无需改动,有需要可以深入研究
#user  nobody;
worker_processes  1;
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";

#pid        logs/nginx.pid;

#基础配置,无需改动,有需要可以深入研究
events {
    use epoll;
    worker_connections  1024;
}


http {
    #基础配置,无需改动,有需要可以深入研究
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;
    #access_log  logs/access.log  main;
    #access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    tcp_nodelay on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/json image/png image/jpg image/jpeg;
    gzip_vary on;
    server_tag  XUNMA;
    server_info  off;
    server_tokens off;
    log_format    accesslog '$time_iso8601 | $remote_addr | $status | $request | $request_body | $proxy_add_x_forwarded_for | $upstream_addr | $upstream_response_time | $request_time | $unix_time | $scheme://$host:$server_port | $request_completion ' ;

    ###################核心配置区域################

    #Nginx配置 http xxx.xxx.com  
    include    server/www-xxx-com.conf;
}

3.生成项目配置文件

mkdir server

具体配置:

server {
      listen  80;
      server_name xxx.xxx.xxx; #公网地址
    
      location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:5000;  # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
        uwsgi_param UWSGI_PYHOME /root/.local/share/virtualenvs/xxxxx-7bBwEi2q; # 指向虚拟环境目录
        uwsgi_param UWSGI_CHDIR  /usr/xxxxx; # 指向网站根目录
        uwsgi_param UWSGI_SCRIPT main:app; # 指定启动程序
      }
    }
  1. 重启Nginx
    每次修改完文件后,都需要重启Nginx,重启后配置即可生效
    重启在 nginx 的 sbin目录下
./nginx -s reload

七、上传项目到指定目录(/usr/muxxx)

排除Pipfile、Pipfile.lock文件

1. 在本地生成requirements.text

pipenv lock -r > requirements.txt

2. 通过requirements.text在服务器创建虚拟环境

pipenv install -r requirements.text

八、安装uswgi

1.在服务器虚拟环境安装uswgi

pipenv shell
pipenv install uswgi

安装uswgi可能会出现失败,失败原因是没有安装python3.8-dev

apt-get install python3.8.dev

2. 设置uswgi配置文件(config.ini)

[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:5000 
# 指向网站目录
chdir = /usr/xxxx/
# python 启动程序文件
wsgi-file = main.py 
# python 程序内用以启动的 application 变量名
callable = app 
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191

存放在项目目录下

3.启动uwsgi

uwsgi config.ini

此时已经正常启动 uwsgi 并将 Flask 项目载入其中了,ctrl+c 关闭程序。但这只是命令启动形式,要使其随同服务器启动并作为后台服务运行才是运营环境的实际所需要。因此接下来我们需要安装另一个工具来引导 uwsgi 。

九、安装并配置Supervisor

1.安装

sudo apt-get install supervisor

Supervisor 的全局的配置文件位置在:

/etc/supervisor/supervisor.conf

2. 配置文件

正常情况下我们并不需要去对其作出任何的改动,只需要添加一个新的 *.conf 文件放在

/etc/supervisor/conf.d/

下就可以,那么我们就新建立一个用于启动 muxxx 项目的 uwsgi 的 supervisor 配置 (命名为:muxxx_supervisor.conf):

[program:muxxx]
# 启动命令入口
command=/root/.local/share/virtualenvs/muxxx-7bBwEi2q/bin/uwsgi /usr/muxxx/config.ini
# 命令程序所在目录
directory=/usr/muxxx
#运行命令的用户名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/usr/muxxx/logs/uwsgi_supervisor.log

其中command前目录地址是该项目虚拟环境根目录
通过项目目录中shell获取

pipenv shell
pipenv --venv
/root/.local/share/virtualenvs/muxxx-7bBwEi2q

command后目录为uwsgi配置地址

3.提前创建logs

项目目录下创建logs目录、logs/uwsgi_supervisor.log文件

4.操作

supervisord -c /etc/supervisord.conf #启动项目
supervisorctl -c /etxc/supervisord.conf #重启项目
supervisorctl update  #更新新的配置到supervisord,更新了配置文件后要update 启动
supervisorctl reload #重新启动配置中的所有程序
supervisorctl start program_name #启动某个进程(program_name=你配置中写的程序名称)
supervisorctl # 查看正在守候的进程
pervisorctl stop program_name #停止某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name # 重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl stop all # 停止全部进程

参考资料:
https://www.jianshu.com/p/ce2f559bded6
https://www.cnblogs.com/Ray-liang/p/4173923.html
https://www.jianshu.com/p/8546b879b10b
https://www.jianshu.com/p/b3dd2614a2a2

你可能感兴趣的:(Ubuntu16.04+pipevn+uswgi+supervisor+flask+nginx实现项目部署)