ATPの実装読むページ
ここから必要な環境設定を抽出すると、
code: package/pds/service/index.js
const getEnv = () => ({
port: parseInt(process.env.PORT),
signingKeyId: process.env.SIGNING_KEY_ID,
recoveryKeyId: process.env.RECOVERY_KEY_ID,
dbCreds: JSON.parse(process.env.DB_CREDS_JSON),
dbMigrateCreds: JSON.parse(process.env.DB_MIGRATE_CREDS_JSON),
dbSchema: process.env.DB_SCHEMA,
smtpHost: process.env.SMTP_HOST,
smtpUsername: process.env.SMTP_USERNAME,
smtpPassword: process.env.SMTP_PASSWORD,
s3Bucket: process.env.S3_BUCKET_NAME,
cfDistributionId: process.env.CF_DISTRIBUTION_ID,
})
DB_CREDS_JSON, DB_MIGRATE_CREDS_JSONに関しては、
code: package/pds/service/index.js
const pgUrl = ({ username, password, host, port }) => {
const enc = encodeURIComponent
return postgresql://${username}:${enc(password)}@${host}:${port}/postgres
}
を使ってparseする
code: package/pds/service/index.js
const {
KmsKeypair,
S3BlobStore,
CloudfrontInvalidator,
} = require('@atproto/aws')
なのでどうにもAWSで動かす前提で作ってるっぽい
最終的には
code: package/pds/service/index.js
const pds = PDS.create({
db,
blobstore: s3Blobstore,
repoSigningKey,
plcRotationKey,
config: cfg,
imgInvalidator: cfInvalidator,
})
await pds.start()
なので、PDSを見ていけば何やってるかわかりそう
./packages/pds/src/index.tsを読むとPDSが持っている機能が大体わかりそう
./packages/pds/src/context.tsを読むと
code: package/pds/src/context.ts
constructor(
private opts: {
db: Database
blobstore: BlobStore
repoSigningKey: crypto.Keypair
plcRotationKey: crypto.Keypair
auth: auth.ServerAuth
imgUriBuilder: ImageUriBuilder
cfg: ServerConfig
mailer: ServerMailer
services: Services
messageQueue: MessageQueue
messageDispatcher: MessageDispatcher
sequencer: Sequencer
},
) {}
なので、大体この辺が主要な機能っぽい
あとは ./package/pds/src/config.ts からサーバー設定項目がわかる
code: package/pds/src/config.ts
export interface ServerConfigValues {
debugMode?: boolean
version: string
publicUrl?: string
scheme: string
port?: number
hostname: string
dbPostgresUrl?: string
dbPostgresSchema?: string
blobstoreLocation?: string
blobstoreTmp?: string
jwtSecret: string
didPlcUrl: string
serverDid: string
recoveryKey: string
adminPassword: string
inviteRequired: boolean
privacyPolicyUrl?: string
termsOfServiceUrl?: string
databaseLocation?: string
availableUserDomains: string[]
imgUriSalt: string
imgUriKey: string
imgUriEndpoint?: string
blobCacheLocation?: string
appUrlPasswordReset: string
emailSmtpUrl?: string
emailNoReplyAddress: string
maxSubscriptionBuffer: number
repoBackfillLimitMs: number
}
Dockerコンテナのbuildはトップディレクトリで docker build -f packages/pds/Dockerfile . でできた
--- BigWorldとの連携 ---
APIを見てみる
PDSは立てられそうだけどIndexerがわからんというかコードも資料も無い?
crawlerとindexerの実装はindigoにしかないっぽいのと実装途中っぽい
これはむしろ俺がcontributeして開発進めっぞくらいの気合がいるやつ