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
|