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

九、部署优化建议

  1. 不要使用 Flask 自带开发服务器作为生产服务;
  2. 使用 Gunicorn 或 uWSGI 管理 Flask 应用;
  3. 使用 Nginx 作为反向代理;
  4. 使用 Systemd 保证服务自动运行;
  5. 配置 HTTPS 提升访问安全性;
  6. 将敏感配置放入环境变量或配置文件中;
  7. 定期检查日志,及时排查错误;
  8. 生产环境应关闭调试模式,例如:
app.config["DEBUG"] = False

总结

Flask 部署到云服务器的核心流程包括:上传项目、安装依赖、使用 Gunicorn 启动应用、通过 Systemd 管理服务、使用 Nginx 反向代理、开放安全组端口并配置 HTTPS。相比直接使用 Flask 开发服务器,这种部署方式更适合生产环境,稳定性、安全性和可维护性都更高。只要按照项目目录、启动命令、系统服务和 Nginx 配置逐步检查,就可以顺利完成 Flask 应用的云服务器部署。


标签: Flask部署 云服务器 Gunicorn