nginx+gunicorn專案部署

沈小概發表於2018-10-14
1.1安裝虛擬環境
建立資料夾
mkdir data          目錄資料夾
cd data             進入data資料夾
mkdir nginx         建立安裝nginx的資料夾
mkdir server        存放程式碼的資料夾    
mkdir logs          存放日誌的資料夾
mkdir backup        備份程式碼的資料夾
mkdir softs         軟體存放的位置
mkdir virtual       虛擬環境的位置
mkdir scripts       指令碼的執行位置
mkdir scp_codes     上傳的程式碼
安裝虛擬環境
apt-get install python-virtualenv (ubuntu已經安裝過,可省略)
virtualenv -p /usr/bin/python3 api_server (採用他,安裝在本資料夾,)
mkvirtualenv api_server(不要用它,它會自己安裝到其他地方)
source api_server/bin/activate   (在虛擬環境的active進入虛擬環境)
安裝的軟體會在虛擬環境下的bin目錄下
安裝nginx的環境
解壓
cd ~/data/softs/   
tar xf pcre-8.39.tar.gz
配置
cd ~/data/softs/pcre-8.39
./configure
編譯
make
安裝
sudo make install
安裝nginx
解壓
cd ~/data/softs/
tar xf nginx-1.10.2.tar.gz
配置
cd nginx-1.10.2/
./configure --prefix=/root/data/nginx    安裝在root/data下面的nginx資料夾
編譯
make
安裝
make install
檢視程式
ps aux | grep nginx
nginx簡單基礎操作
檢查
sudo ~/data/nginx/sbin/nginx -t
開啟
sudo ~/data/nginx/sbin/nginx
關閉
sudo ~/data/nginx/sbin/nginx -s stop
過載
sudo ~/data/nginx/sbin/nginx -s reload
1、首先安裝Gunicorn
pip install gunicorn
複製程式碼
2、在入口檔案的app.run()加上以下內容
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
複製程式碼

例:

from flask import Flask

app = Flask(__name__)


@app.route(`/`)
def hello_world():
    return `Hello World!`

if __name__ == `__main__`:
    from werkzeug.contrib.fixers import ProxyFix
    app.wsgi_app = ProxyFix(app.wsgi_app)
    app.run()
複製程式碼
3、啟動Gunicorn

最簡單的方式為

gunicorn 入口檔名:app
複製程式碼

預設是監聽127.0.0.1:8000

如果是要處理高併發則要開多個程式和修改監聽埠的畫

gunicorn -w 4 -b 127.0.0.1:8000 入口檔名:app
複製程式碼儲存在supervisord 裡面的etc/supervisord.d目錄下新增一個logo.ini配置檔案
新增配置檔案

vim /etc/supervisord.d/logo.ini

[program:logo_api_server]
directory = /data/api-service #程式碼存放的地方
command = /usr/local/python3/bin/gunicorn -w 4 -b :5005 LogoSeverApi:app  #-w的引數根據CPU的核數來定,不要超過CPU的核數
#process_name = %(process_num)s  ; process_name expr (default %(program_name)s)
#process_name = %(process_num)s
#numprocs = 4                    ; number of processes copies to start (def 1)
numprocs_start = 1
autostart = true                ; start at supervisord start (default: true)
autorestart = unexpected        ; whether/when to restart (default: unexpected)
startsecs = 10                  ; number of secs prog must stay running (def. 1)
startretries = 3                ; max # of serial start failures (default 3)
user = dev
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /data/api-service/logs/supervisor.log

這樣就可以啟動4個程式同時處理HTTP請求,提高系統的使用效率及效能。 還可以把埠8000改為其他

而在實際應用中,應使用後臺執行的方式啟動服務

nohup 啟動服務的命令 &
複製程式碼

nohup gunicorn -w 4 -b 127.0.0.1:8000 入口檔名:app &
複製程式碼

這時你可以在本機的瀏覽器上訪問127.0.0.1:8000,瀏覽器上就會出現Hello World!

注意:如果是想通過外網訪問的話就要把ip改為內網的ip

4、配置nginx

配置改為

server {
    listen 80;
    server_name example.org; # 這是HOST機器的外部域名,用地址也行

    location / {
        proxy_pass http://127.0.0.1:8000; # 這裡是指向 gunicorn host 的服務地址
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 }
複製程式碼

這樣啟動之後80埠就可以轉發到8000埠了

5、檢查配置
nginx -t
複製程式碼

若出現一下內容,則表示配置成功

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
複製程式碼
6、更新nginx配置
nginx -s reload
複製程式碼

在已經執行了Gunicorn的前提下,在瀏覽器訪問127.0.0.1就會出現Hello World!了

7、重啟Gunicorn

輸入命令

pstree -ap|grep gunicorn
1.2:安裝wget(如果已經安裝跳過)
yum install wget 
1.3:安裝python3.6(如果已經安裝跳過)

2.1.下載python3.6

wget http://cdn.npm.taobao.org/dist/python/3.6.5/Python-3.6.5.tgz

2.2.解壓安裝包

tar -zxvf Python-3.6.5.tgz

———————

2.3安裝python3.6的依賴包
yum install -y gcc zlib*

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

 

———————

2.4.配置安裝路徑為/usr/local/python3
./configure --prefix=/usr/local/python3 --with-ssl

make && make install
2.5.將python3.6的路徑加入到PATH中
echo "export PATH=$PATH:/usr/local/python3/bin/" >>/etc/profile

source /etc/profile
2.6.建立軟連線
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

———————

2.7.安裝supervisor
yum install supervisor -y

如果報如下錯誤,安裝yum的擴充套件源

安裝yum的擴充套件源

yum install epel-*
2.8.新增supervisor的配置

在/etc/supervisord.d目錄下新增一個logo.ini配置檔案

vim /etc/supervisord.d/logo.ini

內容如下:

[program:logo_api_server]

directory = /data/api-service #程式碼存放的地方

command = /usr/local/python3/bin/gunicorn -w 4 -b :5005 LogoSeverApi:app  #-w的引數根據CPU的核數來定,不要超過CPU的核數

#process_name = %(process_num)s  ; process_name expr (default %(program_name)s)

#process_name = %(process_num)s

#numprocs = 4                    ; number of processes copies to start (def 1)

numprocs_start = 1

autostart = true                ; start at supervisord start (default: true)

autorestart = unexpected        ; whether/when to restart (default: unexpected)

startsecs = 10                  ; number of secs prog must stay running (def. 1)

startretries = 3                ; max # of serial start failures (default 3)

user = dev

redirect_stderr = true

stdout_logfile_maxbytes = 20MB

stdout_logfile_backups = 20

stdout_logfile = /data/api-service/logs/supervisor.log
2.9建立data目錄
mkdir /data
2.10從git上面將程式碼下載下來,git在內網,如果是線上請將git下載下來然後通過ftp上傳到線上壞境
cd /data

git clone http://zhangxiaoyang:messi1020@git.epweike.net:3000/graphics/logo_api api-servicels -
2.11安裝程式依賴包
cd /data/api-service/

yum install cairo-devel

pip3 install --upgrade pip

pip3 install -r requirements.txt

相關文章