以下是在 Ubuntu 18.04 上部署 Flask Web 应用的详细流程,适用于生产或测试环境。内容涵盖环境准备、项目部署、uWSGI/Gunicorn、Nginx反向代理及服务守护。


🚀 Ubuntu 18.04上部署Flask应用的完整流程


🧱 第一步:安装系统依赖

sudo apt update
sudo apt install python3 python3-pip python3-venv nginx -y

🐍 第二步:创建虚拟环境并安装Flask

# 创建项目目录
mkdir ~/myflaskapp
cd ~/myflaskapp

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 安装Flask和Gunicorn
pip install flask gunicorn

📁 第三步:创建Flask应用

在 ~/myflaskapp/ 下创建 app.py

# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, Flask on Ubuntu!"

if __name__ == "__main__":
    app.run()

🎯 第四步:测试本地运行(开发模式)

# 激活虚拟环境
source venv/bin/activate

# 运行应用
python app.py

访问浏览器:http://127.0.0.1:5000


🦄 第五步:使用 Gunicorn 启动生产服务器

gunicorn --bind 0.0.0.0:8000 app:app
  • app:app 中第一个是文件名(不带 .py),第二个是 Flask 应用对象名。
  • Gunicorn默认不会自动重启,适合生产部署。

🌐 第六步:配置 Nginx 反向代理

创建 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/myflaskapp

填入内容:

server {
    listen 80;
    server_name your_server_ip;

    location / {
        proxy_pass http://127.0.0.1:8000;
        include proxy_params;
        proxy_redirect off;
    }
}

启用配置并重启 Nginx:

sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

🔐 第七步(可选):使用 UFW 开放端口

sudo ufw allow 'Nginx Full'

🔁 第八步:使用 systemd 设置 Gunicorn 为服务

创建 systemd 文件:

sudo nano /etc/systemd/system/myflaskapp.service

内容如下:

[Unit]
Description=Gunicorn instance to serve myflaskapp
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myflaskapp
Environment="PATH=/home/ubuntu/myflaskapp/venv/bin"
ExecStart=/home/ubuntu/myflaskapp/venv/bin/gunicorn --workers 3 --bind unix:myflaskapp.sock -m 007 app:app

[Install]
WantedBy=multi-user.target

注意替换路径为你自己的用户和目录。

启动服务:

sudo systemctl daemon-reexec
sudo systemctl start myflaskapp
sudo systemctl enable myflaskapp

更新Nginx配置为sock通信:

location / {
    include proxy_params;
    proxy_pass http://unix:/home/ubuntu/myflaskapp/myflaskapp.sock;
}

重启 Nginx:

sudo nginx -t
sudo systemctl restart nginx

🧪 第九步:验证部署

访问你服务器的 IP 地址,即可看到:

Hello, Flask on Ubuntu!

📌 常见问题

问题解决方法
Nginx 403 Forbidden检查路径权限 & nginx.conf 中是否配置 user www-data;
Gunicorn无法启动检查路径是否正确,Python环境是否激活
无法访问网站检查防火墙是否放行80端口 (ufw allow 'Nginx Full')

🔗 参考资料