分散型SNS「Misskey」をDockerを使ってインストール (v13対応)

Mastodonのような短文投稿分散型SNSであるMisskeyをDockerを使ってインストールする方法を紹介します。

国産の分散型SNSであるMisskeyを自分のサーバ(VPS)にインストールしたので、 その方法を忘れないように書いておきます。

NginxもMisskeyもDockerを使ってサクッと(30分くらいで)立ち上げます。

Misskeyとは

Misskey(読み方はミスキー)は、Mastodonのような短文投稿ができる分散型SNSの1つです。
開発者のsyuiloさんを中心に、オープンソースで開発されています。

基本的にMastodonと同じく、(Twitterのように)短文投稿ができます。
他にも以下のような機能があるようです。

  • SlackやDiscordのように絵文字でリアクションができる。
  • リッチで可愛いユーザーインターフェース。
  • 豊富なテーマで配色やタイムタインの表示を変更できる。
  • サイドバーにウィジェットという情報表示欄を追加できる。
  • 一部のmarkdown記法を使える。

以下の画像は私が構築したMisskeyサーバ(かんなすきー)のものです。
左が各種メニューで真ん中がタイムライン、右側がウィジェットになります。

img

導入した経緯

元々はMastodonを構築しようと思っていたのですが、要求するマシンスペックが高いという話を聞き、もう少し軽量なソフトウェアがないか探していました。
次にPleromaを検討したのですが、英語のドキュメントが多くDockerで動かせるのか怪しかったため、気乗りしませんでした。
日本語のドキュメントが存在し、軽快に動くソフトウェアがないか探していたところ、Misskeyを見つけたため、試しに導入することにしました。

前提条件

今回使うサーバのスペックは以下の通りです。
v13になりメモリの使用量が増えたのか、メモリ2GBだとOOM Killerが発生するようになったため、スワップ領域はあったほうが良いです。 私はスワップ領域として2GBを設定しています。

  • OS: Ubuntu 22.04
  • CPU: 2コア
  • メモリ: 2GB
  • ディスク: 40GB
  • Misskey: v13.x(latest)

DockerとDocker Composeは以下のページを参考にしてインストールしておきます。

Nginxをインストールする

私は一つのサーバに複数のサイトを構築することがあるため、Nginxをプロキシとしてインストールします。
今回はjwilder/nginx-proxyを使います。
また、サイトのHTTPS化のため、jrcs/letsencrypt-nginx-proxy-companion も使います。

以下のような docker-compose.yml を用意して docker-compose up -d しておきます。
letsencrypt-nginx-proxy-companionを使って複数ドメイン名に無料SSL証明書を適用する - Qiita を参考にしました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: "2"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
    restart: always
    networks:
      - external_network

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
    volumes_from:
      - nginx-proxy
    restart: always
    networks:
      - external_network

networks:
  external_network:
    external: true

docker networkが存在しない場合は作成する必要があります。

1
docker network create external_network

Misskeyをインストールする

前置きが長くなりましたが、Dockerを使ってMisskeyをインストールしていきます。
幸いなことに、MisskeyのレポジトリにはDockerを使ったインストール手順書があるため、 それに沿って読み進めていけばOKです。

Misskeyのダウンロード

git cloneでMisskeyのソースコードをダウンロードし、最新版にします。

1
2
3
git clone -b master git://github.com/misskey-dev/misskey.git && \
cd misskey && \
git checkout master

設定ファイルの作成

default.ymlとdocker.envの2種類のファイルを用意します。

1
2
3
cd .config && \
cp docker_example.yml default.yml && \
cp docker_example.env docker.env 

まずはdefault.ymlを編集します。以下の箇所を変更しました。

  • user/pass: データベースのユーザ名とパスワードを設定する。

次にdocker.envを編集します。default.ymlで記載したデータベースのユーザ名とパスワードを記載します。

docker-compose.ymlの編集

当ブログではDocker imageを使う方法を記載します。簡単に起動ができbuild時間も不要になります。
buildを使った方法は公式ドキュメント Dockerを使ったMisskey構築 | Misskey Hub をお読みください。

次に一つ上の階層に移動し、docker-compose.ymlを編集します。

1
2
cd ..
cp -p docker-compose.yml.example docker-compose.yml

以下は、参考例です。 VIRTUAL_HOSTとLETSENCRYPT_HOSTには、先ほどのdefault.ymlのurlと同じものを指定します。
LETSENCRYPT_EMAILには、自分のメールアドレスを指定します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
version: "3"

services:
  web:
    image: misskey/misskey:latest
    restart: always
    links:
      - db
      - redis
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    ports:
      - "3000:3000"
    networks:
      - internal_network
      - external_network
    volumes:
      - ./files:/misskey/files
      - ./.config:/misskey/.config:ro
    environment:
      VIRTUAL_HOST: example.com
      VIRTUAL_POST: 3000
      LETSENCRYPT_HOST: example.com
      LETSENCRYPT_EMAIL: example@example.com

  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.1-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

networks:
  internal_network:
    internal: true
  external_network:
    external: true

編集を終えたら、以下のコマンドを実行してMisskeyを起動します。

1
docker-compose up -d

urlにアクセスし、Misskeyのサイトが表示されれば、完了です。
お疲れ様でした。

感想

構築に半日くらいかかるかなと思ったら半時間でサクッと終わって感動してます。
MisskeyとDockerはすごい。

少人数(1〜10人程度)ならばDocker版でも十分だと感じます。

Misskeyの触り始めは、ボタンが色々あって混乱していました。
数日も経つとMastodonとは違った面白さがあるなと感じるようになりました。

Misskeyの今後が楽しみです。

ではでは。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。