feat(0.2.1): M4-a 部署栈 —— compose(PG逻辑复制+powersync+app:13001), sync streams(任务域6表+User), initdb, DISABLE_CRON 开关, 健康检查端口跟随 PORT
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# PowerSync Service 主配置 (0.2.1 验证部署)
|
||||
# 参考: https://docs.powersync.com/configuration/powersync-service/self-hosted-instances
|
||||
# !env 仅支持 PS_ 前缀变量, 由 docker-compose environment 注入
|
||||
|
||||
replication:
|
||||
connections:
|
||||
- type: postgresql
|
||||
# 源库: 本栈 pg 容器 (0.2.1 独立实例), 复制走 iboard021 账号
|
||||
uri: postgresql://iboard021:!env PS_PG_PASSWORD@pg:5432/iboard021
|
||||
sslmode: disable
|
||||
|
||||
# bucket storage: 同实例 PG (16 >= 14 允许同库不同 schema, service 自建 powersync schema)
|
||||
storage:
|
||||
type: postgresql
|
||||
uri: postgresql://powersync_storage:!env PS_STORAGE_PASSWORD@pg:5432/iboard021
|
||||
|
||||
port: 8080
|
||||
|
||||
sync_config:
|
||||
path: /config/sync-config.yaml
|
||||
|
||||
# 客户端鉴权: app 后端 /api/powersync/token 签发 HS256 JWT (aud=powersync)
|
||||
# oct 密钥 k = base64url(POWERSYNC_JWT_SECRET)
|
||||
client_auth:
|
||||
jwks:
|
||||
keys:
|
||||
- kty: oct
|
||||
k: !env PS_JWT_KEY_B64
|
||||
alg: HS256
|
||||
audience:
|
||||
- powersync
|
||||
|
||||
telemetry:
|
||||
disable_telemetry_sharing: true
|
||||
|
||||
system:
|
||||
logging:
|
||||
level: info
|
||||
format: text
|
||||
@@ -0,0 +1,24 @@
|
||||
# Sync Streams (edition 3): 任务模块 6 表 + User (展示用)
|
||||
# 引号保留 PG PascalCase 标识; 主键要求: 同步表必须输出 text 型 id 列 => CAST("id" AS TEXT)
|
||||
# 可见性: 用户能看到自己参与的项目 (ProjectMember), 及其下全部任务域数据
|
||||
# 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md
|
||||
|
||||
config:
|
||||
edition: 3
|
||||
|
||||
streams:
|
||||
iboard_users:
|
||||
auto_subscribe: true
|
||||
query: SELECT CAST("id" AS TEXT) AS "id", "name", "email" FROM "User"
|
||||
|
||||
iboard_task_data:
|
||||
auto_subscribe: true
|
||||
with:
|
||||
my_projects: SELECT "projectId" FROM "ProjectMember" WHERE CAST("userId" AS TEXT) = auth.user_id()
|
||||
queries:
|
||||
- SELECT CAST("id" AS TEXT) AS "id", "uuid", "code", "name", "ownerId", "isPersonal", "archived", "notes", "taskKinds", "icon", "createdAt", "updatedAt" FROM "Project" WHERE "id" IN my_projects
|
||||
- SELECT CAST("id" AS TEXT) AS "id", "uuid", "projectId", "userId", "permission", "createdAt" FROM "ProjectMember" WHERE "projectId" IN my_projects
|
||||
- SELECT CAST("id" AS TEXT) AS "id", "uuid", "projectId", "name", "sortOrder", "boundStatus", "retention", "createdAt", "updatedAt" FROM "BoardColumn" WHERE "projectId" IN my_projects
|
||||
- SELECT CAST("id" AS TEXT) AS "id", "uuid", "projectId", "columnId", "parentId", "title", "description", "kind", "markDate", "status", "doneAt", "assigneeId", "creatorId", "extras", "sortOrder", "number", "createdAt", "updatedAt" FROM "Task" WHERE "projectId" IN my_projects
|
||||
- SELECT CAST("id" AS TEXT) AS "id", "uuid", "taskId", "userId" FROM "TaskMember" WHERE "taskId" IN (SELECT "id" FROM "Task" WHERE "projectId" IN my_projects)
|
||||
- SELECT CAST("id" AS TEXT) AS "id", "uuid", "taskId", "name" FROM "TaskTag" WHERE "taskId" IN (SELECT "id" FROM "Task" WHERE "projectId" IN my_projects)
|
||||
Reference in New Issue
Block a user