Pocket ID 在 Dokploy 上的部署教程
在自建服务越来越多的今天,管理众多账号密码成了一大痛点。Pocket ID 提供了一个优雅的解决方案<基于>基于> Passkey 的无密码认证系统,支持标准的 OIDC 协议,可以为你的所有自托管应用提供统一的单点登录(SSO)能力。
本文将详细介绍如何在 Dokploy 上部署 Pocket ID,并以 Linkding 为例演示如何接入应用。
什么是 Pocket ID?
Pocket ID 是一个现代化的 OpenID Connect (OIDC) 身份提供商,专注于使用 Passkey 进行无密码认证。
核心特性
- 完全无密码: 采用 Passkey 技术(WebAuthn),告别传统密码的安全隐患
- OIDC 标准支持: 兼容所有支持 OIDC 的应用,如 Immich、Nextcloud、Grafana 等
- 自托管友好: 轻量级设计,使用 SQLite 或 PostgreSQL 存储数据
- 硬件密钥支持: 支持 YubiKey 等 FIDO2 硬件安全密钥
- 简洁高效: 相比 Keycloak、Authelia 等企业级方案更轻量、配置更简单
技术栈
- 后端: Go (高性能、低资源占用)
- 前端: Svelte + TypeScript
- 数据库: SQLite(默认)或 PostgreSQL
在 Dokploy 上部署
前置要求
- 已安装 Dokploy 的服务器
- 一个域名(用于 HTTPS 访问,Passkey 必须在 HTTPS 环境下使用)
- 至少 512MB 可用内存
创建 Compose 服务
- 登录 Dokploy 管理面板
- 选择对应的项目(或新建一个)
- 点击 “Create Service” → 选择 “Template”
- 搜索 Pocket ID 模板并选择

Docker Compose 配置
CAUTIONDokploy 的默认模板可能使用的是
v1版本,但该版本已过时。必须修改镜像为ghcr.io/pocket-id/pocket-id:v2,否则可能遇到兼容性问题和功能缺失。
在 Compose 配置中,粘贴以下内容:
services: pocket-id: image: ghcr.io/pocket-id/pocket-id:v2 #也就这里要修改,因为模板没更新是v1版本 restart: unless-stopped environment: - APP_URL - TRUST_PROXY - ENCRYPTION_KEY volumes: - pocket-id-data:/app/data healthcheck: test: [ "CMD", "/app/pocket-id", "healthcheck" ] interval: 1m30s timeout: 5s retries: 2 start_period: 10s
volumes: pocket-id-data:
环境变量配置
在 Dokploy 的 “Environment” 标签页中,添加以下环境变量:
APP_URL
应用的完整访问地址,必须使用 HTTPS。
APP_URL=https://pocketid.your.domain示例:
- 使用自定义域名:
https://pocketid.example.com - 使用 Dokploy 自动生成的域名:
https://berohost-pocketid-0da961-5-175-220-72.traefik.me
TIP如果使用 Dokploy 自动生成的域名,可以在 Domains 标签页查看完整的 URL。
ENCRYPTION_KEY
用于加密敏感数据的密钥,首次部署时设置为 CHANGEME,系统会自动生成。
ENCRYPTION_KEY=CHANGEME如果需要手动生成密钥(可选),可以使用以下命令:
openssl rand -base64 32TRUST_PROXY
启用反向代理支持,Dokploy 默认使用 Traefik 作为反向代理,需设置为 true。
TRUST_PROXY=true
部署与初始化
启动服务
- 在 Compose 服务页面,点击 “Deploy” 按钮
- 等待镜像拉取和容器启动
- 检查 “Logs” 标签页,确认服务正常启动

访问 Setup 页面
服务启动后,访问:
https://pocketid.your.domain/setup
创建管理员账户
- Username: 输入管理员用户名(建议使用邮箱格式,如
admin@example.com) - Display Name: 显示名称
- Create Passkey: 点击后按照浏览器提示创建 Passkey
NOTEPasskey 创建方式
- 桌面浏览器: 可选择使用系统密码管理器(如 Windows Hello、macOS Touch ID)或硬件密钥
- 移动设备: 可使用生物识别(指纹/面容)
- 跨设备: 使用 1Password、Bitwarden 等密码管理器同步 Passkey
完成后,你将自动登录到管理面板。
接入通行密钥
访问 https://pocketid.your.domain/settings/account
点击下方的增加通行密钥
一般建议多选一个,以备不时之需。

分配用户组

