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阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容