PDSをUbuntuに立ててみる
・postgresqlのインストール&起動
・nginxのインストール&起動
リバースプロキシにする。port443にきたリクエストをlocalhost:3000に流す
code:.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
server_name ${公開するURL};
ssl_certificate /etc/ssl/certs/server-crt.pem; #←Let's Encryptなどで ssl_certificate_key /etc/ssl/private/server-key.pem; #←Let's Encryptなどで location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
・node.jsのインストール
aptでインストールすると古いバージョンしか入らないので、
nodeのバージョン管理ツール「n」でインストールする
・npmのインストール
・pnpmのインストール
・Githubからソースの取得
$ cd atproto
・モジュールのインストール
$ pnpm install --frozen-lockfile
・ビルド
$ NODE_OPTIONS="--max-old-space-size=1024" pnpm build
$ pnpm update-main-to-dist
$ rm -rf node_modules
$ pnpm install --prod --shamefully-hoist --frozen-lockfile --prefer-offline
※NODE_OPTIONSはメモリが少ない場合指定する。
・ufwで443ポートを開放する
・PDSを起動する。
$ cd /home/pds/atproto/services/pds
$ node --heapsnapshot-signal=SIGUSR2 --enable-source-maps index.js
code:.env
DB_POSTGRES_URL=postgres://postgres:postgres@localhost:5432/postgres
DB_POSTGRES_SCHEMA=postgres
DB_CREDS_JSON='{"username":"postgres","password":"パスワード","host":"localhost","port":"5432"}'
DB_MIGRATE_CREDS_JSON='{"username":"postgres","password":"パスワード","host":"localhost","port":"5432"}'
DEBUG_MODE=1
LOG_ENABLED=true
LOG_LEVEL=info
LOG_DESTINATION=/home/pds/logs/pds.log
AVAILABLE_USER_DOMAINS=.forza7.org
REPO_SIGNING_KEY=
RECOVERY_KEY_ID=
SERVER_DID=did:plc:3e3rxvkqjus7hdhtyxzhvbyafyesxt5kw7bemthlg26ml3yxhlkq
PORT=3000
SMTP_HOST=
SMTP_USERNAME=
SMTP_PASSWORD=
BLOB_CACHE_LOC=/home/pds/blob/chache
BLOBSTORE_LOC=/home/pds/blob/image
BLOBSTORE_TMP=/home/pds/blob/tmp
IMG_URI_SALT=
IMG_URI_KEY=
EMAIL_NO_REPLY_ADDRESS=no-reply@atproto.forza7.org
ADMIN_PASSWORD=
(サービス化したい場合はこんな感じ)
code: *.service
Description=PDS
After=network.target
ExecStart=pnpm run start | pnpm exec pino-pretty
User=pds
Group=pds
Restart=always
EnvironmentFile=/home/pds/.env
WantedBy=multi-user.target
サービス化する場合は環境変数は.envに指定する