说明
本文采用虚拟环境的方式,方便部署多个项目。
1. 安装Python3
此步骤可以查看我的博客:https://blog.ejubei.net/2019/03/14/CentOS%207.2%E5%AE%89%E8%A3%85Python3.7/
最终的效果:
1 | [root@localhost ~]# python3 -V |
2. 创建项目目录,安装虚拟环境
- 创建项目目录,安装虚拟环境
[root@localhost ~]# mkdir –p /home/microblog && cd /home/microblog && python3 -m venv venv - 激活虚拟环境,安装项目所需的依赖包
需要事先把requirements.txt放入项目所在目录中
[root@localhost microblog]# source venv/bin/activate
(venv) [root@localhost microblog]# pip3 install -r requirements.txt 上传项目代码
演示使用,本例用一个最简单的flask应用:mocroblog.py1
2
3
4
5
6
7
8
9
10
11#!/usr/bin/env python
from flask import Flask
app = Flask(__name__)
def index():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0')测试
1
2
3
4
5
6
7(venv) [root@localhost microblog]# python3 microblog.py
* Serving Flask app "microblog" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
再打开一个窗口,运行:
1 | [root@localhost ~]# curl -i http://127.0.0.1:5000 |
一切正常!
3. 安装项目使用的web服务
安装nginx
[root@localhost ~]# yum install nginx
默认安装目录:/etc/nginx安装supervisor
注意:此软件要求系统Python版本不能高于3
[root@localhost ~]# yum install supervisor安装gunicorn
注意,这个要安装在项目使用的虚拟环境中1
2
3[root@localhost nginx]# cd /home/microblog/
[root@localhost microblog]# source venv/bin/activate
(venv) [root@localhost microblog]# pip3 install gunicorn
五. 相关配置文件设置
nginx相关配置
把/etc/nginx/nginx.conf中server{}块注释,在/etc/nginx/conf.d/目录中添加项目使用的以conf结尾的文件,比如:m.conf,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20server {
listen 80; #nginx监听端口
server_name 192.168.109.128; #域名或IP
location / {
proxy_pass http://127.0.0.1:9000; #监听代理端口
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 检测Nginx配置是否正确
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 启动Nginx
[root@localhost conf.d]# systemctl start nginx.service
# 查看Nginx状态
[root@localhost conf.d]# systemctl status nginx.servicesupervisor配置
默认配置文件:(1)/etc/supervisord.conf,在该文件最后一行有这样的信息:1
2[include]
files = supervisord.d/*.ini
也就说我们在这个目录下创建一个以ini结尾的文件即可
比如:/etc/supervisord.d/m.ini
其内容如下:
1 | [program:microblog] |
启动:supervisord -c /etc/supervisord.conf
五. 测试
使用浏览器访问:ip即可得到flask响应的结果,注意防火墙放行80端口
六. 其他说明
nginx+gunicorn+flask:这种模式就是不使用supervisor管理gunicorn
单独执行gunicorn命令:gunicorn -b 127.0.0.1:9000 microblog:app
七. 扩展
- supervisorctl的使用
supervisorctl status # 查询进程状态
supervisorctl stop node # 关闭 [program:node] 的进程
supervisorctl start node # 启动 [program:node] 的进程
supervisorctl restart node # 重启 [program:node] 的进程
supervisorctl stop all # 关闭所有进程
supervisorctl start all # 启动所有进程
supervisorctl reload # 重新读取配置文件,读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update # 重启配置文件修改过的程序 - 常见的gunicorn配置
[program:microblog]
directory = /home/microblog; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
若是项目中没有设置debug=True,则更改项目内容后想看到效果需要重载一下supervisor服务
supervisorctl reload - 其他别人的配置
网址:https://github.com/seasonstar/bibi
This based on Ubuntu/Debian,please skip if you had set up Python 3 environment.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# 安装python3环境
sudo apt-get update
sudo apt-get install python3-pip python3-dev
sudo apt-get install build-essential libssl-dev libffi-dev python-dev
#安装virtualenv
sudo pip3 install virtualenv virtualenvwrapper
echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
echo "export WORKON_HOME=~/Env" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
source ~/.bashrc
# 现在你的home目录下有Env的文件夹,你的python虚拟环境都会创建在这里
mkvirtualenv bibi # bibi可随便改成你的项目名
workon bibi # 现在已进入项目的独立环境
# 安装 mongodb 略 (请安装mongodb 2.6版本)
# 安装 redis 略
# 安装 rabbitMQ 略
mongod & # 启动mongodb
redis-server & # 启动redis
rabbitmq-server & # 启动RabbitMQ
安装依赖pip3 install -r requirements.txt
初始化数据库
1 | python3 manage.py shell |
运行
1 | # 启动 celery |
本地可以打开 http://127.0.0.1:5000/admin/
部署方式
1 | # 安装 supervisor |
创建supervisor配置
1 | sudo vim /etc/supervisor/conf.d/bibi.conf |
PS: 上面 -w 为 开启workers数,公式:(系统内核数*2 + 1)
创建nginx配置
1 | sudo vim /etc/nginx/sites-enabled/bibi.conf |
接着启动 supervisor, nginx
1 | sudo supervisorctl reload |