本文的 python 环境为 python3.8.1
安装 flask-blog
clone 代码到本地
cd /www
git clone https://github.com/ovenx/flask-blog.git
安装虚拟环境
python -m venv venv
. venv/bin/activate
安装依赖
pip install -r requirements.txt
创建数据库,导入数据表
create database flask-blog
source /www/flask-blog/blog/schema.sql
创建配置文件,修改数据库配置
cp /www/flask-blog/blog/config.py.example /www/flask-blog/blog/config.py
使用 gunicorn
flask 自带的 server 不能用于生产环境,需要使用其他的 server 替代,一般会使用 gunicorn
。
gunicorn -w4 -b127.0.0.1:8000 run:app // 在venv中启动
此时我们使用了 8000 来访问,替代了原先的端口。-w 表示 worker 数量 -b 表示端口地址。
到这里其实我们已经可以正常运行 flask-blog 程序了,用 nginx 反代 8000 端口即可。但是 gunicorn 管理起来比较麻烦,为了管理方便我们需要使用 supervisor 来管理 gunicorn 进程。
使用 supervisor
首先安装 supervisor
pip install supervisor
echo_supervisord_conf > /etc/supervisord.conf // 生成配置文件
编辑配置文件 /etc/supervisord.conf,添加 gunicorn
[program:flask-blog]
command=sh -c 'source "$0" && exec "$@"' venv/bin/activate gunicorn -w4 -b 127.0.0.1:8000 run:app
directory=/www/flask-blog
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/flask-blog.log
stderr_logfile=/var/log/flask-blog.log
stopasgroup=true
stopsignal=QUIT
这里注意需要先启动 virtualenv
然后启动 supervisord,默认会启动所有的服务
supervisord -c /etc/supervisord.conf //启动
supervisorctl shutdown // 关闭
管理某个服务
supervisorctl start flask-blog #启动
supervisorctl stop flask-blog #停止
配置 nginx 反代
创建 /etc/nginx/conf.d/flask-blog.conf,https 配置参考上一篇《let’s encrypt 小记》
server{
listen 443 http2 ssl;
server_name www.domain_1.com;
ssl_certificate /etc/letsencrypt/live/www.domain_1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.domain_1.com/privkey.pem;
include /etc/nginx/default.d/ssl.conf;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启 nginx,大功告成,访问 https://www.domain_1.com/admin 来添加文章吧!