50 lines
1.9 KiB
Desktop File
50 lines
1.9 KiB
Desktop File
# ============================================================
|
||||
|
|
# MyBlog 后端 systemd 服务
|
|||
|
|
# ------------------------------------------------------------
|
|||
|
|
# 部署位置:/etc/systemd/system/myblog.service
|
|||
|
|
# 生效命令:
|
|||
|
|
# sudo systemctl daemon-reload
|
|||
|
|
# sudo systemctl enable --now myblog # 开机自启 + 立即启动
|
|||
|
|
# 常用命令:
|
|||
|
|
# sudo systemctl status myblog # 查看状态
|
|||
|
|
# sudo systemctl restart myblog # 重启
|
|||
|
|
# journalctl -u myblog -f # 跟踪日志
|
|||
|
|
# ============================================================
|
|||
|
|
|
|||
|
|
[Unit]
|
|||
|
|
Description=MyBlog FastAPI Backend
|
|||
|
|
# 等待网络就绪后再启动(uvicorn 需要绑定端口)
|
|||
|
|
After=network.target
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
# 专用运行账号:系统用户、禁止登录,只拥有项目文件权限
|
|||
|
|
User=blog
|
|||
|
|
Group=blog
|
|||
|
|
|
|||
|
|
# 工作目录必须是项目根目录(backend 包、.env、uploads 都相对它定位)
|
|||
|
|
WorkingDirectory=/var/www/blog
|
|||
|
|
|
|||
|
|
# 启动命令:使用项目虚拟环境里的 uvicorn,只监听本机 8080(禁止公网直连)
|
|||
|
|
ExecStart=/var/www/blog/venv/bin/uvicorn backend.main:app --host 127.0.0.1 --port 8080
|
|||
|
|
|
|||
|
|
# 崩溃后 3 秒自动重启;开机自启由 enable 管理
|
|||
|
|
Restart=always
|
|||
|
|
RestartSec=3
|
|||
|
|
|
|||
|
|
# 环境变量说明:
|
|||
|
|
# .env 不需要写进 EnvironmentFile —— 应用启动时会在代码里
|
|||
|
|
# 自动读取项目根目录 .env(backend/database.py 的 load_dotenv),
|
|||
|
|
# 这样也能避免 systemd 解析中文值/注释行时出错。
|
|||
|
|
# 部署时请务必在 /var/www/blog/.env 中配置 JWT_SECRET,否则后端拒绝启动。
|
|||
|
|
|
|||
|
|
# ---------- 安全加固(可选) ----------
|
|||
|
|
NoNewPrivileges=true
|
|||
|
|
PrivateTmp=true
|
|||
|
|
ProtectSystem=full
|
|||
|
|
ProtectHome=true
|
|||
|
|
# 允许写入:上传目录(用户上传文件)与 backend 目录(SQLite 数据库 backend/blog.db)
|
|||
|
|
ReadWritePaths=/var/www/blog/uploads /var/www/blog/backend
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|