Ubuntu16.04+pipevn+uswgi+supervisor+flask+nginx實現(xiàn)項目部署

一、安裝python3.8版本

1. 在 Ubuntu 16.04 中,python3 的默認(rèn)版本為 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為系統(tǒng)默認(rèn)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 默認(rèn)指向 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. 進(jìn)入usr目錄,創(chuàng)建tengine文件夾

cd /usr
mkdir tengine

2. 進(jìn)入創(chuàng)建的文件夾,下載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. 進(jìn)入解壓的目錄(/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.進(jìn)入Nginx安裝目錄

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

2. 重新編寫nginx.conf文件

#基礎(chǔ)配置,無需改動,有需要可以深入研究
#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;

#基礎(chǔ)配置,無需改動,有需要可以深入研究
events {
    use epoll;
    worker_connections  1024;
}


http {
    #基礎(chǔ)配置,無需改動,有需要可以深入研究
    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 ' ;

    ###################核心配置區(qū)域################

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

3.生成項目配置文件

mkdir server

具體配置:

server {
      listen  80;
      server_name xxx.xxx.xxx; #公網(wǎng)地址
    
      location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:5000;  # 指向uwsgi 所應(yīng)用的內(nèi)部地址,所有請求將轉(zhuǎn)發(fā)給uwsgi 處理
        uwsgi_param UWSGI_PYHOME /root/.local/share/virtualenvs/xxxxx-7bBwEi2q; # 指向虛擬環(huán)境目錄
        uwsgi_param UWSGI_CHDIR  /usr/xxxxx; # 指向網(wǎng)站根目錄
        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在服務(wù)器創(chuàng)建虛擬環(huán)境

pipenv install -r requirements.text

八、安裝uswgi

1.在服務(wù)器虛擬環(huán)境安裝uswgi

pipenv shell
pipenv install uswgi

安裝uswgi可能會出現(xiàn)失敗,失敗原因是沒有安裝python3.8-dev

apt-get install python3.8.dev

2. 設(shè)置uswgi配置文件(config.ini)

[uwsgi]
# uwsgi 啟動時所使用的地址與端口
socket = 127.0.0.1:5000 
# 指向網(wǎng)站目錄
chdir = /usr/xxxx/
# python 啟動程序文件
wsgi-file = main.py 
# python 程序內(nèi)用以啟動的 application 變量名
callable = app 
# 處理器數(shù)
processes = 4
# 線程數(shù)
threads = 2
#狀態(tài)檢測地址
stats = 127.0.0.1:9191

存放在項目目錄下

3.啟動uwsgi

uwsgi config.ini

此時已經(jīng)正常啟動 uwsgi 并將 Flask 項目載入其中了,ctrl+c 關(guān)閉程序。但這只是命令啟動形式,要使其隨同服務(wù)器啟動并作為后臺服務(wù)運(yùn)行才是運(yùn)營環(huán)境的實際所需要。因此接下來我們需要安裝另一個工具來引導(dǎo) 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
#運(yùn)行命令的用戶名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/usr/muxxx/logs/uwsgi_supervisor.log

其中command前目錄地址是該項目虛擬環(huán)境根目錄
通過項目目錄中shell獲取

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

command后目錄為uwsgi配置地址

3.提前創(chuàng)建logs

項目目錄下創(chuàng)建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 #啟動某個進(jìn)程(program_name=你配置中寫的程序名稱)
supervisorctl # 查看正在守候的進(jìn)程
pervisorctl stop program_name #停止某一進(jìn)程 (program_name=你配置中寫的程序名稱)
supervisorctl restart program_name # 重啟某一進(jìn)程 (program_name=你配置中寫的程序名稱)
supervisorctl stop all # 停止全部進(jìn)程

參考資料:
http://www.itdecent.cn/p/ce2f559bded6
https://www.cnblogs.com/Ray-liang/p/4173923.html
http://www.itdecent.cn/p/8546b879b10b
http://www.itdecent.cn/p/b3dd2614a2a2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容