以下展示了在 Linux 上部署 Flask 应用时,使用 Nginx 和 Gunicorn 配合的两种绑定方式:绑定端口 和 绑定 UNIX 套接字 (.sock
) 的完整流程。
1. 准备工作
确保已经安装以下组件:
sudo apt update
sudo apt install python3 python3-pip python3-venv nginx
创建 Flask 项目,并进入其目录:
mkdir flask_app
cd flask_app
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn
创建 app.py
示例文件:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, Flask with Nginx and Gunicorn!"
if __name__ == "__main__":
app.run()
2. 使用 Gunicorn 绑定到端口
2.1 启动 Gunicorn 绑定端口
运行 Gunicorn,将应用绑定到指定端口(例如 5000):
gunicorn -w 4 -b 0.0.0.0:5000 app:app
2.2 配置 Nginx 代理到端口
编辑 Nginx 配置文件 /etc/nginx/sites-available/flask_app
:
server {
listen 80;
server_name your-server-ip-or-domain;
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
}
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置
sudo systemctl restart nginx
2.3 配置 Systemd 服务管理端口绑定的 Gunicorn
创建 systemd
服务文件 /etc/systemd/system/flask_app_port.service
:
[Unit]
Description=Gunicorn instance to serve Flask app (Port)
After=network.target
[Service]
User=your-username
Group=www-data
WorkingDirectory=/path/to/your/flask_app
Environment="PATH=/path/to/your/flask_app/venv/bin"
ExecStart=/path/to/your/flask_app/venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 app:app
[Install]
WantedBy=multi-user.target
启动并启用服务:
sudo systemctl start flask_app_port
sudo systemctl enable flask_app_port
3. 使用 Gunicorn 绑定到 UNIX 套接字
3.1 启动 Gunicorn 绑定 UNIX 套接字
运行 Gunicorn,绑定到 .sock
文件:
gunicorn -w 4 -b unix:/path/to/your/flask_app/flask_app.sock app:app
设置 .sock
文件权限:
sudo chmod 766 /path/to/your/flask_app/flask_app.sock
3.2 配置 Nginx 代理到 .sock
编辑 Nginx 配置文件 /etc/nginx/sites-available/flask_app_sock
:
server {
listen 80;
server_name your-server-ip-or-domain;
location / {
proxy_pass http://unix:/path/to/your/flask_app/flask_app.sock;
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;
}
}
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/flask_app_sock /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置
sudo systemctl restart nginx
3.3 配置 Systemd 服务管理 .sock
绑定的 Gunicorn
创建 systemd
服务文件 /etc/systemd/system/flask_app_sock.service
:
[Unit]
Description=Gunicorn instance to serve Flask app (Socket)
After=network.target
[Service]
User=your-username
Group=www-data
WorkingDirectory=/path/to/your/flask_app
Environment="PATH=/path/to/your/flask_app/venv/bin"
ExecStart=/path/to/your/flask_app/venv/bin/gunicorn -w 4 -b unix:/path/to/your/flask_app/flask_app.sock app:app
[Install]
WantedBy=multi-user.target
启动并启用服务:
sudo systemctl start flask_app_sock
sudo systemctl enable flask_app_sock
4. 测试部署
端口绑定方式
访问 http://<your-server-ip>
,Nginx 将代理到 Gunicorn 的 5000 端口。
UNIX 套接字方式
访问 http://<your-server-ip>
,Nginx 将代理到 Gunicorn 的 .sock
文件。
5. 对比两种方式
方式 | 优点 | 缺点 |
---|---|---|
绑定端口 | 配置简单,容易调试。 | 性能略低,适合小型应用。 |
绑定 UNIX 套接字 | 更高性能(避免 TCP/IP 网络栈开销),适合高并发场景。 | 配置稍复杂,需管理 .sock 文件权限。 |
注意:该内容由由AIGC提供。
标签:Web,Gunicorn,Python,app,sudo,sock,flask,Linux,your From: https://blog.csdn.net/weixin_49784554/article/details/145253969