1. 程式人生 > >nginx+gunicorn項目部署

nginx+gunicorn項目部署

tao rtu cto com 2.3 logo 2.7 監聽端口 one

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:[email protected]: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

nginx+gunicorn項目部署