Files
guzhujushiBlog/deploy/myblog.service
T

50 lines
1.9 KiB
Desktop File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 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 —— 应用启动时会在代码里
# 自动读取项目根目录 .envbackend/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