You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flask API生产环境部署流程咨询

Flask API生产环境部署流程咨询

兄弟,我太懂你刚从Spring Boot转Flask的别扭了——毕竟Spring Boot打个Jar扔服务器上就能跑,Flask这边确实得换一套路数。结合你提到的项目情况,我给你唠唠生产环境部署的靠谱流程,都是实际在服务器上跑通的方案:

一、先把项目依赖和环境准备妥当

  • 先在本地项目根目录导出所有依赖到requirements.txt,命令是:pip freeze > requirements.txt,这样服务器上就能一键安装所有需要的包,省得一个个装。
  • 服务器上一定要用虚拟环境隔离,避免和系统Python环境冲突,步骤很简单:
    1. 创建虚拟环境:python3 -m venv venv
    2. 激活虚拟环境(Linux/macOS):source venv/bin/activate
    3. 安装项目依赖:pip install -r requirements.txt

二、用Gunicorn作为WSGI服务器 (核心一步!)

Flask自带的flask run是开发服务器,性能和稳定性都扛不住生产流量,必须用专门的WSGI服务器,Gunicorn是业界标配

  • 先安装Gunicorn:pip install gunicorn
  • 先测试启动:如果你的Flask应用入口是根目录app.py里的app对象,命令是:gunicorn -w 4 -b 0.0.0.0:8000 app:app
    • 给你解释下参数:-w 4是开4个工作进程(一般按服务器CPU核心数*2+1来设置,比如4核CPU就开9个),-b是绑定的地址和端口,让服务器能对外接收请求。
  • 做成系统服务(避免你退出终端就停服):
    新建一个systemd配置文件/etc/systemd/system/flask-api.service,内容如下:
    [Unit]
    Description=Flask API Service
    After=network.target
    
    [Service]
    User=你的服务器登录用户名
    WorkingDirectory=/你的项目在服务器上的绝对路径(比如/opt/my_flask_api)
    Environment="PATH=/你的项目路径/venv/bin"
    ExecStart=/你的项目路径/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
    
    [Install]
    WantedBy=multi-user.target
    
    然后执行这几个命令搞定服务:
    1. 启动服务:sudo systemctl start flask-api
    2. 设置开机自启(服务器重启后自动跑起来):sudo systemctl enable flask-api
    3. 查看服务状态(确认没报错):sudo systemctl status flask-api

三、配置Nginx做反向代理 (生产环境标配!)

Nginx能帮你处理静态文件、负载均衡、SSL证书这些杂事,还能把Gunicorn藏在后面,避免直接暴露在外被攻击:

  • 先安装Nginx:Debian/Ubuntu用sudo apt install nginx,CentOS/RHEL用sudo yum install nginx
  • 新建Nginx配置文件/etc/nginx/sites-available/flask-api,内容如下:
    server {
        listen 80;
        server_name 你的服务器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;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        # 如果你的项目有static静态文件目录,加上这段可以让Nginx直接处理静态请求,减轻Gunicorn的压力
        location /static {
            alias /你的项目路径/static;
            expires 30d;
        }
    }
    
  • 启用配置并重启Nginx:
    1. 创建软链接让Nginx识别这个配置:sudo ln -s /etc/nginx/sites-available/flask-api /etc/nginx/sites-enabled
    2. 测试配置是否有语法错误:sudo nginx -t
    3. 重启Nginx生效:sudo systemctl restart nginx

四、最后几个关键细节别忘

  • 防火墙:记得开放服务器的80端口(如果用HTTPS就开443),比如Ubuntu系统用sudo ufw allow 80/tcp,CentOS用sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
  • HTTPS加密:如果需要加密访问,用Certbot给Nginx配置免费的SSL证书,命令是sudo certbot --nginx,跟着向导点几下就搞定,全自动配置
  • 项目入口调整:如果你的Flask app不是在根目录的app.py里,比如在子模块src/app.py,那Gunicorn的启动命令要改成gunicorn -w 4 -b 0.0.0.0:8000 src.app:app

备注:内容来源于stack exchange,提问作者Dilpreet Singh

火山引擎 最新活动