以下是在 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' ) |
🔗 参考资料
- Flask官方文档:https://flask.palletsprojects.com/
- Gunicorn文档:https://docs.gunicorn.org/
- DigitalOcean教程:https://www.digitalocean.com/community/tutorials
发表回复