自分で実施した方法です。公式にやり方が用意されているのを知りませんでした。非公式なやり方なのでおすすめできません。
Misskey 11.32.0 で実施した方法です。バージョンが新しいとこの方法が利用できない可能性はあります。
docker hubにMisskeyのイメージがあったので、それを利用する方法です。イメージは自前でビルドしません。
また、構築はリバースプロキシパターン(nginxがリクエストを受けて裏にいるDocker上のMisskeyに転送)です。
version: "3"
services:
web:
restart: always
image: misskey/misskey:11.32.0
environment:
NODE_ENV: "production"
ports:
- "7000:3000"
networks:
- external_network
- internal_network
volumes:
- ./config:/misskey/.config
depends_on:
- db
- redis
redis:
restart: always
image: redis:5.0-alpine
ports:
- "6379:6379"
networks:
- internal_network
volumes:
- ./redis:/data
db:
restart: always
image: postgres:10-alpine
networks:
- internal_network
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
external_network:
internal_network:
internal: true
DBやRedisのデータを永続化するため、上記のdocker-compose.ymlではローカルにあるディレクトリ(postgres, redis)を利用するように書いてあります。 そのディレクトリを作成しておきます。
Misskeyの .config/example.yml を取得し、それを元に作成します。ファイルは config/default.yml に置きます。
example.yml から下記を修正。
url: MisskeyのサイトのURL
...
port: 3000
...
db:
host: db
...
redis:
host: redis
この他、dbのユーザ名、パスワードも変更してもいいと思います。
Misskeyで利用するDBユーザ、データベースを作成します。 最初から存在するpostgresユーザをMisskeyで利用する場合は、この手順は不要と思われます。
$ docker-compose exec db /bin/bash
# psql -U postgres
postgres=# create user "default.yml記載のDBユーザ" password 'default.yml記載のDBユーザのパスワード';
postgres=# create database "default.yml記載のデータベース名";
postgres=# \q
# exit
$ sudo docker-compose run --rm web yarn run init
$ sudo docker-compose up -d
7000番ポートでの待受が始まりますので、nginxがそこにリバースプロキシとしてリクエストを転送するように設定しておきます。