自鯖に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のインストール
以下のサイトに従って進めていきます。

まず、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を開始できます。
コメント