应用集成<以>以> Linkding 为例
在 Pocket ID 中创建 OIDC 客户端
- 登录 Pocket ID 管理面板
- 进入 “Clients” 页面
- 点击 “Create Client”
填写以下信息:
Client Name: LinkdingRedirect URIs: https://linkding.your.domain/oidc/callback/TIP
- 回调 URL 也可以留空,首次登录时会自动填充
- 可选上传 Logo 图标,用于登录页面展示
创建完成后,复制并保存以下凭证信息:
- Client ID: 例如
abc123def456 - Client Secret: 例如
secret_xyz789
在 Linkding 中配置 OIDC
假设你使用 Docker Compose 部署 Linkding,在服务的环境变量(.env 文件或 Dokploy 的 Environment 标签页)中添加:
# 启用 OIDC 登录LD_ENABLE_OIDC=True
# Pocket ID 客户端凭证OIDC_RP_CLIENT_ID=<从 Pocket ID 复制的 Client ID>OIDC_RP_CLIENT_SECRET=<从 Pocket ID 复制的 Client Secret>
# OIDC 端点配置OIDC_OP_AUTHORIZATION_ENDPOINT=https://pocketid.your.domain/authorizeOIDC_OP_TOKEN_ENDPOINT=https://pocketid.your.domain/api/oidc/tokenOIDC_OP_USER_ENDPOINT=https://pocketid.your.domain/api/oidc/userinfoOIDC_OP_JWKS_ENDPOINT=https://pocketid.your.domain/.well-known/jwks.json
# PKCE 支持(根据实际需求调整,默认为 True)OIDC_USE_PKCE=False
# SSL 证书验证(自签名证书时设为 False)OIDC_VERIFY_SSL=True
# 可选:自定义用户名字段(默认使用 email)# OIDC_USERNAME_CLAIM=preferred_username完整参数说明:
| 环境变量 | 说明 | 示例值 |
|---|---|---|
LD_ENABLE_OIDC | 启用 OIDC 登录 | True |
OIDC_RP_CLIENT_ID | Pocket ID 客户端 ID | 从 Pocket ID 复制 |
OIDC_RP_CLIENT_SECRET | Pocket ID 客户端密钥 | 从 Pocket ID 复制 |
OIDC_OP_AUTHORIZATION_ENDPOINT | 授权端点 | https://pocketid.your.domain/authorize |
OIDC_OP_TOKEN_ENDPOINT | Token 端点 | https://pocketid.your.domain/api/oidc/token |
OIDC_OP_USER_ENDPOINT | 用户信息端点 | https://pocketid.your.domain/api/oidc/userinfo |
OIDC_OP_JWKS_ENDPOINT | JWKS 端点 | https://pocketid.your.domain/.well-known/jwks.json |
OIDC_USE_PKCE | 启用 PKCE 验证 | False(Pocket ID 暂不需要) |
OIDC_VERIFY_SSL | 验证 SSL 证书 | True(生产环境推荐) |
OIDC_USERNAME_CLAIM | 用户名字段(可选) | email 或 preferred_username |
重新部署 Linkding
保存环境变量后,在 Dokploy 中点击 “Redeploy” 重新部署 Linkding 服务。
部署完成后,访问 Linkding 登录页面,你将看到 “Sign in with OIDC” 按钮。


通用集成说明
对于其他支持 OIDC 的应用,通常需要以下信息:
Issuer / Discovery URL: https://pocketid.your.domainAuthorization Endpoint: https://pocketid.your.domain/authorizeToken Endpoint: https://pocketid.your.domain/api/oidc/tokenUserInfo Endpoint: https://pocketid.your.domain/api/oidc/userinfoJWKS Endpoint: https://pocketid.your.domain/.well-known/jwks.jsonClient ID: 从 Pocket ID 获取Client Secret: 从 Pocket ID 获取Scopes: openid profile emailNOTE大部分 OIDC 应用支持自动发现配置,只需填写 Issuer URL (
https://pocketid.your.domain) 即可。如果需要手动配置,请使用上述完整端点路径。
TIP
- Immich: 支持 OIDC,配置路径在 Settings → OAuth
- Grafana: 配置文件中的
[auth.generic_oauth]部分- Nextcloud: 安装 “OpenID Connect user backend” 插件
- Portainer: Business Edition 支持 OIDC
更多接入可以见 https://pocket-id.org/docs/client-examples
备份策略
数据持久化
Pocket ID 的所有数据保存在 pocket-id-data 数据卷中,包括:
- SQLite 数据库(用户、客户端、Passkey 信息)
- 配置文件
- 会话数据
备份方法
** 使用 Dokploy 内置备份**
- 进入服务的 “Backups” 标签页
- 配置备份目标(如 S3、本地路径)
- 设置备份计划(建议每日备份)


WARNING
- 备份文件包含加密密钥和用户认证信息,务必妥善保管
- 定期测试备份恢复流程,确保数据可用
- 如果使用 PostgreSQL,额外备份数据库
安全加固建议
1. 强制 HTTPS
确保 APP_URL 使用 HTTPS,Passkey 在非 HTTPS 环境下无法使用。
2. 限制管理面板访问
如果只有特定 IP 需要访问管理面板,可以在 Traefik 中配置 IP 白名单。
常见问题
Q: Passkey 创建失败怎么办?
A: 检查以下几点:
- 确认访问地址使用 HTTPS
- 浏览器是否支持 WebAuthn(Chrome 67+、Firefox 60+、Safari 14+)
- 检查浏览器控制台是否有错误信息
Q: 忘记管理员账户怎么办?
A: 如果无法登录,可以通过数据库重置:
详情见 https://pocket-id.org/docs/troubleshooting/account-recovery
CAUTION建议为管理员账户配置多个 Passkey,避免单点故障。
总结
Pocket ID 为自托管用户提供了一个轻量级、现代化的身份认证解决方案。
再也不需要记密码了。
下一步,你可以:
- 将更多自托管应用接入 Pocket ID
- 配置多因素认证(MFA)增强安全性
- 探索 Pocket ID 官方文档了解高级功能
如果在部署过程中遇到问题,可以查阅:
祝你使用愉快!