部署指南#

本文覆盖两种部署方式:本地/测试用 Docker Compose 一键启动;服务器/生产可以无 Docker(systemd)或自定义容器化部署。

依赖组件#

  • PostgreSQL / TimescaleDB(事件与日志存储)
  • NSQ(异步写库与削峰)
  • (可选)Redis(部分指标/缓存能力,按项目配置而定)

方式一:Docker Compose#

bash
git clone https://github.com/aak1247/logtap.git
cd logtap/deploy
bash ../scripts/gen-auth-secret.sh   # 生成 AUTH_SECRET
docker compose up -d

Compose 已包含 TimescaleDB、Redis、NSQ(lookupd/nsqd/admin)与 logtap 网关。GeoIP 可选启用:设置 MAXMIND_LICENSE_KEY 后,mmdb 自动下载并缓存到 volume /data/geoip/;若 mmdb 已存在且未显式配置 GEOIP_CITY_MMDB / GEOIP_ASN_MMDB,启动脚本会自动使用 /data/geoip/GeoLite2-City.mmdb 与 /data/geoip/GeoLite2-ASN.mmdb。

方式二:无 Docker(服务器/生产)#

构建网关#

需要 Go 1.22+:

bash
go build -o gateway ./cmd/gateway

把 gateway 上传到服务器(例如 /opt/logtap/gateway)。

最小环境变量#

环境变量参考仓库 .env.example,常用项:

变量说明
HTTP_ADDRHTTP 监听地址,例如 :8080
NSQD_ADDRESSNSQ 地址,例如 127.0.0.1:4150
RUN_CONSUMERS是否启动消费者写库(生产通常 true)
POSTGRES_URLRUN_CONSUMERS=true 时必填,例如 postgres://logtap:[email protected]:5432/logtap?sslmode=disable
AUTH_SECRET开启登录与上报鉴权(推荐)

网关启动时使用 GORM AutoMigrate 自动建表/建索引。

systemd(可选模板)#

模板在 deploy/systemd/:

  • logtap-gateway.service — 网关
  • nsqd.service — NSQ
  • logtap-alert-worker.service — 可选:独立告警投递 worker

建议做法:创建 /opt/logtap/ 目录,把二进制与 .env 放到固定目录,然后 systemctl enable --now logtap-gateway。

告警投递 worker:若不启用 RUN_ALERT_WORKER=true(网关内嵌 worker),可用独立进程 alert-worker 消费 alert_deliveries,环境变量示例见 deploy/alert-worker.env.example。

控制台(Web)#

控制台是独立前端(web/,Vite + React + Tailwind),生产构建产物在 web/dist/,用 Nginx/静态托管部署:

bash
cd web
npm install
npm run build

生产建议用 Nginx/Traefik 提供 HTTPS,并把 /api/ 反代到网关。

生产建议#

  • 反向代理:Nginx/Traefik 提供 HTTPS,/api/ 反代到网关
  • 数据持久化:Postgres 数据盘、NSQ 目录与日志保留策略提前规划
  • 资源隔离:消费者写库与网关可拆开部署(不同进程/不同实例),数据库慢查询不影响上报
  • 告警 worker:大流量下用独立 alert-worker 进程投递,避免与网关争资源