Files
easygoadmin-wiki/EasyGoAdmin_GoFrame_NaiveVue/zh/deploy/backend.md
T
2026-10-20 21:53:26 +08:00

107 lines
3.2 KiB
Markdown
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.
# 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) |