VPS+Cloudflare+DockerでMisskeyサーバーを立てる(その2)- Misskeyの起動と公開

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利用時の例外設定を追加します。

CDNの設定 | Misskey Hub

さらっと書いてあるのですが、Cloudflareでの実際の設定は下図のとおりです。

ここまで設定が完了すれば設定したドメイン名(misskey.fullstuckengineer.com)でアクセスができるようになっているはずです。

お疲れさまでした。続いてはMisskey内の設定としてオブジェクトストレージを構成していきます。

コメント

タイトルとURLをコピーしました