python項目上線實操

  1. 上線前檢查項目還存在的問題:python manage.py check --deploy

配置文件(settings.py):

#所有關于debug的都注釋掉
DEBUG = False
# 允許所有主機訪問
ALLOWED_HOSTS = ['*']
#指定靜態文件在服務器位置
STATIC_ROOT = '/root/project/stat/'

# HTTP和HTTPS相關配置

# # 保持HTTPS連接的時間
# SECURE_HSTS_SECONDS = 3600
# SECURE_HSTS_INCLUDE_SUBDOMAINS = True
# SECURE_HSTS_PRELOAD = True
#
# # 自動重定向到安全連接
# SECURE_SSL_REDIRECT = True
#
# # 避免瀏覽器自作聰明推斷內容類型(避免跨站腳本攻擊風險)
# SECURE_CONTENT_TYPE_NOSNIFF = True
#
# # 避免跨站腳本攻擊
# SECURE_BROWSER_XSS_FILTER = True
#
# # COOKIE只能通過HTTPS進行傳輸
# SESSION_COOKIE_SECURE = True
# CSRF_COOKIE_SECURE = True
#
# # 防止點擊劫持攻擊手段 - 修改HTTP協議響應頭
# # 當前網站是不允許使用<iframe>標簽進行加載的
# X_FRAME_OPTIONS = 'DENY'
  1. 上線(打開阿里云服務器)
  2. 創建項目文件夾(配置文件、代碼文件、日志文件、靜態資源文件)
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir project_school
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/conf
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/code
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/logs
[root@izuf6hgznqeh3d0hgxzyrqz ~]# mkdir -p project_school/stat
[root@izuf6hgznqeh3d0hgxzyrqz project_school]# ls
code  conf  logs  stat
  1. 克隆碼云項目(code文件夾)
[root@izuf6hgznqeh3d0hgxzyrqz code]# git clone https://gitee.com/weejoo/school.git
[root@izuf6hgznqeh3d0hgxzyrqz code]# ls
school
  1. 創建環境,添加依賴項
[root@izuf6hgznqeh3d0hgxzyrqz project_school]# python3 -m venv venv
[root@izuf6hgznqeh3d0hgxzyrqz project_school]# source venv/bin/activate
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# ls
code  conf  logs  stat  venv
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# pip install -r code/school/requirements.txt

創建python3 -m venv venv
啟動source venv/bin/activate
更新pip pip install -U pip
安裝依賴項 pip install -r code/fangtx/requirements.txt

  1. uwsgi相關
  • 配置uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# vim conf/uwsgi.conf
  1[uwsgi]
  2 # 配置項目前導路徑
  3 base=/root/project
  4 # 配置項目名稱
  5 name=fangtx
  6 # 守護進程
  7 master=true
  8 # 進程個數(CPU個數)
  9 processes=4
 10 # 虛擬環境地址
 11 pythonhome=%(base)/venv
 12 # 項目地址
 13 chdir=%(base)/code/fangtx
 14 # 指定python解釋器
 15 pythonpath=%(pythonhome)/bin/python
 16 # 指定uwsgi文件
 17 module=%(name).wsgi
 18 # 通信的地址和端口(自己服務器內網的IP地址和端口)
 19 http=172.19.169.61:80
 20 # 日志文件地址
 21 # logto=%(base)/logs/uwsgi.log
  • 安裝uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# pip install uwsgi
  • 啟動uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# uwsgi --ini conf/uwsgi.conf
  • 如果80端口被占用(nginx)
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# netstat -nap | grep 80
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# systemctl stop nginx
  • 確認uwsgi可運行后,恢復配置文件中注釋的日志,uwsgi用8000端口,nginx用80端口
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# vim conf/uwsgi.conf
    19 通信的地址和端口(自己服務器的IP地址和端口)
    socket=服務器內網IP:8000
    20 # 日志文件地址
    21 logto=%(base)/logs/uwsgi.log
  1. 配置Nginx
  • 靜態文件夾轉移

(先在pycharm中指定靜態資源位置)

STATIC_ROOT = '/root/project_school/stat/'
(venv) [root@izuf6hgznqeh3d0hgxzyrqz school]# git pull
(venv) [root@izuf6hgznqeh3d0hgxzyrqz fangtx]# python manage.py collectstatic
(venv) [root@izuf6hgznqeh3d0hgxzyrqz stat]# ls
admin  css  images  js  rest_framework
  • 項目更新pull(不是必須的)
(venv) [root@izuf6hgznqeh3d0hgxzyrqz fangtx]# git pull
  • 配置nginx(動靜分離)
    • 后臺運行uwsgi
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# uwsgi --ini conf/uwsgi.conf &
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# jobs
[1]+  運行中               uwsgi --ini conf/uwsgi.conf &
  • 安裝nginx(不是必須)
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project_school]# yum install nginx
  • 配置nginx文件(nginx官方)-讓官方的包含自己項目的nginx文件
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# vim /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

 10 # Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
 
     access_log  /var/log/nginx/access.log  main;
 
     sendfile            on;
     tcp_nopush          on;
     tcp_nodelay         on;
     keepalive_timeout   65;
     types_hash_max_size 2048;
 
     include             /etc/nginx/mime.types;
      default_type        application/octet-stream;
 
     # Load modular configuration files from the /etc/nginx/conf.d directory.
     # See http://nginx.org/en/docs/ngx_core_module.html#include
     # for more information.
     include /etc/nginx/conf.d/*.conf;
     include /root/project_school/conf/nginx.conf;
 }

  • 配置nginx文件(nginx自己)(locatin動態走uwsgi,靜態走nginx)
server{
  2     listen 80;
  3     server_name _;
  4     access_log /root/project_school/logs/access.log;
  5     error_log /root/project_school/logs/error.log;
  6 
  7     location / {
  8         include uwsgi_params;
  9         uwsgi_pass 服務器內網IP:8000;
 10     }
 11 
 12     location /static/ {
 13         alias /root/project_school/stat/;
 14         expires 30d;
 15     }
 16 
 17 }

  1. HTTPS相關
  • sftp傳安全訪問證書到服務器(project>conf>cert>):2248813_weejoo.cn.key 2248813_weejoo.cn.pem
(venv) [root@izuf6hgznqeh3d0hgxzyrqz cert]# ls
2248813_weejoo.cn.key  2248813_weejoo.cn.pem
  • 配置HTTPS
(venv) [root@izuf6hgznqeh3d0hgxzyrqz project]# vim conf/nginx.conf
server {
 19     listen 443;
 20     server_name _;
 21     access_log /root/project/logs/access.log;
 22     error_log /root/project/logs/error.log;
 23 
 24     ssl on;
 25     ssl_certificate   /root/project/conf/cert/2248813_weejoo.cn.pem;
 26     ssl_certificate_key  /root/project/conf/cert/2248813_weejoo.cn.key;
 27     ssl_session_timeout 5m;
 28     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 29     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 30     ssl_prefer_server_ciphers on;
 31 
 32     location / {
 33         include uwsgi_params;
 34         uwsgi_pass 服務器內網IP:8000;
 35     }
 36 
 37     location /static/ {
 38         alias /root/project/stat/;
 39         expires 30d;
 40     }
 41 }

  • 保存退出/重啟nginx 
    systemctl restart nginx
  • 設置云解析DNS
    記錄類型: A
    主機記錄:@
    記錄值:服務器公網地址
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容