欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python项目部署

程序员文章站 2022-06-11 10:07:21
...

打包上传代码

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

ALLOWED_HOSTS = ["*",]

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

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

不同系统如何传代码

windows: 
    yum install lrzsz
    压缩zip包,拖进来。
mac:
    scp /home/xx/s8day145.zip  [email protected]:/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