VPSにDockerでMisskeyを立てていろいろあった話

こんにちはきろたです

突然ですが先日ぎらくMisskey支部を立てました。もともと立ててたのですがいろいろあって廃墟になってたのをリメイクしたものです。久しぶりに立てたせいでいろいろ忘れてて時間を溶かしたので備忘録といつの日かのために書きます。(やったこと全部のせてます。)

環境

  • VPS : conohaVPS
  • OS : Linux ubuntu 22.04
  • CPU: 3core
  • RAM:2GB

事前準備

ドメインを買ってDNSを設定しておく(これあとあとにしておくと反映まで時間かかった時めんどくさいので先にやっておくのが吉)

ユーザーを追加する

VPSにログインしたら

adduser user_name

質問されたとおりにパスワードなどなど入力していく

ユーザーを追加したらsudo権限を与える

gpasswd -a user_name

追加したユーザーでログインする

su user_name

ログインできたらユーザーの追加と切り替えは完了です

dockerとdocker-composeをインストールする

Ubuntu 20.04へのDocker Composeのインストールおよび使用方法 | DigitalOcean
Docker Composeは、YAMLファイルの定義に基づいてマルチコンテナアプリケーション環境を実行できるツールです。サービス定義を使用して、ネットワークやデータ量を共有できる複数のコンテナで完全にカスタマイズ可能な環境を構築します。本...

上記のURLを参考にしました。

ここはいろいろながいので省略しておきます。

sudo docker -v
sudo docker-compose -v

上記のコマンドでバージョンが出たら成功です。

Nginxをインストールする

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

Nginxをプロキシとしてインストールします。記事の通りjwilder/nginx-proxyとサイトのHTTPS化のため、jrcs/letsencrypt-nginx-proxy-companion を使います。

letsencrypt-nginx-proxy-companionを使って複数ドメイン名に無料SSL証明書を適用する - Qiita
初めに Docker Compose等で * nginx-proxy * letsencrypt-nginx-proxy-companion を利用すると自作サービスのコンテナにLet’s EncryptのSSL証明書を適用して...

上記の記事やなどを参考に

以下のdocker-compose.ymlを用意します。

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

今回はdocker-compose.ymlを分離しているため事前にDocker networkを作成し同じネットワークを利用する様に指定しておく必要があるので次のコマンドを入力します。

sudo docker network create --driver bridge shared

そして

sudo docker-compose up -d

で起動します。

Misskeyの構築

今回はDockerを使ってMisskeyをインストールしていきます。

MisskeyHubではDockerを使ったMisskeyの構築方法を公開しています。

これを参考に構築していきます。

Misskeyのリポジトリの取得


gitでMisskeyのリポジトリをcloneし、最新版にします。

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

設定


以下のコマンドを使って、設定ファイルをコピーし編集していきます。

cp .config/example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env

misskey/.configにあるdefault.ymldocker.envをファイル内の説明に従って編集します。

  • 9行目|url: ユーザがアクセスする時のTLD(URL)を指定します。
  • 37行目|host: dbのhostを、localhostからdbにする。
  • 44,45行目|user/pass: データベースのユーザ名とパスワードを設定する。
  • 58行目|host: redisのhostをlocalhostからredisにする。

default.ymlのuser/passを変更した場合docker.envのユーザー名とパスワードを記載したdefault.ymlに従って編集します。(docker.envはパスワード/ユーザの順番なので気をつけること)

default.ymldocker.envがきちんと編集されてるか確認してください.。(自分はこれを間違えて2時間くらい潰しました。)

*行数や内容はアップデートで変更されていることがあるので公式のドキュメントなどで確認してください。

docker-compose.ymlの編集


misskey/に戻り、docker-compose.ymlを編集していきます。

以下のように編集(#追加と書かれている部分を追加)していきます。

version: "3"

services:
  web:
    build: .
    restart: always
    links:
      - db
      - redis
#      - es
    ports:
      - "3000:3000"
    networks:
      - internal_network
      #追加
      - shared
      - external_network
    volumes:
      - ./files:/misskey/files
      - ./.config:/misskey/.config:ro
    #追加
    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

#  es:
#    restart: always
#    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
#    environment:
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#      - "TAKE_FILE_OWNERSHIP=111"
#    networks:
#      - internal_network
#    volumes:
#      - ./elasticsearch:/usr/share/elasticsearch/data

networks:
  internal_network:
    internal: true
  external_network:
  #追加
  shared:
    external: true

編集が完了したら、次のコマンドでビルドし、実行してMisskeyを立ち上げます。

ビルドは長いので気軽に待ちましょう。

sudo docker-compose build
sudo docker-compose run --rm web yarn run init
sudo docker-compose up -d

Misskeyのアップデート


以下を入力していきます。

git stash
git checkout master
git pull
git submodule update --init
git stash pop
sudo docker-compose build
sudo docker-compose stop && sudo docker-compose up -d

お疲れ様でした。

オブジェクトストレージを設定中なので完了したらまた続きの記事を書こうと思います。

お楽しみにー

GirakBlog | エブリデイヤングライフジュネス-ぎらく

コメント