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
浙公网安备 33010602011771号