標籤:clone turn gre service npm load 建立 procs 多個
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 ProxyFixapp.wsgi_app = ProxyFix(app.wsgi_app)複製代碼
例:
from flask import Flaskapp = 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 = 1autostart = 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 = devredirect_stderr = truestdout_logfile_maxbytes = 20MBstdout_logfile_backups = 20stdout_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 oknginx: 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-sslmake && make install
2.5.將python3.6的路徑加入到PATH中
echo "export PATH=$PATH:/usr/local/python3/bin/" >>/etc/profilesource /etc/profile
2.6.建立軟串連
ln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -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 = 1autostart = 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 = devredirect_stderr = truestdout_logfile_maxbytes = 20MBstdout_logfile_backups = 20stdout_logfile = /data/api-service/logs/supervisor.log
2.9建立data目錄
mkdir /data
2.10從git上面將代碼下載下來,git在內網,如果是線上請將git下載下來然後通過ftp上傳到線上壞境
cd /datagit clone http://zhangxiaoyang:[email protected]:3000/graphics/logo_api api-servicels -
2.11安裝程式依賴包
cd /data/api-service/yum install cairo-develpip3 install --upgrade pippip3 install -r requirements.txt
nginx+gunicorn項目部署