107 lines
3.2 KiB
Markdown
107 lines
3.2 KiB
Markdown
# 11.4 后端部署
|
||
|
||
:::tip 概述
|
||
后端为单二进制部署:go build 产物 + manifest 配置 + resource 静态资源 + ip2region 数据文件。生产用 systemd/supervisor 守护,开启优雅重启。
|
||
:::
|
||
|
||
## 编译
|
||
|
||
```sh
|
||
# 本机编译
|
||
go build -o bin/admin-server main.go
|
||
|
||
# Linux 交叉编译(Windows 开发机部署 Linux 服务器)
|
||
GOOS=linux GOARCH=amd64 go build -o bin/admin-server main.go
|
||
|
||
# 静态编译(无 CGO 依赖,容器友好)
|
||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/admin-server main.go
|
||
```
|
||
|
||
## 部署产物清单
|
||
|
||
```text
|
||
admin-server 二进制
|
||
manifest/config/config.yaml 生产配置(或环境变量覆盖)
|
||
manifest/data/ip2region.xdb 归属地库
|
||
resource/static/ 静态资源(验证码字体等)
|
||
resource/swagger/ API 文档页面
|
||
upload/ 上传目录(持久卷,提前建好并授权)
|
||
```
|
||
|
||
## systemd 配置示例
|
||
|
||
```ini
|
||
# /etc/systemd/system/admin-server.service
|
||
[Unit]
|
||
Description=EasyGoAdmin Server
|
||
After=network.target mysql.service redis.service
|
||
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=/opt/easygoadmin
|
||
ExecStart=/opt/easygoadmin/admin-server
|
||
Restart=always
|
||
RestartSec=5
|
||
# 生产密钥走环境变量(不写配置文件;前缀必须全大写 GF_,Linux 环境变量大小写敏感)
|
||
Environment=GF_JWT_SECRET=your-random-secret
|
||
Environment=GF_APP_ERRORMSG=false
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
```sh
|
||
systemctl daemon-reload
|
||
systemctl enable --now admin-server
|
||
journalctl -u admin-server -f # 日志跟随
|
||
```
|
||
|
||
## 启动验证
|
||
|
||
```sh
|
||
curl http://127.0.0.1:8000/api/health # {"code":0,...,"status":"up"}
|
||
curl -s http://127.0.0.1:8000/api.json | head # OpenAPI
|
||
# 启动日志检查:
|
||
# 无 IdentityLoader/LogSink 告警(接线正常)
|
||
# Redis 连接正常(无 memory fallback 告警)
|
||
```
|
||
|
||
## 优雅重启(graceful)
|
||
|
||
```yaml
|
||
server:
|
||
graceful: true # 已默认开启
|
||
```
|
||
|
||
生产发版流程:部署新二进制 → systemctl restart(优雅重启:处理完存量请求后换新进程)→ health 验证。多实例滚动重启实现零停机。
|
||
|
||
## 端口与反代
|
||
|
||
```text
|
||
服务监听 :8000(server.address)——生产不直接对外
|
||
前置 Nginx 终止 HTTPS + 反代:
|
||
location /api/ → proxy_pass http://127.0.0.1:8000
|
||
location /upload/ → proxy_pass http://127.0.0.1:8000(或直挂文件服务)
|
||
location /swagger → proxy_pass(可选:收紧为内网)
|
||
反代后把 Nginx 地址加入 api.proxyIps(IP 与限流准确性)
|
||
```
|
||
|
||
## 日志与监控
|
||
|
||
```text
|
||
应用日志:logger.path(默认 log/)——轮转交给 logrotate
|
||
运行监控:/api/server/info(内存/磁盘/DB/缓存/调度器)
|
||
健康探针:/api/health(负载均衡挂载)
|
||
告警建议:磁盘 >85%、health 失败、mode=memory、Scheduler 不健康
|
||
```
|
||
|
||
## 常见部署问题
|
||
|
||
| 症状 | 排查 |
|
||
|------|------|
|
||
| 启动即退出 | 配置文件路径(须从部署目录运行)/ 端口占用 / Go 版本 |
|
||
| 上传 404 | uploadDir 路径与权限;SetServerRoot 静态映射 |
|
||
| 归属地显示 "-" | ip2region.xdb 缺失或路径错 |
|
||
| 限流/IP 不准 | api.proxyIps 未含反代地址 |
|
||
| 多实例行为不一致 | Redis 不可用(mode=memory) |
|