Flask云服务器部署:Gunicorn+Nginx
Flask云服务器部署:Gunicorn+Nginx
2026-08-06 12:23
Flask项目上传云服务器,经Gunicorn、Systemd、Nginx和HTTPS实现生产部署。
flask部署到云服务器
将 Flask 项目部署到云服务器,是很多 Python Web 应用上线的基础步骤。Flask 本身适合开发和构建轻量级 Web 服务,但生产环境中不建议直接使用 Flask 自带的开发服务器,而应配合 Gunicorn、uWSGI、Nginx、Systemd 等工具,实现稳定、安全、可维护的部署。
一、准备 Flask 项目
假设你的 Flask 项目结构如下:
my_flask_app/ ├── app.py ├── requirements.txt └── venv/其中
app.py示例:from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Flask 项目部署成功!"
requirements.txt示例:Flask gunicorn如果项目使用了数据库、Redis、Celery 等组件,也需要将对应依赖写入
requirements.txt,例如:Flask gunicorn SQLAlchemy psycopg2-binary二、上传项目到云服务器
可以使用 FTP、SFTP、Git 或宝塔面板等方式上传项目。
如果使用 Git,可以在服务器中执行:
git clone https://github.com/你的用户名/你的项目.git cd 你的项目进入项目目录后,创建 Python 虚拟环境:
python3 -m venv venv source venv/bin/activate安装依赖:
pip install -r requirements.txt安装完成后,可以先在服务器内部测试 Flask 是否能启动:
python app.py如果页面可以正常访问,说明基础环境没有问题。
三、使用 Gunicorn 启动 Flask
Gunicorn 是 Python Web 应用中常用的 WSGI 服务器,适合搭配 Flask 使用。
在项目目录中执行:
gunicorn -w 4 -b 127.0.0.1:8000 app:app命令含义如下:
-w 4:启动 4 个 Worker 进程;-b 127.0.0.1:8000:监听本地 8000 端口;app:app:第一个app是文件名,第二个app是 Flask 应用对象。
如果项目入口文件不是 app.py,需要对应修改。例如入口文件是 main.py,应用对象是 app,则使用:
gunicorn -w 4 -b 127.0.0.1:8000 main:app
四、配置 Systemd 守护进程
为了让 Flask 项目在后台长期运行,并且服务器重启后自动启动,可以使用 Systemd 管理服务。
创建服务文件:
sudo nano /etc/systemd/system/my_flask_app.service
写入以下内容:
[Unit]
Description=My Flask App
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/my_flask_app
Environment="PATH=/home/ubuntu/my_flask_app/venv/bin"
ExecStart=/home/ubuntu/my_flask_app/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
其中需要修改的地方包括:
User:服务器登录用户;WorkingDirectory:项目目录;Environment:虚拟环境路径;ExecStart:Gunicorn 启动命令。
保存后执行:
sudo systemctl daemon-reload
sudo systemctl start my_flask_app
sudo systemctl enable my_flask_app
查看运行状态:
sudo systemctl status my_flask_app
如果显示 active,说明服务已经正常启动。
五、配置 Nginx 反向代理
Nginx 可以处理静态资源、域名访问、SSL 证书和反向代理。Flask 应用通常只监听本地端口,例如 127.0.0.1:8000,然后通过 Nginx 将外部请求转发给 Flask。
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/my_flask_app
写入:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
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;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/my_flask_app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
如果云服务器开放了 80 端口,就可以通过域名访问 Flask 项目。
六、开放云服务器安全组端口
很多云服务器需要在控制台的安全组中开放端口。常见端口包括:
| 端口 | 用途 |
|---|---|
| 22 | SSH 远程连接 |
| 80 | HTTP 访问 |
| 443 | HTTPS 访问 |
如果只部署 HTTP 服务,至少需要开放 80 端口。若配置 HTTPS,则还需要开放 443 端口。
七、配置 HTTPS
生产环境中建议使用 HTTPS。可以使用 Let’s Encrypt 免费证书。
安装 Certbot:
sudo apt install certbot python3-certbot-nginx
生成证书:
sudo certbot --nginx -d your_domain.com
根据提示输入邮箱和域名,即可完成 HTTPS 配置。
配置成功后,访问:
https://your_domain.com
即可安全访问 Flask 应用。
八、常见问题排查
1. 页面无法访问
可以先检查 Gunicorn 服务状态:
sudo systemctl status my_flask_app
再检查 Nginx 状态:
sudo systemctl status nginx
如果 Nginx 正常,但 Flask 无法访问,需要查看 Gunicorn 日志。
2. 出现 502 Bad Gateway
通常是 Gunicorn 没有正常启动,或者 Nginx 的 proxy_pass 地址写错。确认 Flask 是否监听在 127.0.0.1:8000。
3. 静态文件加载失败
Flask 项目中静态文件一般放在 static 目录,模板文件放在 templates 目录。Nginx 也可以直接代理静态资源,但简单项目通常不需要额外配置。
4. 权限问题
如果项目目录权限不正确,Gunicorn 可能无法读取文件。可以执行:
sudo chown -R ubuntu:www-data /home/ubuntu/my_flask_app
九、部署优化建议
- 不要使用 Flask 自带开发服务器作为生产服务;
- 使用 Gunicorn 或 uWSGI 管理 Flask 应用;
- 使用 Nginx 作为反向代理;
- 使用 Systemd 保证服务自动运行;
- 配置 HTTPS 提升访问安全性;
- 将敏感配置放入环境变量或配置文件中;
- 定期检查日志,及时排查错误;
- 生产环境应关闭调试模式,例如:
app.config["DEBUG"] = False
总结
Flask 部署到云服务器的核心流程包括:上传项目、安装依赖、使用 Gunicorn 启动应用、通过 Systemd 管理服务、使用 Nginx 反向代理、开放安全组端口并配置 HTTPS。相比直接使用 Flask 开发服务器,这种部署方式更适合生产环境,稳定性、安全性和可维护性都更高。只要按照项目目录、启动命令、系统服务和 Nginx 配置逐步检查,就可以顺利完成 Flask 应用的云服务器部署。