python fast api 部署

python fast api 部署

 

1.新建gunicron_config.py

# 基本配置
workers = multiprocessing.cpu_count()
worker_class = "uvicorn.workers.UvicornWorker"
# worker_class = "ads_agent_svr.uvicorn_worker.GracefulUvicornWorker"
bind = "0.0.0.0:29796"
timeout = 30  # 工作进程无请求超时时间
graceful_timeout = 15  # 优雅退出超时时间
keepalive = 5  # 保持连接时间

 

2.run_with_gunicron.sh

gunicorn -c scripts/conf/gunicorn_config.py ads_agent_svr.app:app

 

3.新建system  /etc/systemd/system/ads_agent_svr.service

[Unit]
Description=FastAPI Application (Gunicorn + UvicornWorker)
After=network.target

[Service]
User=dev
Group=dev
WorkingDirectory=/app/app_ads_svr/app_ads_svr
Environment="PATH=/app/app_ads_svr/venv/bin"
ExecStart=/app/app_ads_svr/venv/bin/gunicorn \
          -c scripts/conf/gunicorn_config.py \
          app_ads_svr.app:app \
          --worker-class uvicorn.workers.UvicornWorker
Restart=always

[Install]
WantedBy=multi-user.target

 

 

重启服务

sudo systemctl restart ads_agent_svr 

查看状态

sudo systemctl status ads_agent_svr 

重载配置

sudo systemctl daemon-reload

 

4.nginx 配置

server {
    listen       80;
    listen       443  ssl;
    server_name  api-ads-g-test.xxxx.com;
    #ssl  on;
    client_max_body_size 512m;
    ssl_certificate      /app/certs/xxxx.com/current/server.crt;
    ssl_certificate_key  /app/certs/xxxx.com/current/server.key;
    access_log /data/ads_agent_svr/logs/nginx/api-ads-g-test.xxxx.com_access.log;
    error_log  /data/ads_agent_svr/logs/nginx/api-ads-g-test.xxxx.com_error.log;

    location /static/html {
        alias /data/ads_agent_svr/static/html;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    }

    location /static/photo/public {
        alias /data/pickwant/pickwant/generated/static/public;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    }

    location / {
        if ($request_method = OPTIONS) {
            return 204;
        }
        # 所有响应都带上 CORS
        add_header Access-Control-Allow-Origin * always;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;
        add_header Access-Control-Allow-Headers 'Authorization,Content-Type,Origin,Accept' always;

        proxy_pass http://127.0.0.1:29796;
        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;

        # WebSocket 必须的头
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 防止 WebSocket/长轮询被断开
        proxy_read_timeout 86400;
        proxy_send_timeout 86400;
    }

}

 

posted on 2025-08-21 16:06  星河赵  阅读(23)  评论(0)    收藏  举报

导航