python项目部署

打包上传代码

项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如:

ALLOWED_HOSTS = ["*",]

这个配置就是允许别人通过哪个ip访问你,*表示所有ip

上线时还要将配置中的DEBUG改为False

不同系统如何传代码

windows: 
    yum install lrzsz
    压缩zip包,拖进来。
mac:
    scp /home/xx/s8day145.zip  root@192.11.11.11:/data/

在真正的线上环境应该从git上拖代码

安装Python3

a. 下载Python:https://www.python.org/ftp/python/3.5.4/
b. 解压 tar -xvf Python-3.5.4.tgz
c. cd Python-3.5.4
d. 先装依赖:
    - yum install openssl-devel
    - yum install sqlite-devel
e. 编译安装
    - ./configure
    - make 
    - make install 
    
    /usr/local/bin python3 
f. 安装django 
    pip3 install django==1.11.7

第一版本上线:简单粗暴
进入python程序目录

python3 manage.py runserver 0.0.0.0:8000

uwsgi
Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替

在服务器上安装uwsgi

pip3 install uwsgi

单文件使用uwsgi
在服务器上编写一个Python文件app.py

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

在服务器上执行命令启动Web服务器:

uwsgi --http :9001 --wsgi-file app.py
或
uwsgi --http :9002 --wsgi-file app.py --master --processes 4  # 启动4个进程

PS: flask需要再加 --callable app

uwsgi --http :9002 --wsgi-file app.py  --callable app

django程序*

方式一

uwsgi --http :9003 --chdir /data/s8day145/ --wsgi-file s8day145/wsgi.py  # chdir进入后面的项目目录 然后wsgi-file找到项目中的wsgi.py文件

方式二

可以看到上面的方法参数很多,我们可以将参数写到一个文件中

s8day145_uwsgi.ini
    [uwsgi]
    http = 0.0.0.0:9005
    chdir = /data/s8day145/
    wsgi-file = s8day145/wsgi.py
    processes = 4  # 进程数
    static-map = /static=/data/s8day145/allstatic  # 静态文件的目录

启动时

uwsgi --ini s8day145_uwsgi.ini

此时访问时,会出现找不到静态文件的错误。

想要uwsgi处理静态文件,需要先将django的静态文件收集到制定目录,然后再设置对应关系。

收集django静态文件

1.在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
2.执行 python3 manage.py collectstatic 命令,至此django项目所有相关静态文件都会收集到制定目录。
**设置uwsgi静态文件对应关系**
3.uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic

第三版本上线:uwsgi + nginx

nginx作用:

  • 处理静态文件
  • 反向代理
  • 负载均衡(LVS、haproxy)
    uwsig作用:
  • 处理动态请求

nginx配置文件

user root;
worker_processes 4;
 
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
 
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;
 
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
 
    upstream django {
        server 127.0.0.1:8001; 
        server 127.0.0.1:8002; 
    }
    server {
        listen      80;
 
        charset     utf-8;
 
        # max upload size
        client_max_body_size 75M;
 
        location /static {
            alias  /data/s8day145/allstatic; 
        }
 
        location / {
            uwsgi_pass  django;
            include     uwsgi_params;
        }
    }
}

uwsgi配置:/data/s8day145/

s8day145_uwsgi_8001.ini 
    [uwsgi]
    socket = 127.0.0.1:8001
    chdir = /data/s8day145/
    wsgi-file = s8day145/wsgi.py
    processes = 1
    
    
s8day145_uwsgi_8002.ini 
    [uwsgi]
    socket = 127.0.0.1:8002
    chdir = /data/s8day145/
    wsgi-file = s8day145/wsgi.py
    processes = 1

启动

nginx:
    /etc/init.d/nginx start 
    /bin/systemctl restart nginx.service
    /bin/systemctl start nginx.service
    /bin/systemctl stop nginx.service
 
uwsgi:
    uwsgi --ini s8day145_uwsgi_8001.ini &
    uwsgi --ini s8day145_uwsgi_8002.ini & 

如果进程挂了,supervisor帮助你自动将服务重新启动

supervisor是一个对进程管理的软件,可以帮助我们启动uwsgi并维护(uwsgi进程关闭时,自动将其启动起来)

安装

yum install supervisor

配置/etc/supervisord.conf

[program:s8day145]
command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令
priority=999                ; 优先级(越小越优先)
autostart=true              ; supervisord启动时,该程序也启动
autorestart=true            ; 异常退出时,自动启动
startsecs=10                ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3              ; 异常后,自动重启次数
exitcodes=0,2               ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT             ; 杀进程的信号
stopwaitsecs=10             ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将
使用SIGKILL杀进程
user=root                 ; 设置启动该程序的用户
log_stdout=true             ; 如果为True,则记录程序日志
log_stderr=false            ; 如果为True,则记录程序错误日志
logfile=/var/log/cat.log    ; 程序日志路径
logfile_maxbytes=1MB        ; 日志文件最大大小
logfile_backups=10          ; 日志文件最大数量

启动

systemctl start supervisord.service

公司正式上线流程

公司中的部署步骤及负责人:
- 开发提交代码
- 测试人员开始测试
- 运维人员进行上线
    使用软件:jenkins+自己写脚本,运维人员点点点。
        - 从git上啦代码到一个服务器,在该服务器上对代码进行编译(c/vue/java)
        - 通过以下工具 将代码同步到每台服务器上
            - saltstack
            - ansible
        - 执行命令启动程序

原文:https://blog.csdn.net/qq_40285302/article/details/81064739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值