分散型SNS「Misskey」をDockerを使ってインストールした

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

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

Misskeyとは

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

基本的にMastodonと同じく、(Twitterのように)短文投稿ができます。
他にも以下のような機能があるようです。(私も触りはじめて数日のため全容は把握できてないです)

  • 豊富なテーマで配色やタイムタインの表示を変える。
  • サイドバーにウィジェットという情報表示欄を追加できる。
  • アップロードした画像やファイルをドライブという場で管理できる。
  • 一部のmarkdown記法を使える。
  • (Discordのように)絵文字でリアクションをつけられる。
  • フォロワーとリバーシで対戦できる。

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

img

導入した経緯

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

前提条件

今回使うサーバのスペックは以下の通りです。

  • OS: Ubuntu 18.04
  • CPU: 2コア
  • メモリ: 2GB
  • ディスク: 40GB

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 を参考にしました。

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:
      - shared

  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:
      - shared

networks:
  shared:
    external: true

Misskeyをインストールする

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

Misskeyのダウンロード

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

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

設定ファイルの作成

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

cd .config && \
cp example.yml default.yml && \
cp docker_example.env docker.env 

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

  • url(9行目): ユーザがアクセスする時の(Misskeyの)URLを指定する。
  • port(44行目): コメントアウトを外す。(option 1の方)
  • host(58行目): dbのhostを、localhostからdbにする。
  • user/pass(65-66行目): データベースのユーザ名とパスワードを設定する。
  • host(79行目): redisのhostをlocalhostからredisにする。

次にdocker.envを編集します。default.ymlで記載したデータベースのユーザ名とパスワードを記載します。 (default.ymlと違い、パスワード/ユーザの順番なので気をつけること)

docker-compose.ymlの編集

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

cd ..

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

version: "3"

services:
  web:
    build: .
    restart: always
    links:
      - db
      - redis
    ports:
      - "127.0.0.1:3000:3000"
    networks:
      - internal_network
      - shared
      - external_network
    volumes:
      - ./files:/misskey/files
    environment:
      VIRTUAL_HOST: example.com
      LETSENCRYPT_HOST: example.com
      LETSENCRYPT_EMAIL: example@example.com

  redis:
    restart: always
    image: redis:4.0-alpine
    networks:
      - internal_network
    volumes:
      - ./redis:/data

  db:
    restart: always
    image: postgres:12.2-alpine
    networks:
      - internal_network
    env_file:
      - .config/docker.env
    volumes:
      - ./db:/var/lib/postgresql/data

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

編集を終えたら、以下のコマンドを実行してMisskeyを起動します。
(マシンスペックにもよりますが、この処理には10分以上かかることがあります。)

docker-compose build --no-cache && \
docker-compose run --rm web yarn run init && \
docker-compose up -d

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

感想

構築に半月くらいかかるかなと思ったら半日でサクッと終わって感動してます。
Misskey(とDocker)すごい。
ただ、misskey.ioにいる有識者によると、Docker版はあまり安定してないという話も聞いたので、 サーバに直接パッケージをインストールする方法が良いかもしれません。

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

Misskeyの今後が楽しみです。

ではでは。

関連記事