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 <enter> 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351