【Web 后端】部署服务到服务器

发布于:2025-07-07 ⋅ 阅读:(15) ⋅ 点赞:(0)


前言

如果你的后端服务写好了如果部署到你的服务器呢,本次通过fastapi写的服务实例,示范如何部署到服务器,并做服务管理。


一、如何启动服务

首先将app文件放到服务器目录,实例app文件如下:

from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
import uvicorn

api_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:8080

Restart=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来分配端口的环回。


网站公告

今日签到

点亮在社区的每一天
去签到