fastapi: 在linux上发布一个fastapi项目

一,上传代码

进入到保存项目代码的目录,执行clone

$ git clone git@gitee.com:ld/your_project_name.git

查看效果:

$ cd your_project_name/
$ git remote -v
origin  git@gitee.com:ld/your_project_name.git (fetch)
origin  git@gitee.com:ld/your_project_name.git (push)

二,创建并激活虚拟环境

创建虚拟环境

$ /opt/app/python3.12/bin/python3 -m venv venv

激活:

$ source venv/bin/activate
((venv) ) [thn@VM-0-11-tencentos aiservice]$ 

升级pip

$ pip install --upgrade pip
Requirement already satisfied: pip in ./venv/lib/python3.12/site-packages (25.0.1)
Collecting pip
  Using cached pip-26.2.1-py3-none-any.whl.metadata (4.6 kB)
Using cached pip-26.2.1-py3-none-any.whl (1.8 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 25.0.1
    Uninstalling pip-25.0.1:
      Successfully uninstalled pip-25.0.1
Successfully installed pip-26.2.1

安装第三方库:

$ pip install -r requirements.txt

安装生产环境依赖:

$ pip install gunicorn uvicorn

 

三,测试uvicorn运行

1,配置.env

把项目需要的配置添加到文件中

2,创建相应的数据库等

CREATE DATABASE IF NOT EXISTS `database_name`
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_0900_ai_ci;

3,手动启动:

端口不要和本机上其他端口冲突

$ uvicorn app.main:app --port 8008

确认可以访问后,按ctrl+c停止

 

四,配置gunicorn

1,创建日志目录:

$ sudo mkdir /var/log/aiservice
$ sudo chmod 777 /var/log/aiservice

2,配置文件:

gunicorn.conf.py

$ more gunicorn.conf.py 
bind = "127.0.0.1:8008"
workers = 4
worker_class = "uvicorn.workers.UvicornWorker"
loglevel = "info"
accesslog = "/var/log/aiservice/gunicorn_access.log"
errorlog = "/var/log/aiservice/gunicorn_error.log"
daemon = False

 

五,配置systemd,用systemd管理项目的服务

先执行ExecStart的命令:

/opt/project/aiservice/venv/bin/gunicorn -c /opt/project/aiservice/gunicorn.conf.py app.main:app

如有报错,先进行处理

编辑service文件

$ sudo vi /etc/systemd/system/aiservice.service

文件内容:

[Unit]
Description=AIservice Daemon
After=network.target

[Service]
User=root
WorkingDirectory=/opt/project/aiservice
ExecStart=/opt/project/aiservice/venv/bin/gunicorn -c /opt/project/aiservice/gunicorn.conf.py app.main:app
Restart=always

[Install]
WantedBy=multi-user.target

用systemctl启动服务

$ sudo systemctl daemon-reload                  
$ sudo systemctl start aiservice.service
$ sudo systemctl status aiservice.service 
● aiservice.service - AIservice Daemon
   Loaded: loaded (/etc/systemd/system/aiservice.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2026-08-17 14:55:51 CST; 9s ago
 Main PID: 2062062 (gunicorn)
    Tasks: 42 (limit: 23161)

 

六,配置nginx,做反向代理

创建配置文件,内容如下:

upstream ycai_servce {
  server 127.0.0.1:8008;
}


server {
    listen       80;
    listen       443 ssl;
    server_name   aiservice.domainname.com;
    root /opt/project/aiservice;

    if ($scheme = http ) {
        #return 301 https://$host$request_uri;
    }
    if ($http_x_forwarded_proto = "http") {
        #rewrite ^(.*)$  https://$host$1  permanent;
    }

    ssl_certificate  /opt/ssl/api.domainname.com.pem;
    ssl_certificate_key  /opt/ssl/api.domainname.com.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    #ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
    proxy_intercept_errors on;
    recursive_error_pages on;
    charset utf-8;
    client_max_body_size 60m;
     client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;

    access_log /var/log/nginx/aiservice.domainname_access.log;
    error_log /var/log/nginx/aiservice.domainname_error.log;
    location / {
      proxy_read_timeout 1800;
      proxy_set_header Host $http_host;
      proxy_set_header X-real-ip $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://ycai_servce;
    }

}

 

重启nginx服务:

sudo nginx -s stop

 

posted @ 2026-08-17 21:15  刘宏缔的架构森林  阅读(13)  评论(0)    收藏  举报