VPSにDockerComposeでMisskeyを建てる

サーバ
スポンサーリンク

自鯖にMisskeyを建てた時の備忘録です。

実行環境

  • VPS : 4GBメモリ,仮想4コア,メモリ150GB
  • Ubuntu : 24.04
  • Docker : 27.4.1
  • Docker Compose : 2.32.1

Docker Composeのインストール

Dockerのインストール

はじめに、Dockerリポジトリを追加します。

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

続けてDockerをインストールします。

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

次にDockerを起動した後に自動起動をオンにします。

sudo systemctl start docker
sudo systemctl enable docker

現時点ではDockerを実行する際にsudoが必要となるので、現在ログインしているユーザーをDockerグループに追加します。

sudo usermod -aG docker $USER

変更を反映して、確認します。以下のコマンドを実行してDockerが追加されていれば問題ありません。

newgrp docker
groups

Docker Composeのインストール

続いてdockerComposeをインストールします。こちらから最新のバージョンを調べ、以下のコマンドでインストール出来ます。

sudo curl -SL https://github.com/docker/compose/releases/download/v2.32.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

同様に実行権限を付与します。

sudo chmod +x /usr/local/bin/docker-compose

これでDockerComposeの設定はできたと思います。

Misskeyのインストール

以下のサイトに従って進めていきます。

Docker Composeを使ったMisskey構築 | Misskey Hub
このガイドはDockerを使ったMisskeyセットアップ方法を説明します。

まず、gitでクローンします。

git clone -b master https://github.com/misskey-dev/misskey.git

続いて以下のコードを実行します。

cd misskey
git checkout master
cp .config/docker_example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
cp ./docker-compose.yml.example ./docker-compose.yml
cp ./compose_example.yml ./compose.yml

default.ymlの編集

vimなどでdefault.ymlを編集します。

vim .config/default.yml

編集する箇所は以下でハイライトされた部分です。10行目に使用するドメイン名、43行目にデータベース名、47,48行目にデータベースのユーザー名とパスワードを入力します。

#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

#   ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────

# Final accessible URL seen by a user.
# You can set url from an environment variable instead.
url: https://example.com/

# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!

#   ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────

#
# Misskey requires a reverse proxy to support HTTPS connections.
#
#                 +----- https://example.tld/ ------------+
#   +------+      |+-------------+      +----------------+|
#   | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
#   +------+      |+-------------+      +----------------+|
#                 +---------------------------------------+
#
#   You need to set up a reverse proxy. (e.g. nginx)
#   An encrypted connection with HTTPS is highly recommended
#   because tokens may be transferred in GET requests.

# The port that your Misskey server should listen on.
port: 3000

#   ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────

db:
  host: db
  port: 5432

  # Database name
  # You can set db from an environment variable instead.
  db: misskey

  # Auth
  # You can set user and pass from environment variables instead.
  user: username
  pass: passward

docker.envの編集

先程と同様にvim等でdocker.envを編集します。

vim .config/docker.env

編集する部分は、5行目に先程設定したDBのパスワード、7行目に先程設定したDBのユーザー名、9行目に先程設定したDB名を入力します。

# misskey settings
# MISSKEY_URL=https://example.tld/

# db settings
POSTGRES_PASSWORD=passward
# DATABASE_PASSWORD=${POSTGRES_PASSWORD}
POSTGRES_USER=user
# DATABASE_USER=${POSTGRES_USER}
POSTGRES_DB=misskey
# DATABASE_DB=${POSTGRES_DB}
DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}"

ビルドと初期化

以下のコマンドでビルドと初期化を行ったのちにMisskeyを起動させます。

docker compose build
docker compose run --rm web pnpm run init
docker compose up -d

これでMisskeyは起動しました。次はNginxの設定をします。

Nginxの設定

Aレコードの設定

ドメインのAレコードを設定します。

私はXserverで契約しているのでXserverサーバーパネルのDNSレコード設定からAレコードを設定します。

上記画面で内容の部分にVPSのグローバルIPアドレスを入力します。反映には時間がかかります。

Nginxの設定

私は現在VPSでNginxをDockerで動かしているので、この記事ではNginxをDockerで動かす前提で進めていきます。

まず、以下の構造でDockerの設定ファイルを作成します。

.
├── containers
│   └── nginx
│       ├── Dockerfile
│       └── conf.d
│           └── default.conf
└── compose.yml

Dockerfile

Dockerfileは以下の記述をします。

FROM nginx:1.21-alpine
COPY containers/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

default.conf

default.confは以下の記述をします。

SSL設定の部分はLet’s Encryptで発行したSSL証明書を発行してください。

具体的なSSL証明方法は以下の記事で紹介しています。

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;

server {
    listen 80;
    server_name example.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    # SSL 設定
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    # 最大アップロードサイズ設定
    client_max_body_size 80m;

    # Misskey のプロキシ設定
    location / {
        proxy_pass http://misskey-web-1:3000/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;

        # キャッシュ設定
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
        proxy_force_ranges on;
        add_header X-Cache $upstream_cache_status;
    }

    # WebSocket(Misskey のリアルタイム機能用)
    location /misskey/ws/ {
        proxy_pass http://misskey-web-1:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
    }
}

compose.yml

compose.ymlは以下のように記載します。

services:
  web:
    container_name: web
    build:
      context: .
      dockerfile: ./containers/nginx/Dockerfile
    volumes:
      - ./static:/static
      - /etc/letsencrypt/:/etc/letsencrypt:ro
    ports:
      - "80:80"
      - "443:443" 
    networks:
      - default
      - misskey_external_network
      - misskey_internal_network 

networks:
  default:
    driver: bridge
  misskey_external_network:  
    external: true    
  misskey_internal_network:  
    external: true   

ビルドと起動

ここまで出来たら以下のコマンドでビルドと起動します。

docker-compose -f compose.yml up -d --build

問題なく起動したら自身の設定したURLにアクセスすると管理アカウントの設定画面が出てくるので、そこで設定するとMisskeyを開始できます。

コメント

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