记录一下我的部署过程。
Flask
文件为 /root/myproject/application.py
,其中的 Flask 实例为
app = Flask(__name__)
Gunicorn
在 /root/myproject/
中新建一个虚拟环境 venv 并激活虚拟环境,使用 pip 安装 Flask 等模块。然后安装 gunicorn:
pip install gunicorn
装好之后,执行命令:
gunicorn --bind 127.0.0.1:8000 application:app # application为文件名 app为实例名
http://127.0.0.1:8000 应该是可以访问的。(服务器可能需要做一下端口转发,不然就绑定 0.0.0.0)
Systemd
我希望服务器重启后,也可以自动启动 web server。
新建 /usr/lib/systemd/system/gunicorn.service,内容如下:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
WorkingDirectory=/root/myproject
ExecStart=/root/myproject/venv/bin/gunicorn -w 1 --bind 127.0.0.1:8000 application:app
PrivateTmp=true
Environment=key=value
[Install]
WantedBy=multi-user.target
然后执行 systemctl enable gunicorn
,重启一下服务器,之后执行 systemctl status gunicorn
确认服务正常启动。这里备注一下“Environment=key=value”这一行,systemd 启动的服务是不带环境变量的,被这个坑了好久🤣。
Nginx
最后,我使用 nginx 进行转发,和实现 https 访问。修改 /etc/nginx/conf.d/default.conf
server {
listen 443 ssl;
server_name myproject;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ssl_certificate /path/yourssl.cer;
ssl_certificate_key /path/yourssl.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
}
最后,测试一下 https://server_ip 看看能不能访问。