Python-Web應用部署步驟
假設:
- 操作系統為原生
Ubuntu 18.04 LTS
- 當前登錄用戶為
xyz
- Web程序目錄:
/home/xyz/myblog
- 虛擬環境運行啟動腳本:
/home/xyz/runinenv.sh
/home/xyz/runinenv.sh
內容如下:#!/bin/bash export SOME_ENV=test-message VENV=$1 if [ -z $VENV ]; then echo "usage:runinenv [virtualenv_path] CMDS" exit 1 fi source ${VENV}/bin/activate shift 1 echo "Executing $@ in ${VENV}" exec "$@" deactivate
- PS.新服務器需要升級現有軟件包
# 更新包元信息 root$ apt-get update # 升級現有軟件包 root$ apt-get upgrade -y # 添加用戶 root$ adduser xyz # 將用戶xyz添加到sudo用戶組里面 root$ usermod -aG sudo xyz # 從root用戶切換到普通用戶 root$ su xyz # 從普通用戶切換到root用戶 xyz$ sudo -s
-
安裝必須的軟件
root$ apt-get install git w3m vim htop tree python3-pip virtualenv nginx supervisor -y
-
創建虛擬環境、安裝包、測試程序
cd ~ virtualenv v3web --python=python3 source /home/xyz/v3web/bin/activate cd /home/xyz/myblog pip install -r requirements.txt python run.py deactivate
-
使用supervisor管理進程(后台運行)
cd /etc/supervisor/conf.d/ vim demo.conf
/etc/supervisor/conf.d/demo.conf
內容如下:[program:demo] user=xyz directory=/home/xyz/myblog/ command=/bin/bash /home/xyz/runinenv.sh /home/xyz/v3web python /home/xyz/myblog/run.py autostart=true autorestart=true startsecs=5 stopsignal=HUP stopasgroup=true stopwaitsecs=5 stdout_logfile_maxbytes=20MB stdout_logfile=/var/log/supervisor/%(program_name)s-out.log stderr_logfile_maxbytes=20MB stderr_logfile=/var/log/supervisor/%(program_name)s-err.log
配置要點:
[program:<名稱>]
user=<運行用戶>
directory=<啟動目錄>
command=<運行的命令>
environment=<環境變量>
參考: Supervisor and Environment Variables
-
supervisor管理命令
# 重新加載配置 sudo supervisorctl reload # 查看進程狀態 sudo supervisorctl status # 停止/啟動/重啟某個進程(此處為demo) sudo supervisorctl stop/start/restart demo
-
Linux基礎命令
# 查看和python相關的tcp連接 netstat -antp | grep python # 查看和python相關的進程 ps uax | grep python # 殺死指定名稱的進程(此處為python) sudo pkill python
-
配置nginx
cd /etc/nginx/conf.d/ sudo vim demo.conf
/etc/nginx/conf.d/demo.conf
內容如下:server { listen 80; listen [::]:80; server_name blog.cp9648.xyz; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:5000/; # proxy_pass http://10.0.0.10:8999/; proxy_redirect off; } location /static/ { alias /home/xyz/myblog/static/; } }
-
nginx管理命令
# 重啟nginx服務(會重新加載配置文件) sudo service nginx restart # 啟動、停止服務器 sudo service nginx start/stop
-
nginx靜態文件403解決方案
修改django的默認admin路徑
python manage.py collectstatic
修改nginx配置文件(改完了需要重啟)
vim /etc/nginx/nginx.conf
將如下的行(nginx運行用戶默認為
www-data
)user www-data;
改為(將nginx運行用戶改為
root
)user root;
一般情況下,也將nginx運行用戶改為當前用戶(此處為
xyz
)user xyz;
重啟服務器
sudo service nginx restart