下載python3包 $ wget --no-check-certificate www.python.org/ftp/python/…python
'下載可能會出現證書無效問題,只要安裝個ca-certificates或使用--no-check-certificate下載就能夠避免下面的錯誤'linux
進入下載目錄 $ cd 下載的目錄下/nginx
解壓包 $ tar -zxf Python-3.6.3.tgzgit
進入python3 $ cd Python-3.6.3web
建立安裝目錄 $ mkdir -p /usr/local/python3.6.3sql
進入python3目錄 $ cd Python-3.6.3shell
指定到安裝目錄 ./configure --enable-optimizationsjson
這裏編譯使用的是make all沒有直接使用make,all參數會編譯全部子模塊。flask
$ make all
$ make install
複製代碼
安裝 nginx -vvim
啓動 nginx $ sudo /etc/init.d/nginx start 瀏覽器訪問:你的服務器ip地址 如:http://45.45.162.162
中止 nginx $ sudo nginx -s stop
若是:有現成的項目能夠把項目上傳到服務器中,在git 管理項目,只須要 git clone 一下就能夠了。
若是:你須要從本地上傳項目文件,能夠用scp命令,這裏就不囉嗦用法了。總之咱們將項目文件放到服務器,而後就能夠用virtualenv管理Python環境 virtualenv就很少說了。這裏直接用flask demo進行。
安裝虛擬環境 $ pip3 install virtualenv
建立一個包 cd myproject
建立虛擬環境 source env/bin/activate (2)在虛環境中安裝flask
deactivate (4)建立啓動文件 $ vim run.py (5)寫入一個flask,端口本身進行設置。我這裏用的80端口。 from flask import Flask app = Flask(name) @app.route("/") def hello(): return "Hello World!" if name == "main": app.run(host='0.0.0.0', port=80) (6)esc+wq保存而且退出
運行這個run.py文件 (1)先中止Nginx iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 若是想關閉打開的端口:
cd myproject $ python3 run.py
用其餘電腦和手機4G訪問你的服務器ip地址+上端口。 如:http://45.32.122.555:80/ 出現:Hello World! 那就成功了。
(1)進入 vim default ————————————————————————————————— # 或者直接配置
vim nginx.conf # 不過要根據其語法來配置其實最後nginx.conf仍是會調用/etc/nginx/sites-enabled/default的配置。 (3)在最後寫入後 :wq保存而且退出 server { listen 80; server_name 45.32.162.255; charset utf-8; client_max_body_size 75M; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000;
uwsgi_param UWSGI_PYHOME /root/myproject/venv; uwsgi_param UWSGI_CHDIR /root/myproject; uwsgi_param UWSGI_SCRIPT run:app; } } 解析 listen 80; # 服務器監聽端口 server_name 45.32.162.255; # 這裏寫你的域名或者公網IP charset utf-8; # 編碼 client_max_body_size 75M; # 以前寫的關於GET和POST的區別 include uwsgi_params; # 導入uwsgi配置 uwsgi_pass 127.0.0.1:8000; # 轉發端口,須要和uwsgi配置當中的監聽端口一致 (下面會配置uwsgi) uwsgi_param UWSGI_PYTHON /root/myproject/venv; # Python解釋器所在的路徑(這裏爲虛擬環境)【路徑按照本身具體的路徑填寫】 uwsgi_param UWSGI_CHDIR /root/myproject; # 項目根目錄 uwsgi_param UWSGI_SCRIPT run:app; # 項目的主程序,即Flask app所在的位置【run是運行文件run.py文件(根據本身建立的文件名)app是falsk實例】
(4)測試一下配置文件是否正確,若檢測配置文件失敗,再好好檢查下配置文件有沒有疏漏。
$ nginx -t
複製代碼
(5)此時訪問Nginx服務器應該會獲得502 Bad Gateway的提示,由於請求被Nginx轉發了,可是並無轉發服務器來處理請求(尚未配置好uwsgi)。
$ service nginx start
複製代碼
# 在項目文件根目錄新建配置文件uwsgi.ini(uwsgi支持多種配置文件格式: xml, ini, json等) (1)進入項目根目錄 vim uwsgi.ini (3)寫入如下內容後 :wq保存並退出 [uwsgi]
socket = 127.0.0.1:8000
plugins = python
chidir = /root/myproject
wsgi-file = run.py
callable = app
# uwsgi的監聽端口【要跟上面nginx配置裏的端口同樣】 # 這行必定要加上,否則請求時會出現-- unavailable modifier requested: 0 --錯誤提示 # 項目根目錄【路徑按照本身具體的路徑填寫】 # flask程序的啓動文件【這裏我命名爲run.py】 # 程序變量名 【app是falsk實例變量】
啓動測試 (1)啓動 Nginx cd ~
uwsgi uwsgi.ini 若一切正常的話就能夠在終端上看到uwsgi的啓動信息了 (3)打開瀏覽器 訪問你的ip加上端口 例:http://45.32.162.255:80 頁面出現:Hello World! # 說明Nginx和uwsgi配置成功了
# 但離真正項目上線還差一段,由於uwsgi是直接在前臺啓動的,當咱們的鏈接終端跟服務器斷開的時候uwsgi進程也被關閉了,因此咱們須要uwsgi在後臺運行。
解釋一下上面這段話:咱們在鏈接服務器啓動項目後能夠用瀏覽器訪問成功。可是咱們一但關閉與服務器的鏈接後再用瀏覽器訪問就不行了.項目是運行在前臺的也就是說.在關閉與服務器鏈接的同時也關閉了服務器的命令窗.運行在前臺的項目也同時關閉。因此咱們須要把項目運行在後臺。
後臺啓動項目 (1)用nohup啓動:不掛斷運行命令,用"&"可讓你的命令在後臺執行 (nohup詳細的命名參數請到官網查詢)注意:別漏了&號。 ps -ef|grep uwsgi 找到uwsgi進程uwsgi.ini: root 7950 1 0 14:57 ? 00:00:00 uwsgi uwsgi.ini 進程id每一個人都不同 這裏的id是7950。 (4)殺掉後臺的uwsgi進程kill -9 後面加上進程的id 或者 killall uwsgi殺掉所有同名爲uwsgi的進程。
killall uwsgi (5)再用瀏覽器去訪問ip 瀏覽器頁面顯示:502 Bad Gateway 表示中止掉uwsgi程序的運行 (6)項目根目錄下會生成 nohup.out 記錄日誌
# Supervisor是python2寫就的一款強大的運維工具。 目前Supervisor還不支持python3。能夠經過如下方法解決。
可經過pip安裝.這裏用的是python3的pip.因此會安裝失敗.使用如下.
首先安裝supervisor (默認由自帶的python2.7驅動) $ apt-get install supervisor
進入默認配置文件(修改配置文件) vim supervisord.conf 按shift+G 跳到末尾 添加:files = /etc/supervisor/*.conf esc:wq 保存
執行:(若不是在root下執行在最前面加上 sudo)
$ supervisord -c /etc/supervisor/supervisord.conf
$ supervisorctl -c /etc/supervisor/supervisord.conf
# 這裏補充以一下:每當修改完配置後若是出現
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.
# 請從新執行以上的兩句命令
進入:supervisor shell模式表示成功
退出:supervisor shell
supervisor> exit
複製代碼
建立腳本文件,生成默認配置文件. vim app.conf
進入編輯模式添加配置 [program:myproject] directory = /root/myproject/ command= uwsgi --ini /root/myproject/uwsgi.ini autostart = true startsecs = 5 autorestart = true startretries = 3 user = root redirect_stderr = true stdout_logfile_maxbytes = 20MB stdout_logfile_backups = 20 stdout_logfile = /tmp/app.log stopasgroup=false killasgroup=false esc:wq 保存並退出
# 解析 [program:myproject]:# 項目的包名字(個人是myproject)
directory = /root/myproject/:# 程序的啓動目錄路徑
command= uwsgi --ini /root/myproject/uwsgi.ini:#啓動命令 (至關於直接啓動 uwsgi uwsgi.ini同樣只是加上了路徑)
autostart = true:# 在 supervisord 啓動的時候也自動啓動 startsecs = 5: # 啓動 5 秒後沒有異常退出,就看成已經正常啓動了 autorestart = true:# 程序異常退出後自動重啓 startretries = 3:# 啓動失敗自動重試次數,默認是 3 user = root: # 使用哪一個用戶啓動(我這裏用的root)
redirect_stderr = true:# 把 stderr 重定向到 stdout,默認 false stdout_logfile_maxbytes = 20MB:# stdout 日誌文件大小,默認 50MB stdout_logfile_backups = 20:# stdout 日誌文件備份數
注意:stdout 日誌文件,須要注意當指定目錄不存在時沒法正常啓動,因此須要手動建立目錄(supervisord會自動建立日誌文件)別忘了配置以後建立下面繼續。
stdout_logfile = /tmp/app.log
說下這兩個有用的配置項stopasgroup和killasgroup,若是咱們用Flask等Rest服務,一般其會開啓幾個進程,那麼若是stopasgroup不啓用的話,supervisor沒法重啓此服務(關閉主進程時其子進程沒有關閉,再開啓主進程時會提示端口被佔用等錯誤信息)。
stopasgroup=false: 默認爲 false,若是設置爲 true,當進程收到 stop 信號時,會自動將該信號發給該進程的子進程。若是這個配置項爲 true,那麼也隱含 killasgroup 爲 true。例如在 Debug 模式使用 Flask 時,Flask 不會將接收到的 stop 信號也傳遞給它的子進程,所以就須要設置這個配置項。
killasgroup=false: 默認爲 false,若是設置爲 true,當進程收到 kill 信號時,會自動將該信號發給該進程的子進程。若是這個程序使用了 python 的 multiprocessing 時,就能自動中止它的子線程。
# 建立日誌的文件夾
$ cd ~
$ cd /myproject/
$ mkdir tmp
複製代碼
配置完成
# 還有更多的配置參數請查閱官網
#這裏咱們能夠看出,雖然supervisor是python2寫的,但只要咱們指定運行的python3解釋器去運行程序就好了。
使配置生效(每當修改主配置文件或增改子配置文件都須要執行使它生效) 須要先進入 supervisorctl update # 由於是python3執行該命令可能會報錯 # 可使用如下命令:從新加載配置文件 $ supervisorctl reload
運行supervisorctl,便可進入shell裏面方便的操做,如start app、restart app等。 supervisorctl
restart myproject # 從新啓動 $ stop myproject # 中止 # 更多相關命令能夠到官網上查閱這裏不消息介紹
以上咱們只能在控制檯查看運行.咱們須要web界面上查看 # 添加修改配置文件 vim supervisord.conf # 若是在vim模式下找到則對應修改 # 若是沒有 按shift+G 跳至末尾添加
# IP和綁定端口
# 管理員名稱
# 管理員密碼
[inet_http_server]
port = 45.32.111.111:9001
username = user
password = 666666
# 若是不須要密碼能夠註釋在最前面機上;號
# ;username = user
# ;password = 666666
# 從新加載配置文件使它生效
$ cd /etc/supervisor
$ supervisorctl reload
# 最後你須要打開你的這個端口而且重啓supervisorctl
$ iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
$ cd /etc/supervisor
$ supervisorctl
複製代碼
用瀏覽器啓動 # 輸入你的ip和端口 45.32.111.111:9001
看到上圖界面表示已經成功,以後能夠經過打開Supervisor端口去監控管理你的項目一鍵啓動/中止你的項目。
——————————————————————————————————
有什麼遺漏不足的請多多指導!!!