docs(readme): document systemd-based deployment as primary launch mode

- Promote systemd to the primary 运行 method (production / long-running)

- Provide complete unit files for backend (compiled binary) and frontend (vite preview)

- Add daily ops cheatsheet: status / restart / journalctl / rebuild flows

- Keep start.sh as a local-dev / fallback path (方式 B)

- Warn against mixing start.sh with systemd to avoid port/process contention
This commit is contained in:
nianzhibai
2026-05-25 18:24:09 +08:00
parent bd3f27d5b3
commit f05df174ac
+98 -3
View File
@@ -45,17 +45,110 @@ Windows 用户可以把 Go 和 ffmpeg 解压到 `%USERPROFILE%\tools\`,然后
### 运行
Linux / WSL 环境推荐用仓库根目录的脚本同时启动前后端:
线上服务器以 **systemd** 守护两个进程常驻运行(推荐,开机自启 + 崩溃自愈 + 日志走 journalctl);本地开发可用 `start.sh` 或手动启动。
#### 方式 Asystemd(生产 / 长跑)
仓库不直接提交 unit 文件;把下面两段写到 `/etc/systemd/system/` 即可。后端走预编译二进制,前端走 vite preview 提供 `dist/` 静态文件。
```ini
# /etc/systemd/system/video-site-backend.service
[Unit]
Description=Video Site Backend (Go server)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=/root/myProject/91/backend
ExecStart=/root/myProject/91/backend/server
Restart=on-failure
RestartSec=5
TimeoutStopSec=20
# spider91 / OneDrive / PikPak 等海外接口走本机 mihomo;按实际代理改
Environment=HTTPS_PROXY=http://127.0.0.1:7890
Environment=HTTP_PROXY=http://127.0.0.1:7890
Environment=NO_PROXY=127.0.0.1,localhost,::1
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=HOME=/root
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal
SyslogIdentifier=video-site-backend
[Install]
WantedBy=multi-user.target
```
```ini
# /etc/systemd/system/video-site-frontend.service
[Unit]
Description=Video Site Frontend (Vite preview, serves dist/)
After=network-online.target video-site-backend.service
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=/root/myProject/91
ExecStart=/usr/bin/npm run preview -- --host 0.0.0.0 --port 9191
Restart=on-failure
RestartSec=5
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=HOME=/root
Environment=NODE_ENV=production
StandardOutput=journal
StandardError=journal
SyslogIdentifier=video-site-frontend
[Install]
WantedBy=multi-user.target
```
首次部署:
```bash
# 1. 编译后端二进制 + 构建前端静态产物
cd /root/myProject/91
npm install && npm run build
cd backend && go build -o server ./cmd/server
# 2. 启用并启动两个 unit
sudo systemctl daemon-reload
sudo systemctl enable --now video-site-backend.service video-site-frontend.service
```
日常运维:
```bash
# 状态 / 重启 / 停止
systemctl status video-site-backend video-site-frontend
systemctl restart video-site-backend
systemctl stop video-site-frontend
# 实时日志
journalctl -u video-site-backend -f
journalctl -u video-site-frontend -f
# 改了 Go 代码 → 重编译 + 重启后端
cd /root/myProject/91/backend && go build -o server ./cmd/server && sudo systemctl restart video-site-backend
# 改了前端代码 → 重新 build + 重启前端
cd /root/myProject/91 && npm run build && sudo systemctl restart video-site-frontend
```
注意 systemd 模式下不要再用 `./start.sh` 来 start/stop —— 它会和 systemd 抢端口、抢进程;只在 systemd 出故障时当应急后路。
#### 方式 Bstart.sh(本地开发 / 快速试跑)
```bash
npm install
./start.sh # 前端 9191,后端 9192;默认使用生产预览模式无热更新
./start.sh # 前端 9191,后端 9192;默认 preview 模式无热更新
./start.sh --status # 查看运行状态
./start.sh --restart # 重启
./start.sh --stop # 停止
```
如果需要开发热更新,可临时使用 `FRONTEND_MODE=dev ./start.sh --restart`
需要前端热更新:`FRONTEND_MODE=dev ./start.sh --restart`
也可以分两个终端手动启动:
@@ -70,6 +163,8 @@ cd backend
go run ./cmd/server # 默认监听 127.0.0.1:9192,依赖已 vendor 入库,无需 go mod tidy
```
#### 启动后
首次启动后端会自动生成:
- `backend/config.yaml`(从 `config.example.yaml` 复制)