04 linux上部署fastapi服务与静态图片资源全流程

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 启动应用的方式适合开发和测试环境,但在生产环境中,建议使用进程管理器(如 systemdgunicorn)来管理应用。

使用systemd** 配置服务**

  1. 创建一个 systemd 服务文件:
sudo nano /etc/systemd/system/utidtfastapi.service
  1. 在文件中添加以下内容:
[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找到对应的地址,然后替换上面的值;

  1. 启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable utidtfastapi
sudo systemctl start utidtfastapi
  1. 检查服务状态:
sudo systemctl status utidtfastapi
  1. 如果修改后端服务代码,要linux里面保存代码,然后重启对应服务:
sudo systemctl restart utidtfastapi
sudo systemctl status utidtfastapi
# 第二种方法
sudo systemctl stop utidtfastapi
sudo systemctl start utidtfastapi
sudo systemctl status utidtfastapi

2.2、配置反向代理(可选)
  1. 安装 Nginx:
sudo apt update
sudo apt install nginx
  1. 编辑 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/utidtfastapi
  1. 添加以下内容:
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;
    }
}
  1. 启用配置并重启 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(内网项目,应该不需要转到公网上去)。

  1. 安装 Certbot:
sudo apt install certbot python3-certbot-nginx
  1. 获取并安装 SSL 证书:
sudo certbot --nginx -d 192.168.1.111
  1. 自动续期:
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 中创建一个新的配置文件。

  1. 创建一个新的配置文件(例如 road_images):
sudo nano /etc/nginx/sites-available/road_images
  1. 添加以下内容到该文件中:
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 启用配置文件
  1. 创建符号链接,将配置文件从 sites-available 移动到 sites-enabled
sudo ln -s /etc/nginx/sites-available/road_images /etc/nginx/sites-enabled/
  1. 删除默认配置文件(如果不需要):
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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值