Misskeyインスタンスを自宅サーバーでホストする(Docker環境)
新年2日目からMastodonインスタンス爆破→Misskeyに乗り換える、ということをしたので
自宅サーバーに誤興味のある逸般人向けに初心者目線でメモ程度に書いてみようと思います。
所々chatGPTに設定聞いたりしてるのでそれもまとめたいメモ記事です。
みなさんもこの記事を参考に余ってるパソコンとか誤活躍させてみてはいかがでしょうか!
では本題へ。
用意するもの(必須)
・自宅サーバー機(元々iMacでMastodonをホスト、今は投げ売りされてたWyse3040)
・インストールメディア(今回はUbuntu Serverを入れたUSBメモリを用意)
・ドメイン
・Cloudflareアカウント(ドメインをCloudflareに紐付け)
設定によっては必要なもの
・Googleアカウント(メールサーバー使うなら必要、Misskeyインスタンス専用アカウントだとなお良い 二段階認証設定必須)
・ファイルサーバーorオブジェクトストレージ(Cloudflareアカウント作るのでCloudflareR2で十分)
・SSH出来る端末(最近はもっぱらTailscale使ってるけど今回は省略)
わたしの環境
OS:Ubuntu Server 24.04LTS
インストール時にminimizedを選択しています
サーバー機:Wyse3040(詳しくは調べてね)
SSHクライアント:Windows
サーバー機の設定に取り掛る前にやること
・OSインストール(しなきゃ始まらない)
・ドメインをCloudflareに登録、ネームサーバーをCloudflareのものに変えておく
・ルーター設定でサーバー機のIPアドレスを手動割り当てに変更(環境によって違うと思いますがIPアドレスが変動しないようにする設定調べてください)
ちなみにIPアドレスの調べ方は
ip a
でルーター管理画面と同じIPアドレスを手動割り当てに変更するなりしてください
・Cloudflareの設定
SSLの設定を「フル」
Speed > Optimization > Content Optimization でAuto MinifyとRocket Loaderをすべて無効にする
サーバー機でまず始めにやること
#タイムゾーン設定
sudo timedatectl set-timezone Asia/Tokyo
#自動サスペンドオフ設定
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
#アップデート・アップグレード
sudo apt update
sudo apt upgrade
#upgradeでnot upgradedが0じゃなかった場合
sudo apt list --upgradable
sudo apt install パッケージ名 #listに出てきたやつ
#もう一度sudo apt list --upgradableしてListing... Doneで何も出てこなければok
#ufwインストール
sudo apt install ufw
#ufw設定
#ufwを有効にする
sudo ufw enable
#sshポートを開ける
sudo ufw allow ssh
#設定を読み込ませる
sudo ufw reload
#設定確認
sudo ufw status
#Status: active 22/tcp ALLOW Anywhereになってればok
#これでひとまずsshは出来るのでサーバー機本体を触る必要は基本ないです
SSH設定(今回はPowerShellを管理者権限で実行)
クライアント側
ssh-keygen -t ed25519
#.sshフォルダに保存された.pubファイルを開いておくと楽
ssh ホスト名@サーバー機のIPアドレス
#パスワード認証でssh
ホスト側
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
cd .ssh
sudo vim authorized_keys #pubファイルの中身をコピペ
cd /etc/ssh
sudo vim sshd_config
sshd_config
#パスワード認証無効化
PasswordAuthentication no #yesをnoに変えてコメントアウト外す
状況見てやる、Ubuntu Serverだと絶対この設定生えてくるので確認
情報があまりなかったのでここだけでも参考になれば
cd /sshd_config.d
ls #50-cloud-init.confがなかったら以下は読み飛ばしていい
sudo vim 50-cloud-init.conf
#パスワード認証無効化2
PasswordAuthentication no #yesになってるのでnoに変える
設定再読み込み
sudo systemctl restart ssh
これでパスワード認証なしでSSH出来るようになったのでサーバー機は放置です!
一旦vimインストール
sudo apt install vim
(メモリが少ないサーバー機の場合)スワップファイル作成
#メモリが2GBの場合
sudo fallocate -l 2G /swapfile
#ファイルのパーミッション設定
sudo chmod 600 /swapfile
#スワップ領域としてフォーマット
sudo mkswap /swapfile
#スワップファイルを有効化
sudo swapon /swapfile
#スワップ領域の確認
free -h #swapに2GB表示されてたらok
#スワップ永続化設定
sudo vim /etc/fstab
#以下の行を追記
/swapfile none swap sw 0 0
#保存して終了
作業用ユーザー作成・切り替え
sudo adduser misskey #好きなユーザー名でいいが、分かりやすくmisskeyにします
#sudoグループに所属させる
sudo usermod -aG sudo misskey
#作業用ユーザーに切り替える
sudo su - misskey
Docker、Docker Composeインストール
#Docker公式手順に従うので説明省きます
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
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 \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
#Dockerインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#hello-worldする
sudo docker run hello-world
#Hello from Docker!が含まれる文章が表示されたらok
ここから本番です。公式手順に従って進めていきます。
Misskey構築
#リポジトリの取得
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 ./compose_example.yml ./compose.yml
#設定ファイルの編集
sudo vim .config/default.yml
default.yml
url: https://ドメイン/ #末尾の/まで表記
user: example-misskey-user #misskey-userとかでいい。次の設定で使うのでメモ
pass: example-misskey-pass #忘れないパスワード。こちらも次の設定で使うのでメモ
sudo vim .config/docker.env
docker.env
POSTGRES_PASSWORD=example-misskey-pass #default.ymlのpassと同じ文字列を記述
POSTGRES_USER=example-misskey-user #default.ymlのuserと同じ文字列を記述
compose.ymlは特に触らなくて良いです。(ポート変更など必要に応じて)
ビルドと初期化
#ビルド 時間がかかるので待つ 寝落ちないように
sudo docker compose build
#データベースの初期化
sudo docker compose run --rm web pnpm run init
起動
#ログも一緒に表示する
sudo docker compose up -d && sudo docker compose logs --follow
これでMisskeyは立ち上がりました!ctrl+cでok
cd
でホームディレクトリに戻り次に進みます。
Cloudflare Tunnel設定
アカウントホーム > Zero Trust > ネットワーク > Tunnels > トンネルを作成する
トンネルの種類→Cloudflared
トンネル名は分かりやすく適当にで大丈夫です
オペレーティングシステムを選択する→Debian
コネクタをインストールして実行する→マシンにcloudflaredがインストールされていない場合 の方のコマンドをコピペで実行
パブリックホスト名→default.yml
に記述したドメインを入力
タイプ→HTTP
URL→localhost:3000
save hostnameで完了
これで設定したドメインにアクセスすれば繋がっているはず!
ここからメールサーバーとオブジェクトストレージを使う人は設定をしていってください。
Discussion