Python的安装与使用
参见无咎的另外一篇文章:Linux生产环境安装Python
Supervisor安装与使用
参见无咎的另外一篇文章:Supervisor使用详解
项目流程配置
以下所出现的xxx为项目名,不再额外申明
目录创建
mkdir -p /opt/pysite/xxx
mkdir -p /opt/pysite/env/xxx
mkdir -p /opt/pysite/sock
mkdir -p /opt/packages
项目uwsgi配置
文件名为xxx_uwsgi.ini
文件放在代码根目录下
[uwsgi]
#http=127.0.0.1:10001 #如果是http,通过proxy_pass http链接
socket=127.0.0.1:10001 #如果是socket,通过nginx配置uwsgi_pass socket链接
wsgi-file=/opt/pysite/xxx/app.py
callable=app
touch-reload=/opt/pysite/xxx/
#最大请求数,最多请求5000次就重启进程,以防止内存泄漏
max-requests=5000
#请求超时时间,超过60秒关闭请求
harakiri=60
#进程的数量
processes=1
#线程数
threads = 2
#记录pid的文件
pidfile=/opt/pysite/sock/xxx.pid
buffer-size = 32768
#日志最大50M
log-maxsize=50000000
#配置虚拟环境路径,如果是在虚拟环境下启动,这个一定要配,不配会有些包找不到,应用会报错。可以在uwsgi.log文件中看报错信息
virtualenv =/opt/pysite/env/xxx
#uwsgi日志文件,如果是通过supervisor托管,daemonize配置需要屏蔽
#daemonize=/home/flask_web/uwsgi.log
#项目更新后,自动加载
python-autoreload=1
#状态检测地址
#stats = 127.0.0.1:9191
supervisord子进程配置文件
给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/目录下,以.ini作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。如任意定义一个和脚本相关的项目名称的选项组:
文件名为/etc/supervisord.d/xxx.ini
# supervisor的程序名字
[program:xxx]
# supervisor执行的命令
command=uwsgi --ini /opt/pysite/xxx/xxx_uwsgi.ini
# 项目的目录
directory = /opt/pysite/xxx
# 开始的时候等待多少秒
startsecs=10
# 停止的时候等待多少秒
stopwaitsecs=5
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/opt/logs/xxx/supervisord.log
# 输出的错误文件
stderr_logfile=/opt/logs/xxx/supervisord.err
stopasgroup=true
killasgroup=true
云效流水线配置
Python 构建上传到仓库
Python 构建
无命令,默认即可
构建物上传
- 制品名称:Artifacts_${PIPELINE_ID}
- 打包路径:.
注意打包路径是【.】,不是空
主机部署
制品
选择前一步骤所设置的制品名称即可
部署配置
- 下载路径:/opt/packages/xxx.tgz
- 部署脚本
supervisorctl stop xxx
rm -rf /opt/pysite/xxx/*
tar xf /opt/packages/xxx.tgz -o -C /opt/pysite/xxx/;
#首次部署请先打开,运行一次后注释即可
# cd /opt/pysite/env/xxx
# cd /opt/pysite/env
# virtualenv --python=/usr/bin/python3 xxx
# cd xxx/bin
# source activate
cd /opt/pysite/xxx
#首次部署请先打开,运行一次后注释即可
# pip install -r requirements.txt
# deactivate
supervisorctl start xxx
Supervisor命令说明
常用命令
supervisorctl status //查看所有进程的状态
supervisorctl stop xxx //停止xxx应用
supervisorctl start xxx //启动xxx应用
supervisorctl restart xxx //重启xxx应用
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
Nginx配置
server {
listen 80; # 对外的80端口
server_name xxxx; # 服务器的地址
#access_log /var/log/nginx/host.access.log main;
......
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:10001;
}
location /static/ {
alias /opt/pysite/xxx/;
}
......
}