跳转到内容

使用 Docker Compose 运行

对大多数人来说,看到一个可用授权服务器的最快方式,就是仓库自带的 Compose 文件。它会启动三个服务:MongoDB、一个一次性的初始化步骤,以及服务器本身。除了下文讨论的那一个值,其他都无需配置。

前置条件: 带有 Compose v2 的 Docker(docker compose,而不是旧版的 docker-compose)。

  1. 获取 Compose 文件:

    终端窗口
    curl -O https://raw.githubusercontent.com/RedFox-Soft/OAuth-server.ts/main/docker-compose.yml
  2. 现在就确定 ISSUER 的值——下方的警告说明了原因。如果浏览器访问此服务器的地址不是 http://localhost:3000,请在 docker-compose.yml 的两个 environment: 块中都修改它,即 setup 服务的和 oauth 服务的。只改其中一个,会让预置的重定向 URI 与对外公布的 issuer 不一致,而下方警告指出,这种不一致无法原地修复。

  3. 启动全部服务:

    终端窗口
    docker compose up
  4. 在 http://localhost:3000/admin 打开控制台。首次访问会显示一个一次性的设置页面,用于创建初始超级管理员。

服务 镜像 作用
mongo mongo:8 数据存储,位于名为 mongo-data 的卷上,带有一个 mongosh ping 健康检查,其他服务会等待它通过
setup ghcr.io/redfox-soft/oauth-server-ts:latest 运行 bun run db:setup 和 bun run db:migrate 后退出:创建集合、索引、初始 RS256 签名密钥、管理面板的种子数据,并执行所有 schema 迁移
oauth ghcr.io/redfox-soft/oauth-server-ts:latest 服务器本身,监听 3000 端口,仅在 setup 成功完成后才启动

顺序很重要。如果没有 setup 预置的保留管理项目、桶和 admin-panel 客户端,控制台的登录会重定向到一个没有任何 Client 文档能匹配的客户端。在这种状态下,首次运行的设置页面依然可用,这会让问题看起来像是登录 bug。服务器还会拒绝在迁移尚未运行的数据库上启动,这就是 setup 在 db:setup 之后运行 db:migrate 的原因。两者都可以安全地重复执行,因此在拉取更新的镜像后重新运行 docker compose up,也就是升级的方式;如果发布说明提到某个无法撤销的迁移,请先做备份。

  • 位于 http://localhost:3000/admin 的控制台,你将在那里创建第一个管理员。
  • 发现文档,它是客户端库所需端点 URL 的权威列表:http://localhost:3000/.well-known/openid-configuration。
  • 密钥集:http://localhost:3000/jwks。
  • 一个永不受限流的存活探针:http://localhost:3000/health,以及对应的就绪探针 http://localhost:3000/ready,后者还会访问数据库。

此文件运行的是 MongoDB。它旁边的 docker-compose.postgres.yml 是基于 PostgreSQL 的同样三个服务,用 docker compose -f docker-compose.postgres.yml up 启动。两者二选一,从不组合使用。哪个变量选择哪种数据库,参见 PostgreSQL。

如需更贴近生产环境的 Compose 文件(固定镜像标签、外部数据库,以及前置的 TLS 代理),请参见使用 Docker Compose 部署。