插件窝 干货文章 centos怎么使用Nginx部署flask应用

centos怎么使用Nginx部署flask应用

Nginx myflaskapp sudo Gunicorn 826    来源:    2025-04-22

在CentOS上使用Nginx部署Flask应用

准备工作

  1. 确保你有一个运行CentOS的服务器
  2. 确保你拥有root或sudo权限

安装必要的软件包

# 更新系统
sudo yum update -y

# 安装EPEL仓库(Extra Packages for Enterprise Linux)
sudo yum install epel-release -y

# 安装Nginx
sudo yum install nginx -y

# 安装Python和pip
sudo yum install python3 python3-pip python3-devel -y

# 安装虚拟环境工具
sudo pip3 install virtualenv

创建Flask应用

  1. 创建项目目录并进入
sudo mkdir -p /var/www/myflaskapp
sudo chown -R $USER:$USER /var/www/myflaskapp
cd /var/www/myflaskapp
  1. 创建虚拟环境并激活
python3 -m virtualenv venv
source venv/bin/activate
  1. 安装Flask和Gunicorn
pip install flask gunicorn
  1. 创建简单的Flask应用
# 创建app.py文件
echo 'from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1>Hello World from Flask!</h1>"

if __name__ == "__main__":
    app.run(host="0.0.0.0")
' > app.py

配置Gunicorn

  1. 测试Gunicorn是否能正常运行Flask应用
gunicorn -w 4 -b 127.0.0.1:8000 app:app
  1. 创建Gunicorn服务文件
sudo nano /etc/systemd/system/myflaskapp.service

添加以下内容:

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

[Service]
User=yourusername
Group=nginx
WorkingDirectory=/var/www/myflaskapp
Environment="PATH=/var/www/myflaskapp/venv/bin"
ExecStart=/var/www/myflaskapp/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app

[Install]
WantedBy=multi-user.target

替换yourusername为你的实际用户名。

  1. 启动并启用服务
sudo systemctl start myflaskapp
sudo systemctl enable myflaskapp

配置Nginx

  1. 创建Nginx配置文件
sudo nano /etc/nginx/conf.d/myflaskapp.conf

添加以下内容:

server {
    listen 80;
    server_name your_domain_or_IP;

    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;
    }
}

替换your_domain_or_IP为你的域名或服务器IP地址。

  1. 测试Nginx配置
sudo nginx -t
  1. 重启Nginx
sudo systemctl restart nginx

防火墙设置

# 如果防火墙开启
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

测试应用

现在你应该可以通过浏览器访问你的服务器IP或域名来查看Flask应用了。

可选:使用SSL/TLS加密

  1. 安装Certbot
sudo yum install certbot python3-certbot-nginx -y
  1. 获取SSL证书
sudo certbot --nginx -d your_domain
  1. 设置自动续订
sudo certbot renew --dry-run

常见问题解决

  1. 502 Bad Gateway错误

    • 确保Gunicorn服务正在运行:sudo systemctl status myflaskapp
    • 检查Gunicorn是否监听正确的端口(默认为8000)
  2. 权限问题

    • 确保Nginx用户有访问应用的权限
    • 检查日志:sudo tail -f /var/log/nginx/error.log
  3. 静态文件服务: 如果需要服务静态文件,可以在Nginx配置中添加:

    location /static {
       alias /var/www/myflaskapp/static;
    }
    

这样你就成功在CentOS上使用Nginx部署了Flask应用!