改为原生 systemd 部署方案
This commit is contained in:
parent
99d67c659c
commit
add1d6e441
@ -10,7 +10,7 @@
|
||||
}
|
||||
|
||||
handle /api/v1/updates/stream {
|
||||
reverse_proxy scout:8080 {
|
||||
reverse_proxy 127.0.0.1:8080 {
|
||||
flush_interval -1
|
||||
header_up Host {host}
|
||||
header_up X-Forwarded-Proto {http.request.header.X-Forwarded-Proto}
|
||||
@ -21,17 +21,17 @@
|
||||
request_body {
|
||||
max_size 512MB
|
||||
}
|
||||
reverse_proxy scout:8080 {
|
||||
reverse_proxy 127.0.0.1:8080 {
|
||||
header_up Host {host}
|
||||
header_up X-Forwarded-Proto {http.request.header.X-Forwarded-Proto}
|
||||
}
|
||||
}
|
||||
|
||||
handle /healthz {
|
||||
reverse_proxy scout:8080
|
||||
reverse_proxy 127.0.0.1:8080
|
||||
}
|
||||
|
||||
root * /srv/scout/frontend/dist
|
||||
root * /opt/scout/frontend/dist
|
||||
try_files {path} /index.html
|
||||
file_server
|
||||
}
|
||||
|
||||
52
deploy/nginx-native.conf
Normal file
52
deploy/nginx-native.conf
Normal file
@ -0,0 +1,52 @@
|
||||
map $http_x_forwarded_proto $scout_forwarded_proto {
|
||||
default $http_x_forwarded_proto;
|
||||
"" $scheme;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
root /opt/scout/frontend/dist;
|
||||
index index.html;
|
||||
|
||||
client_max_body_size 512m;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-Frame-Options "DENY" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
|
||||
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data:; font-src 'self'; frame-ancestors 'none'" always;
|
||||
|
||||
location /api/v1/updates/stream {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scout_forwarded_proto;
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
proxy_read_timeout 1h;
|
||||
}
|
||||
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scout_forwarded_proto;
|
||||
proxy_request_buffering off;
|
||||
proxy_read_timeout 10m;
|
||||
}
|
||||
|
||||
location = /healthz {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $scout_forwarded_proto;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
}
|
||||
60
使用说明.md
60
使用说明.md
@ -280,40 +280,38 @@ chmod 600 /etc/scout/scout.env
|
||||
|
||||
生产环境会拒绝默认测试管理员密码、缺少允许来源、缺少允许主机和缺少 SMTP 发件配置。`SCOUT_ALLOW_LEGACY_TOKEN` 默认关闭;推荐使用开发者账户会话上传,不要在公网长期保留兼容令牌。
|
||||
|
||||
### Docker Compose
|
||||
### 原生 systemd 部署(当前使用,不使用 Docker)
|
||||
|
||||
服务器安装 Docker 和 Compose 后,在项目根目录执行:
|
||||
当前部署不需要安装 Docker 或 Docker Compose。建议在 Linux 服务器上直接运行 Go 编译后的二进制,并由 `systemd` 管理服务。
|
||||
|
||||
先在构建机编译服务端和前端:
|
||||
|
||||
```bash
|
||||
cp deploy/scout.env.example deploy/scout.env
|
||||
# 编辑 deploy/scout.env,替换所有生产占位符
|
||||
docker compose -f deploy/docker-compose.yml up -d --build
|
||||
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o scout-server ./cmd/scout-server
|
||||
cd frontend
|
||||
npm ci
|
||||
npm run build
|
||||
cd ..
|
||||
```
|
||||
|
||||
Compose 会启动 Scout API 和前端静态站点:
|
||||
|
||||
- Scout API 仅在 Compose 网络内提供 `8080` 端口。
|
||||
- 前端站点绑定服务器本机 `127.0.0.1:8081`。
|
||||
- 包文件和用户数据保存在 Docker 卷 `scout-data` 中。
|
||||
- 外部域名入口应转发到 `127.0.0.1:8081`,并把原始 Host、客户端 IP 和 `X-Forwarded-Proto` 传递下来。
|
||||
|
||||
查看状态和日志:
|
||||
将文件复制到服务器:
|
||||
|
||||
```bash
|
||||
docker compose -f deploy/docker-compose.yml ps
|
||||
docker compose -f deploy/docker-compose.yml logs -f scout
|
||||
```
|
||||
|
||||
### systemd
|
||||
|
||||
不使用 Docker 时,可将编译后的 `scout-server` 放到 `/opt/scout/scout-server`,创建运行用户和数据目录:
|
||||
|
||||
```bash
|
||||
sudo useradd --system --home /var/lib/scout --shell /usr/sbin/nologin scout
|
||||
sudo install -d -o scout -g scout /var/lib/scout /etc/scout
|
||||
if ! id scout >/dev/null 2>&1; then
|
||||
sudo useradd --system --home /var/lib/scout --shell /usr/sbin/nologin scout
|
||||
fi
|
||||
sudo install -d -o scout -g scout /opt/scout /opt/scout/frontend /var/lib/scout /etc/scout
|
||||
sudo install -m 0755 scout-server /opt/scout/scout-server
|
||||
sudo cp -r frontend/dist /opt/scout/frontend/
|
||||
sudo install -m 0600 deploy/scout.env.example /etc/scout/scout.env
|
||||
# 编辑 /etc/scout/scout.env 后再执行以下命令
|
||||
```
|
||||
|
||||
编辑 `/etc/scout/scout.env`,替换所有生产占位符,然后设置权限:
|
||||
|
||||
```bash
|
||||
sudo chown -R scout:scout /opt/scout /var/lib/scout
|
||||
sudo chmod 600 /etc/scout/scout.env
|
||||
sudo install -m 0644 deploy/scout.service /etc/systemd/system/scout.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now scout.service
|
||||
sudo systemctl status scout.service
|
||||
@ -328,7 +326,11 @@ sudo journalctl -u scout.service -f
|
||||
|
||||
### Nginx 转发要求
|
||||
|
||||
`deploy/nginx.conf` 是容器内前端站点的参考配置。外部网关需要满足以下要求:
|
||||
`deploy/nginx-native.conf` 是非 Docker 部署使用的 Nginx 参考配置,默认从 `/opt/scout/frontend/dist` 提供前端文件,并转发到本机 `127.0.0.1:8080`。部署时请将 `server_name _;` 按外部网关实际要求调整。
|
||||
|
||||
`deploy/nginx.conf` 仅保留给 Docker 前端容器使用;当前非 Docker 部署不需要它。
|
||||
|
||||
外部网关需要满足以下要求:
|
||||
|
||||
- `/api/` 转发到 Scout API。
|
||||
- `/api/v1/updates/stream` 关闭代理缓冲,并将读取超时设置为至少 1 小时。
|
||||
@ -339,7 +341,7 @@ sudo journalctl -u scout.service -f
|
||||
|
||||
外部网关终止 HTTPS 后,必须将 `X-Forwarded-Proto: https` 传给 Scout;否则生产配置中的 `SCOUT_FORCE_HTTPS=true` 会拒绝请求。这是协议边界检查,不是 Scout 的证书管理功能。
|
||||
|
||||
`deploy/Caddyfile` 仅是 Caddy 反向代理的参考配置,其中的示例主机名需要替换为实际访问地址。它不会申请或配置 SSL 证书,也不会执行 DNS 解析、域名绑定或服务商 API 操作;如果 SSL 和 DNS 已由其他服务处理,请继续让该服务负责 TLS 终止,并把请求转发到 Scout 的入口。
|
||||
`deploy/Caddyfile` 仅是非 Docker 部署下的 Caddy 反向代理参考配置,其中的示例主机名需要替换为实际访问地址。它直接代理本机 `127.0.0.1:8080`,并从 `/opt/scout/frontend/dist` 提供前端文件。它不会申请或配置 SSL 证书,也不会执行 DNS 解析、域名绑定或服务商 API 操作;如果 SSL 和 DNS 已由其他服务处理,请继续让该服务负责 TLS 终止,并把请求转发到 Scout 的入口。
|
||||
|
||||
### 健康检查、备份和升级
|
||||
|
||||
@ -361,9 +363,9 @@ SCOUT_DATA_DIR=/var/lib/scout SCOUT_BACKUP_DIR=/var/backups/scout sh deploy/back
|
||||
|
||||
1. 先执行备份并确认备份文件可读取。
|
||||
2. 在测试环境执行 `go test ./...` 和 `npm run build`。
|
||||
3. 构建新镜像或替换二进制文件。
|
||||
3. 编译并替换新的二进制文件和前端静态文件。
|
||||
4. 重启服务并检查 `/healthz`、用户登录、包列表、上传和下载。
|
||||
5. 观察日志和磁盘空间后再删除旧版本。
|
||||
6. 如升级异常,停止新版本并恢复旧二进制或旧镜像,再恢复数据备份。
|
||||
6. 如升级异常,停止新版本并恢复旧二进制或旧前端文件,再恢复数据备份。
|
||||
|
||||
当前会话保存在内存中,服务端重启后已有登录会话会失效,客户端需要重新登录;用户和包数据不会因此丢失。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user