diff --git a/packages/bsync/src/config.ts b/packages/bsync/src/config.ts index ee2385c0a7a..d5ea4454c2d 100644 --- a/packages/bsync/src/config.ts +++ b/packages/bsync/src/config.ts @@ -1,5 +1,5 @@ import assert from 'node:assert' -import { envInt, envStr, envList } from '@atproto/common' +import { envInt, envStr, envList, envBool } from '@atproto/common' export const envToCfg = (env: ServerEnvironment): ServerConfig => { const serviceCfg: ServerConfig['service'] = { @@ -15,6 +15,7 @@ export const envToCfg = (env: ServerEnvironment): ServerConfig => { poolSize: env.dbPoolSize, poolMaxUses: env.dbPoolMaxUses, poolIdleTimeoutMs: env.dbPoolIdleTimeoutMs, + migrate: env.dbMigrate, } assert(env.apiKeys.length > 0, 'missing api keys') @@ -47,6 +48,7 @@ type DatabaseConfig = { poolSize?: number poolMaxUses?: number poolIdleTimeoutMs?: number + migrate?: boolean } type AuthConfig = { @@ -65,6 +67,7 @@ export const readEnv = (): ServerEnvironment => { dbPoolSize: envInt('BSYNC_DB_POOL_SIZE'), dbPoolMaxUses: envInt('BSYNC_DB_POOL_MAX_USES'), dbPoolIdleTimeoutMs: envInt('BSYNC_DB_POOL_IDLE_TIMEOUT_MS'), + dbMigrate: envBool('BSYNC_DB_MIGRATE'), // secrets apiKeys: envList('BSYNC_API_KEYS'), } @@ -81,6 +84,7 @@ export type ServerEnvironment = { dbPoolSize?: number dbPoolMaxUses?: number dbPoolIdleTimeoutMs?: number + dbMigrate?: boolean // secrets apiKeys: string[] } diff --git a/services/bsync/Dockerfile b/services/bsync/Dockerfile index 44b2704f26a..515bcfa02c3 100644 --- a/services/bsync/Dockerfile +++ b/services/bsync/Dockerfile @@ -10,6 +10,7 @@ COPY ./packages/bsync ./packages/bsync COPY ./packages/common ./packages/common COPY ./packages/common-web ./packages/common-web COPY ./packages/syntax ./packages/syntax +COPY ./services/bsync ./services/bsync # install all deps @@ -37,7 +38,7 @@ WORKDIR /app/services/bsync COPY --from=build /app /app EXPOSE 3000 -ENV PORT=3000 +ENV BSYNC_PORT=3000 ENV NODE_ENV=production # https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#non-root-user diff --git a/services/bsync/index.js b/services/bsync/index.js index b9d22da8855..c58cf839a3c 100644 --- a/services/bsync/index.js +++ b/services/bsync/index.js @@ -15,6 +15,11 @@ const main = async () => { const env = readEnv() const cfg = envToCfg(env) const bsync = await BsyncService.create(cfg) + if (bsync.ctx.cfg.db.migrate) { + httpLogger.info('bsync db is migrating') + await bsync.ctx.db.migrateToLatestOrThrow() + httpLogger.info('bsync db migration complete') + } await bsync.start() httpLogger.info('bsync is running') process.on('SIGTERM', async () => {