From 0fe26c464f8411c31d56ce231e66e5f27bc149fd Mon Sep 17 00:00:00 2001 From: openclaw Date: Sat, 14 Feb 2026 05:24:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Docker=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=92=8C=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 Dockerfile (多阶段构建, alpine 运行时, 14MB 镜像) - 添加 docker-compose.yml - 添加 .dockerignore - README 添加 Docker 部署说明、二进制部署说明 - Docker 镜像: ouaone/tonav-go:v1.0.0 --- .dockerignore | 11 ++++++++++ .gitignore | 1 + Dockerfile | 39 +++++++++++++++++++++++++++++++++ README.md | 54 +++++++++++++++++++++++++++++++++++++++++----- docker-compose.yml | 16 ++++++++++++++ 5 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..14c4e41 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +tonav-go-v1 +tonav-go-linux-amd64 +*.db +backups/ +tonav.log +tonav-go.pid +.git +.gitignore +README.md +Dockerfile +docker-compose.yml diff --git a/.gitignore b/.gitignore index 7376368..5f8b64f 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ tonav-go.pid # OS .DS_Store Thumbs.db +tonav-go-linux-amd64 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..745b6b3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# 构建阶段 +FROM golang:1.24-alpine AS builder + +RUN apk add --no-cache gcc musl-dev sqlite-dev + +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN CGO_ENABLED=1 go build -ldflags "-s -w" -o tonav-go . + +# 运行阶段 +FROM alpine:3.21 + +RUN apk add --no-cache sqlite-libs tzdata ca-certificates + +WORKDIR /app + +COPY --from=builder /app/tonav-go . +COPY --from=builder /app/templates/ ./templates/ +COPY --from=builder /app/tonav-go-ctl.sh . + +RUN chmod +x tonav-go tonav-go-ctl.sh && \ + mkdir -p backups + +ENV TZ=Asia/Shanghai +ENV TONAV_PORT=9520 +ENV TONAV_DB=/app/data/tonav.db +ENV TONAV_SECRET=change-me-in-production + +EXPOSE 9520 + +VOLUME ["/app/data", "/app/backups"] + +HEALTHCHECK --interval=30s --timeout=5s --start-period=5s \ + CMD wget -qO- http://localhost:9520/ || exit 1 + +CMD ["./tonav-go"] diff --git a/README.md b/README.md index d29885f..e70c63a 100644 --- a/README.md +++ b/README.md @@ -80,11 +80,53 @@ ToNav-go/ ## 快速开始 -### 环境要求 -- Go 1.24+ -- GCC(CGO 编译 SQLite 需要) +### 方式一:Docker 部署(推荐) -### 编译运行 +```bash +# 直接运行 +docker run -d \ + --name tonav-go \ + -p 9520:9520 \ + -v ./data:/app/data \ + -v ./backups:/app/backups \ + -e TONAV_SECRET=your-secret-key \ + ouaone/tonav-go:latest + +# 或使用 docker-compose +wget https://gitea.king.nyc.mn/openclaw/ToNav-go/raw/branch/master/docker-compose.yml +docker compose up -d +``` + +**Docker 镜像**:[ouaone/tonav-go](https://hub.docker.com/r/ouaone/tonav-go) + +**环境变量:** + +| 变量 | 默认值 | 说明 | +|------|--------|------| +| `TONAV_PORT` | `9520` | 监听端口 | +| `TONAV_DB` | `/app/data/tonav.db` | 数据库路径 | +| `TONAV_SECRET` | 内置密钥 | Cookie 签名密钥(生产环境务必修改) | +| `TZ` | `Asia/Shanghai` | 时区 | + +**数据持久化:** + +| 挂载路径 | 说明 | +|----------|------| +| `/app/data` | 数据库文件 | +| `/app/backups` | 本地备份文件 | + +### 方式二:二进制部署 + +从 [Releases](https://gitea.king.nyc.mn/openclaw/ToNav-go/releases) 下载对应平台的二进制文件: + +```bash +chmod +x tonav-go-linux-amd64 +./tonav-go-linux-amd64 +``` + +### 方式三:源码编译 + +环境要求:Go 1.24+、GCC(CGO 编译 SQLite) ```bash # 克隆项目 @@ -100,6 +142,8 @@ go build -o tonav-go-v1 ### 使用管理脚本 +项目自带 `tonav-go-ctl.sh` 管理脚本(二进制部署时使用): + ```bash chmod +x tonav-go-ctl.sh @@ -111,7 +155,7 @@ chmod +x tonav-go-ctl.sh ./tonav-go-ctl.sh log # 查看日志 ``` -### 环境变量配置 +### 环境变量配置(二进制部署时) | 变量 | 默认值 | 说明 | |------|--------|------| diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..02be43c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.8' + +services: + tonav: + image: ouaone/tonav-go:latest + container_name: tonav-go + restart: unless-stopped + ports: + - "9520:9520" + volumes: + - ./data:/app/data + - ./backups:/app/backups + environment: + - TZ=Asia/Shanghai + - TONAV_PORT=9520 + - TONAV_SECRET=your-secret-key-here