linux上部署fastapi与静态图片服务全流程
1、准备工作
1.1、确保系统已安装必要的工具
在部署之前,确保你的 Linux 系统上安装了以下工具:
- Python(推荐 3.8 或更高版本)
- pip(Python 包管理工具)或者anaconda
- Git(如果需要从远程仓库拉取代码)
- ngnix
1.2、将代码与图片上传到服务器
- xshell连接以后,使用xftp上传文件
- 使用使用 scp命令将本地代码上传到服务器
- 如果代码托管在 GitHub 或其他版本控制系统中,可以直接克隆代码
1.3、设置虚拟环境
为了隔离项目的依赖,建议创建一个 Python 虚拟环境(anaconda里面类似):
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装项目依赖
pip install -r requirements.txt
如果你的项目没有 requirements.txt
文件,可以通过以下命令生成:
pip freeze > requirements.txt
1.4、启动 FastAPI 应用
使用 uvicorn 启动 FastAPI 应用:
uvicorn main:app --host 0.0.0.0 --port 8000
#main 是包含 FastAPI 实例的 Python 文件名(不带 .py 后缀)
#app 是 FastAPI 实例的变量名。
#--host 0.0.0.0 表示监听所有网络接口。
#--port 8000 表示应用运行在端口 8000 上
此时,你可以通过浏览器访问 http://your_server_ip:8000 来测试是否成功部署。
2、fastapi服务实际部署
2.1、配置进程管理器
直接使用 uvicorn
启动应用的方式适合开发和测试环境,但在生产环境中,建议使用进程管理器(如 systemd
或 gunicorn
)来管理应用。
使用systemd
** 配置服务**
- 创建一个
systemd
服务文件:
sudo nano /etc/systemd/system/utidtfastapi.service
- 在文件中添加以下内容:
[Unit]
Description=utidtFastAPI Application
After=network.target
[Service]
User=lxy
WorkingDirectory=/home/lxy/UTIDTPrototypeBackendSystem
ExecStart=/home/lxy/anaconda3/envs/fastapienv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
替换 your_user
和 /path/to/your/fastapi/project
为实际的值。可以用于pwd命令找到你的工作目录、anaconda先切换到fastapi的环境,使用which uvicorn找到对应的地址,然后替换上面的值;
- 启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable utidtfastapi
sudo systemctl start utidtfastapi
- 检查服务状态:
sudo systemctl status utidtfastapi
- 如果修改后端服务代码,要linux里面保存代码,然后重启对应服务:
sudo systemctl restart utidtfastapi
sudo systemctl status utidtfastapi
# 第二种方法
sudo systemctl stop utidtfastapi
sudo systemctl start utidtfastapi
sudo systemctl status utidtfastapi
2.2、配置反向代理(可选)
- 安装 Nginx:
sudo apt update
sudo apt install nginx
- 编辑 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/utidtfastapi
- 添加以下内容:
server {
listen 80;
server_name 192.168.1.111;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/utidtfastapi /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
2.3、配置 HTTPS(可选)
为了保护通信安全,可以使用 Let’s Encrypt 免费证书为你的应用启用 HTTPS(内网项目,应该不需要转到公网上去)。
- 安装 Certbot:
sudo apt install certbot python3-certbot-nginx
- 获取并安装 SSL 证书:
sudo certbot --nginx -d 192.168.1.111
- 自动续期:
sudo certbot renew --dry-run
2.4. 测试和监控
- 确保你的应用可以通过浏览器或 API 测试工具(如 Postman)正常访问。
- 使用日志监控工具(如
journalctl
)查看systemd
服务日志:
sudo journalctl -u utidtfastapi -f
3、静态图片资源实际部署
3.1 配置 Nginx 静态文件服务
编辑 Nginx 配置文件
Nginx 的配置文件通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/sites-available/default
。我们可以在 sites-available
中创建一个新的配置文件。
- 创建一个新的配置文件(例如
road_images
):
sudo nano /etc/nginx/sites-available/road_images
- 添加以下内容到该文件中:
server {
listen 80;
server_name 192.168.1.111;
# 指定图片资源目录
location /images/ {
alias /home/lxy/data/roadInspectionImages/;
autoindex on; # 可选:允许列出目录内容
}
}
- `listen 80;`:监听 HTTP 默认端口 80。
- `server_name 192.168.1.111;`:指定服务器的 IP 地址。
- `location /images/ {}`:定义一个路径 `/images/`,用于访问图片资源。
- `alias /home/lxy/data/roadInspectionImages/;`:将 `/images/` 映射到实际的图片目录。
- `autoindex on;`:可选,允许列出目录内容(方便查看目录中的文件列表)。
3.2 启用配置文件
- 创建符号链接,将配置文件从
sites-available
移动到sites-enabled
:
sudo ln -s /etc/nginx/sites-available/road_images /etc/nginx/sites-enabled/
- 删除默认配置文件(如果不需要):
sudo rm /etc/nginx/sites-enabled/default
3.3 测试 Nginx 配置
在重新加载 Nginx 之前,先测试配置文件是否正确:
sudo nginx -t
如果配置正确,会显示类似以下内容:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
3.4 重启 Nginx
如果配置文件没有问题,重启 Nginx 以应用更改:
sudo systemctl restart nginx
3.5 访问图片资源
现在,你可以通过浏览器访问你的图片资源。假设你的图片目录中有文件 example.jpg
,访问方式如下:
http://192.168.1.111/images/test.jpg
如果启用了 autoindex on;
,你还可以直接访问目录列表:
http://192.168.1.111/images/
3.6 权限设置
确保 Nginx 对图片目录有读取权限。你可以通过以下命令设置权限:
sudo chmod -R 755 /home/lxy/data/roadInspectionImages
sudo chown -R www-data:www-data /home/lxy/data/roadInspectionImages
chmod 755
:为目录和文件设置适当的权限。chown www-data:www-data
:将目录的所有者设置为 Nginx 用户(通常是www-data
)。
3.7 防火墙配置(如果需要)
如果你的服务器启用了防火墙(如 ufw
),确保开放 HTTP 端口(默认是 80):
sudo ufw allow 'Nginx Full'