文章目录
- 前言
- 一、如何启动服务
- 二、挂载和开机启动服务
- 1. 配置systemctl 服务
- 2. 创建server用户
- 3. 启动服务
- 总结
前言
如果你的后端服务写好了如果部署到你的服务器呢,本次通过fastapi写的服务实例,示范如何部署到服务器,并做服务管理。
一、如何启动服务
首先将app文件放到服务器目录,实例app文件如下:
from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
import uvicornapi_router = APIRouter()app = FastAPI()
app.include_router(api_router)# 添加跨域中间件
app.add_middleware(CORSMiddleware,allow_origins=["*"],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)__VERSION__ = '1.0.0'@app.get("/version", status_code=201)
async def say_hi():return {"message": 'connection is OK !',"version": __VERSION__,"success": True}def start_sever():uvicorn.run(app, host='127.0.0.1', port=8080)if __name__ == '__main__':start_sever()
在app目录执行
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app.main:app --bind 0.0.0.0:8000
Gunicorn 和 Uvicorn 都是 Python Web 服务器的工具,uvicorn支持携程操作,gunicorn支持多核操作,两者搭配使用,通过-w
参数配置核心数。
注意:上面的app.main使用自己的项目名,如果显示端口被占用,可以更改另一个端口。
此时服务已经启动了,通过浏览器检查 http://127.0.0.1/docs
可以看到fastapi提公的api文档。
二、挂载和开机启动服务
1. 配置systemctl 服务
配置systemctl 服务文件:
/etc/systemd/system/your-serverr.service
[Unit]
Description= your server
After=network.target[Service]
User=server_user
Group=server_user
WorkingDirectory=/opt/data-center-server/server
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="PYTHONPATH=/opt/data-center-server/server"# 使用您已验证成功的命令格式ExecStart=/usr/bin/gunicorn \-k uvicorn.workers.UvicornWorker \server:app \--bind 0.0.0.0:8080Restart=always
RestartSec=3
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
2. 创建server用户
对于一个特定的服务应该需要配置要给用户,并基于当个文件目录的权限
sudo adduser --system --no-create-home --group fastapi_runtime
创建一个无登录权限的用户,配置用户权限
sudo chown -R fastapi_user:fastapi_user /path/to/your/project
sudo chmod 750 /path/to/your/project
测试用户运行
sudo -u server_user bash -c 'cd /opt/data-center-server/server && /usr/local/bin/gunicorn -w 1 app.main:app --bind 127.0.0.1:8000'
3. 启动服务
启动服务配置开机启动
systemctl daemon-reload
systemctl start your-server.service
systemctl enable your-server.service
通过浏览器应该能访问服务接口
如果上述失败,检查服务启动日志,看是哪一步的问题。
journalctl -u your-server.service -n 100
总结
以上就是如何通过systemctl挂载和启动服务,后续如果有多个服务,注意端口的重复占用,当然也可以通过Nginx来分配端口的环回。