From ce4dfd635d9b15c127b40bd13aa454be25505dc2 Mon Sep 17 00:00:00 2001 From: SIMKEEP Date: Tue, 6 Oct 2026 20:41:15 +0800 Subject: [PATCH] deploy: use published GHCR image in docker-compose.yml --- .env.example | 4 ++-- README.md | 24 ++++++++++-------------- compose.yml => docker-compose.yml | 3 +-- docs/DOCKER.md | 27 ++++++++++++++++++--------- 4 files changed, 31 insertions(+), 27 deletions(-) rename compose.yml => docker-compose.yml (93%) diff --git a/.env.example b/.env.example index 0c0603c..3fd43df 100644 --- a/.env.example +++ b/.env.example @@ -5,8 +5,8 @@ SIMKEEP_SECURE_COOKIES=0 SIMKEEP_DB=data/simkeep.db # Docker Compose 公网端口;改端口时同步修改 SIMKEEP_PUBLIC_URL。 SIMKEEP_PORT=5180 -# Docker Compose 镜像;使用预构建镜像时改为 ghcr.io/rest-rain/simkeep:latest。 -SIMKEEP_IMAGE=simkeep:local +# GitHub Actions 自动构建的镜像;可将 latest 改为已发布的版本标签。 +SIMKEEP_IMAGE=ghcr.io/rest-rain/simkeep:latest # 可选的公共默认通知服务;用户也可在网页单独配置自己的服务。 # 从 BotFather 获取 Token。可选用户名不包含 @;留空会自动查询。 diff --git a/README.md b/README.md index b994827..9f12c7b 100644 --- a/README.md +++ b/README.md @@ -60,34 +60,30 @@ SIMKEEP 是一个可自行部署的 SIM / eSIM 管理平台。把开通日期、 需要 Docker Engine 和 Docker Compose 插件。可直接使用 GHCR 镜像,支持 `amd64` / `arm64`,服务器无需安装 Node.js 或 Python。 -下载仓库并进入项目目录后执行: +将 [docker-compose.yml](docker-compose.yml) 和 [.env.example](.env.example) 下载到同一目录,进入该目录后执行: ```bash -cp .env.example .env +test -f .env || cp .env.example .env chmod 600 .env ``` -编辑 `.env`,把 `SIMKEEP_PUBLIC_URL` 改成自己的访问地址,例如 `http://your-server:5180`,并设置镜像: +编辑 `.env`,把 `SIMKEEP_PUBLIC_URL` 改成自己的访问地址,例如 `http://your-server:5180`。本机试用可保留 `http://localhost:5180`。 -```dotenv -SIMKEEP_IMAGE=ghcr.io/rest-rain/simkeep:latest -``` - -本机试用可保留 `http://localhost:5180`。`latest` 对应 `main` 的最新构建;需要固定版本时使用对应版本标签。 +默认镜像为 `ghcr.io/rest-rain/simkeep:latest`,由 GitHub Actions 自动构建。`latest` 对应 `main` 的最新构建;需要固定版本时修改 `.env` 中的 `SIMKEEP_IMAGE`,使用已发布的版本标签。 ```bash docker compose pull web -docker compose up -d --no-build --wait web +docker compose up -d --wait web docker compose ps ``` 打开 `http://localhost:5180` 或设置的服务器地址,点击“创建账号”。没有预置管理员、初始密码或演示资料。 -也可从源码构建:在 `.env` 中设置 `SIMKEEP_IMAGE=simkeep:local`,然后执行 `docker compose up -d --build --wait`。 +Docker Compose 会自动读取 `docker-compose.yml`。也可从源码构建,详见 [源码构建说明](docs/DOCKER.md#从源码构建)。 | 配置项 | 默认值 | 用途 | | --- | --- | --- | -| `SIMKEEP_IMAGE` | `simkeep:local` | 镜像名称;使用 GHCR 镜像时填写上面的地址 | +| `SIMKEEP_IMAGE` | `ghcr.io/rest-rain/simkeep:latest` | 自动构建镜像;可改为已发布的版本标签 | | `SIMKEEP_PUBLIC_URL` | `http://localhost:5180` | 网页访问地址和提醒中的链接 | | `SIMKEEP_PORT` | `5180` | 宿主机端口;修改时同步调整访问地址 | | `SIMKEEP_BIND_ADDRESS` | `0.0.0.0` | 宿主机监听地址 | @@ -140,15 +136,15 @@ docker compose cp web:/app/data/backups ./docker-backups ```bash docker compose pull web -docker compose up -d --no-build --wait web +docker compose up -d --wait web ``` -使用源码构建时,更新代码后执行 `docker compose up -d --build --wait`。 +如果旧 `.env` 设置了 `SIMKEEP_IMAGE=simkeep:local`,先改为 `ghcr.io/rest-rain/simkeep:latest`,再执行上述命令。使用源码镜像时,更新代码后先执行 `docker build -t simkeep:local .`,再执行 `docker compose up -d --wait web`。 修改 `.env` 后,需要重建容器加载新环境变量: ```bash -docker compose up -d --no-build --force-recreate --wait web +docker compose up -d --force-recreate --wait web ``` `docker compose restart` 不会加载修改后的 `.env`。不要执行 `docker compose down -v`,它会删除数据卷。 diff --git a/compose.yml b/docker-compose.yml similarity index 93% rename from compose.yml rename to docker-compose.yml index ac23e98..5fc7948 100644 --- a/compose.yml +++ b/docker-compose.yml @@ -1,8 +1,7 @@ name: simkeep services: web: - image: ${SIMKEEP_IMAGE:-simkeep:local} - build: . + image: ${SIMKEEP_IMAGE:-ghcr.io/rest-rain/simkeep:latest} init: true restart: unless-stopped stop_grace_period: 30s diff --git a/docs/DOCKER.md b/docs/DOCKER.md index 64c8215..a8306fe 100644 --- a/docs/DOCKER.md +++ b/docs/DOCKER.md @@ -4,16 +4,20 @@ ## 在新服务器部署 -进入仓库目录,准备配置;使用预构建镜像时只需 `compose.yml`、`.env.example` 和自己的 `.env`: +部署只需要 `docker-compose.yml` 和 `.env`。可下载配置文件及空白模板: ```bash +mkdir -p simkeep +cd simkeep +curl -fsSLO https://raw.githubusercontent.com/rest-rain/simkeep/main/docker-compose.yml +curl -fsSLO https://raw.githubusercontent.com/rest-rain/simkeep/main/.env.example test -f .env || cp .env.example .env chmod 600 .env ``` 编辑 `.env`,将 `SIMKEEP_PUBLIC_URL` 改为实际访问地址,例如 `http://服务器IP:5180`。`SIMKEEP_PORT` 控制宿主机端口,默认 5180;改端口时同步修改公网地址。保持 HTTP 时使用 `SIMKEEP_SECURE_COOKIES=0`。每个用户登录网页的“通知设置”,点击“配置 Telegram / 配置邮件”保存自己的凭据;不需要修改 `.env` 或重启。`.env` 中的通知凭据仅作为可选公共默认服务。 -在 `.env` 中将镜像改为: +默认使用 GitHub Actions 自动构建的镜像,`.env.example` 已包含: ```dotenv SIMKEEP_IMAGE=ghcr.io/rest-rain/simkeep:latest @@ -21,12 +25,14 @@ SIMKEEP_IMAGE=ghcr.io/rest-rain/simkeep:latest ```bash docker compose pull web -docker compose up -d --no-build --wait web +docker compose up -d --wait web docker compose ps ``` 访问 `http://服务器IP:5180/`,首次使用创建自己的账号。服务器防火墙需要允许选定的 TCP 端口。 +Docker Compose 会自动发现 `docker-compose.yml`。也可在命令中加 `-f docker-compose.yml` 指定配置文件。 + 默认 Compose 项目名为 `simkeep`,持久化卷为 `simkeep_simkeep-data`,数据库位于容器 `/app/data/simkeep.db`。保持项目名即可复用同一个卷。容器重启、镜像更新及普通 `docker compose down` 都会保留卷;`docker compose down -v` 会删除数据卷。 ### 从源码构建 @@ -34,10 +40,11 @@ docker compose ps 需要完整仓库。在 `.env` 中设置 `SIMKEEP_IMAGE=simkeep:local`,然后执行: ```bash -docker compose up -d --build --wait +docker build -t simkeep:local . +docker compose up -d --wait web ``` -构建时自动打包前端,宿主机同样无需安装应用依赖。 +构建时自动打包前端,宿主机同样无需安装应用依赖。Compose 使用已经构建的本地镜像。 ## GitHub 自动构建镜像 @@ -65,15 +72,17 @@ docker compose up -d --build --wait ```bash docker compose pull web -docker compose up -d --no-build --wait web +docker compose up -d --wait web ``` -使用源码镜像时,更新代码后执行 `docker compose up -d --build --wait`。更新镜像会重建容器,数据仍保存在原命名卷中。 +已有部署更新配置文件后,检查 `.env`:如果曾设置 `SIMKEEP_IMAGE=simkeep:local`,将其改为 `ghcr.io/rest-rain/simkeep:latest`,再执行上述命令。保留原 `.env` 中的访问地址和其他配置。旧目录中若仍有 `compose.yml`,先将其改名备份;否则 Compose 会优先读取旧文件。 + +使用源码镜像时,更新代码后执行 `docker build -t simkeep:local .`,再执行 `docker compose up -d --wait web`。更新镜像会重建容器,数据仍保存在原命名卷中。 修改 `.env` 后重建容器加载新配置: ```bash -docker compose up -d --no-build --force-recreate --wait web +docker compose up -d --force-recreate --wait web ``` 仅执行 `docker compose restart` 不会加载修改后的环境配置。日常查看或重启: @@ -104,7 +113,7 @@ docker compose cp web:/app/data/backups ./docker-backups ```bash docker compose stop web docker compose run --rm --no-deps -T --entrypoint python web scripts/restore.py --replace < restore.db -docker compose up -d --no-build --wait web +docker compose up -d --wait web ``` 恢复容器以应用用户读取标准输入,不需要 root 或修改宿主机备份权限。它检查数据库完整性与 SIMKEEP 表结构,临时生成恢复库后替换;未传 --replace 时会拒绝覆盖现有库。恢复容器只执行数据库操作,不启动提醒进程。使用 `docker compose -p 其他项目名` 时,以上所有命令也须带相同项目名。