2. Misskeyコンテナを立てて公開する
ここからは実際にMisskeyコンテナを立てる作業です。基本的にはMisskeyのGitHubレポジトリから必要なファイルを入手して必要な部分だけ編集していきます。公式ドキュメントでは以下を参照しての作業となります。
Docker Composeを使ったMisskey構築 | Misskey Hub
上記ドキュメントではリポジトリのクローンを行い、イメージのビルドまでやっていますが、今回のサーバースペックではビルドに失敗してしまいます。そのため、Docker Hubのビルド済みイメージを使用するので以下のように最低限必要な設定ファイルだけ入手します。
mkdir -p docker/misskey/.config
cd docker/misskey/
MSK_GH_URL='https://raw.github.com/misskey-dev/misskey/master'
wget "${MSK_GH_URL}/.config/docker_example.yml" -O .config/default.yml
wget "${MSK_GH_URL}/.config/docker_example.env" -O .config/docker.env
wget "${MSK_GH_URL}/docker-compose.yml.example" -O docker-compose.yml
.config/default.ymlとdocker-compose.ymlは記載量が多いように見えますが、変更が必要な箇所は結構少ないです。
.config/default.ymlでは公開用のサイトURLの設定とDBにアクセスするためのユーザー、パスワードを設定します。
8 # Final accessible URL seen by a user.
9 url: https://misskey.fullstuckengineer.com/
...
43 # Auth
44 user: example-misskey-user
45 pass: example-misskey-pass
.config/docker.envでは上記で設定したDBアクセス用のユーザー、パスワードと同じ値を設定します。ユーザーとパスワードの並びが逆なので注意して設定してください。
1 # db settings
2 POSTGRES_PASSWORD=example-misskey-pass ### <- .config/default.yml の pass
3 POSTGRES_USER=example-misskey-user ### <- .config/default.yml の user
4 POSTGRES_DB=misskey
docker-compose.ymlはnginx-proxyを使用しているため少し設定を書き足します。最終的には以下のような内容です。コメントアウトと追記が変更箇所です。meilisearchは有効化していません。
version: "3"
services:
web:
# build: .
image: misskey/misskey:latest
restart: always
links:
- db
- redis
# - meilisearch
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
# ports:
# - "3000:3000"
networks:
- internal_network
# - external_network
- proxy-nw
volumes:
- ./files:/misskey/files
- ./.config:/misskey/.config:ro
environment:
- VIRTUAL_HOST=misskey.fullstuckengineer.com
- VIRTUAL_PORT=3000
- LETSENCRYPT_HOST=misskey.fullstuckengineer.com
# - LETSENCRYPT_TEST=true
# - CERT_NAME=default
redis:
restart: always
image: redis:7-alpine
networks:
- internal_network
volumes:
- ./redis:/data
healthcheck:
test: "redis-cli ping"
interval: 5s
retries: 20
db:
restart: always
image: postgres:15-alpine
networks:
- internal_network
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
retries: 20
# meilisearch:
# restart: always
# image: getmeili/meilisearch:v1.1.1
# environment:
# - MEILI_NO_ANALYTICS=true
# - MEILI_ENV=production
# env_file:
# - .config/meilisearch.env
# networks:
# - internal_network
# volumes:
# - ./meili_data:/meili_data
networks:
internal_network:
internal: true
# external_network:
proxy-nw:
name: proxy-nw.shared
external: true
ここまでできたら公式ドキュメントに記載の通り初回起動時の初期化とコンテナの起動を行います。
sudo docker compose run --rm web pnpm run init
sudo docker compose up -d
コンテナの起動まではこれで終了です。実際にはここにアクセスするためのDNSの設定を行う必要があるためCloudflare側の設定を行っていきます。
まずは misskey.fullstuckengineer.com にアクセスできるようにAレコードを登録します。ここではCDNの機能を有効にし、サイトへのアクセスを高速化させたいので「プロキシ ステータス」を「プロキシ済み」の状態にしましょう。
次に、CloudflareとVPSサーバー間のSSL/TLS通信の設定を行います。Cloudflareのドメイン管理画面左側のメニューから「SSL/TSL > 概要」を開きます。デフォルトでは「フレキシブル」が選択されているのですが、今回はVPSサーバー側もLet’s Encryptを使用してSSL化するため「フル」を選択します。
実際にLet’s Encryptによる証明書を設定するためにはサーバーのエンドポイントにHTTP(80)で到達できる必要があるそうです。そのため、Cloudflareのドメイン管理画面左側のメニューから「ルール > ページルール」を開き、必要なアクセス許可を設定します。具体的には以下のようなルールを作成してください。
続いて、Misskeyの公式ドキュメントの「CDNの設定」にも記載されている通り、CDN利用時の例外設定を追加します。
さらっと書いてあるのですが、Cloudflareでの実際の設定は下図のとおりです。
ここまで設定が完了すれば設定したドメイン名(misskey.fullstuckengineer.com)でアクセスができるようになっているはずです。
お疲れさまでした。続いてはMisskey内の設定としてオブジェクトストレージを構成していきます。
コメント