PDSの環境変数
注意: この記事の内容は古くなっているため最新のPDS環境の構築には使えません
コンテナはatprotoのトップディレクトリで docker build -f packages/pds/Dockerfile . でbuildできる 定義可能な環境変数
code:env
ENV: Nullable, dotenv.config({ path: ./.${env}.env })で使う
PORT: Nullable, Nullだと2583, dockerコンテナビルド時は3000
// deprecated SIGNING_KEY_ID: REPO_SIGNIN_KEYとPLC_ROTATION_KEYに分離した,
RECOVERY_KEY_ID: did, "did:"で始まらない場合はKMSでkeypairを作ってそのkeyIdを指定する
DB_CREDS_JSON: username, password, host, portのJSON
DB_MIGRATE_CREDS_JSON: username, password, host, portのJSON
DB_SCHEMA: Nullable, postgresQLのスキーマ名
SMTP_HOST: smtpのホスト名
SMTP_USERNAME: smtpのユーザー名
SMTP_PASSWORD: smtpのパスワード
S3_BUCKET_NAME: S3のバケット名
CF_DISTRIBUTION_ID: Cloudfrontのdistribution id,Cloudfrontは画像の配信に使用
DEBUG_MODE: Nullable, "1"だとdebugModeがtrue, それ以外でfalse
PDS_VERSION: Nullable, Nullのとき'0.0.0'
PUBLIC_URL: Nullable, Nullのときundefined,
HOSTNAME: Nullable, Nullのとき'localhost', 'localhost'のときは強制的にhttp仕様になる
TLS: Nullable, '1'だとhttps
JWT_SECRET: Nullable, Nullのとき'jwt_secret', jwt.signとjwt.verifyで使用
SERVER_DID: 必須。鯖缶did?, plcサーバーにcreateDidして事前に作成する必要あり
RECOVERY_KEY: Nullable?, did, わからん
ADMIN_PASSWORD: Nullable, NULLだと"admin"
INVITE_REQUIRED: Nullable, "true" or false, "true"以外でfalse, アカウント作成時にinvite codeが必要か
PRIVACY_POLICY_URL: Nullable, プラポリのURL, 相対パス("/"で始まる)で指定時はpublicUrl + privacyPolicyUrl
TERMS_OF_SERVICE_URL: Nullable, 規約のURL, 相対パス("/"で始まる)で指定時はpublicUrl + termsOfServiceUrl
DATABASE_LOC: Nullable, SQLite利用時のDBのLocation, 優先度はdbPostgresUrl > databaseLocation(SQLite) > Memory
BLOBSTORE_LOC: Nullable, 画像の保存場所, NullのときはMemoryBlobStore
BLOBSTORE_TMP: Nullable, 画像のtmp保存場所, Nullのときはos.tmpdir()
AVAILABLE_USER_DOMAINS: Nullable, ","区切りで複数定義できる, ユーザーが利用可能なドメイン?
// deprecated IMG_URI_SALT: Nullable, NULLだとデフォルトのハッシュ値, ImageUriBuilderで使用
// deprecated IMG_URI_KEY: Nullable, NULLだとデフォルトのハッシュ値, ImageUriBuilderで使用
// deprecated IMG_URI_ENDPOINT: Nullable, 画像ファイルのURL, Nullだと ${config.publicUrl}/image
// deprecated BLOB_CACHE_LOC: Nullable, 画像をキャッシュするLocation, Nullだとos.tmpdir()
APP_URL_PASSWORD_RESET: Nullable, NULLだと'app://password-reset'
EMAIL_SMTP_URL: Nullable, NULLだとundefined
EMAIL_NO_REPLY_ADDRESS: Nullable, NULLだと'noreply@blueskyweb.xyz'
DB_POSTGRES_URL: DBのURL, 優先度はdbPostgresUrl > databaseLocation(SQLite) > Memory
DB_POSTGRES_SCHEMA: Nullable, postgresQLのスキーマ名
MAX_SUBSCRIPTION_BUFFER: Nullable, NULLだと500, eventsの最大バッファリング数?
REPO_BACKFILL_LIMIT_MS: Nullable, NULLだと24時間, コネクション再開時にrepoのイベントをいつまで追うか?
LOG_SYSTEMS: Nullable, ","区切りで複数定義できる
LOG_ENABLED: "true"
LOG_LEVEL: Nullable, NULLだと'info'
LOG_DESTINATION: logの出力先(file)
ATP_BUILD_SHALLOW: Nullable, よくわからん
-------------------------------------------------------------------------------------------------------------
APP_VIEW_REPO_PROVIDER: Nullable, PDS公式Viewer? nullでundefined, E.g. ws://abc.com:4000
PLC_ROTATION_KEY_ID: KMSからkeypairをloadするためのkeyId
-------------------------------------------------------------------------------------------------------------
USER_INVITE_INTERVAL: Nullable, 多分既存ユーザーにinvite codeを渡す期間。nullでnull
-------------------------------------------------------------------------------------------------------------
DB_POOL_SIZE: Nullable, PostgreSQLのコネクションプールサイズ, nullでundefined
// deprecated HIVE_API_KEY: nullable, HiveLabeler用のAPIKEY, nullでundefined
// deprecated LABELER_DID: nullable, ラベリング担当者のDID, nullで'did:example:labeler'
-------------------------------------------------------------------------------------------------------------
MODERATOR_PASSWORD: nullable, モデレーターのパスワード, nullでundefined
DB_POOL_MAX_USES: nullable, PostgreSQLの最大コネクションプールサイズ, nullでundefined
DB_POOL_IDLE_TIMEOUT_MS: nullable, PostgreSQLのコネクションプールのタイムアウト時間(ms), nullでundefined
-------------------------------------------------------------------------------------------------------------
DID_CACHE_STALE_TTL: nullable, nullでHOUR
DID_CACHE_MAX_TTL: nullable, nullでDAY
BSKY_APP_VIEW_ENDPOINT: 必須, AppViewのUrl
-------------------------------------------------------------------------------------------------------------
FEED_PUBLISHER_DID: Nullable, カスタムフィード提供者のDID, nullで{}, 詳細は記事末尾の「makeAlgos」を参照
// deprecated FEED_GEN_DID: Required, describeFeedGeneratorでのみ使う。現状は'did:example:feedGen'でよさそう
-------------------------------------------------------------------------------------------------------------
SEQUENCER_LEADER_LOCK_ID: Nullable, uniqueLockIdの指定に使う?nullでundefined
-------------------------------------------------------------------------------------------------------------
CRAWLERS_TO_NOTIFY: 「,」区切りのString(Array), Nullable, 収集してもらうBGSのURL?
USER_INVITE_EPOCH: Nullable. nullで0, 招待コードを発行する基準日(userCreatedAtと比較して大きい方とDate.now()を比較したものがepochLifeSpanになり、招待コード発行数はepochLifeSpan / userInviteIntervalとなる)
------------------------------------------------------------------------------------------------------------
DB_TX_LOCK_NONCE: テスト環境でのみ使用
// deprecated BSKY_APP_VIEW_PROXY: Nullable, Boolean, defaultでfalse
HANDLE_RESOLVE_NAMESERVERS: Nullable, String( "," 区切りのArray), 予備のPLCサーバーのURL?
TRIAGE_PASSWORD: Nullable, String, nullでundefined, Adminのロールの一つであるtriage権限のパスワード
UNACCEPTABLE_WORDS_B64: String(Base64), ","区切りのArray, nullでundefined, handleの禁止ワード
FALSE_POSITIVE_WORDS_B64: String(Base64), ","区切りのArray, nullでundefined, handleの禁止ワードのうちの例外(誤検知ワード)
SEQUENCER_LEADER_ENABLED: String(Booelean) , Nullable, "0"か"false"以外のときにtrue, それ以外でundefined, 各インスタンスはデフォルトでSEQUENCER LEADERだがOFFにすることもできるとのこと
BSKY_APP_VIEW_MODERATION: String(Boolean), Nullable, defaultでfalse, AppViewでのモデレーションを有効にするか?
------------------------------------------------------------------------------------------------------------
RATE_LIMITS_ENABLED: String(Boolean), rate limitの有無。defaultでfalse
RATE_LIMIT_BYPASS_KEY: String, Nullable, defaultでundefined, rate limitを回避してリクエストする際のkey, "x-ratelimit-bypass" ヘッダーに入力する
REDIS_SCRATCH_ADDRESS: String, Nullable, defaultでundefined, RedisのHost Address, Rate Limitを使うために必要
REDIS_SCRATCH_PASSWORD: String, Nullable, defaultでundefined, RedisのPassword
BSKY_APP_VIEW_DID: 必須, AppViewのDID
ローカルで動作させる際はenvを以下のように設定している
code:.dev.env
DB_POSTGRES_URL="postgres://bsky:yksb@localhost/pds_dev"
DEBUG_MODE=1
LOG_ENABLED="true"
LOG_LEVEL=debug
LOG_DESTINATION=1
AVAILABLE_USER_DOMAINS=".test,.dev.bsky.dev"
serverDidとは
But we're planning on services in the network each having a DID. It helps with addressing & authorization.
You can set it to a temporary value, for instance did:example:temporary until the value starts to be used
PLCサーバーも立てる場合(必要なし)
PLCサーバーの環境変数
code: .env
PLC_BUILD_SHALLOW: "true"のときtrue, わからん
PLC_VERSION:バージョン
DB_CREDS_JSON: username, password, host, portのJSON
DB_MIGRATE_CREDS_JSON: username, password, host, portのJSON
DB_SCHEMA: Nullable, postgresQLのスキーマ名, nullでundefined
DATABASE_URL: Nullable, postgresqlのURL, nullだとDBがモックになる
PORT: Nullable, plcサーバーのport, nullだと2582, コンテナビルド時は3000
ENV: Nullable, dotenv.config({ path: ./.${env}.env })で使う
LOG_ENABLED: "true"
LOG_LEVEL: Nullable, NULLだと'info'
LOG_DESTINATION: logの出力先(file)
dev環境だとこうなる
code: .env
DATABASE_URL="postgres://bsky:yksb@localhost/plc_dev"
DEBUG_MODE=1
LOG_ENABLED="true"
LOG_LEVEL=debug
LOG_DESTINATION=1
invite code作成
packages/pds/src/api/com/atproto/account/createInviteCode.tsを読む
makeAlgos
These are custom algorithms that will be mounted directly onto an AppView
Feel free to remove, update to your own, or serve the following logic at a record that you control
これらは、AppViewに直接実装されるカスタムアルゴリズムです。
以下のロジックは、自由に削除したり、独自のものに更新したり、コントロールするレコードで提供することができます。
code:packages/pds/src/feed-gen/index.ts
const coll = ids.AppBskyFeedGenerator
// These are custom algorithms that will be mounted directly onto an AppView
// Feel free to remove, update to your own, or serve the following logic at a record that you control
export const makeAlgos = (did: string): MountedAlgos => ({
})