MisskeyをDocker版からUbuntu版に移行する場合の手順書

サーバ・プログラミング

標題の通り、MisskeyをDocker版からUbuntu版に移行させました。

ので、その際に使用した作業手順書をシェアします。

それぞれ詰まったところは色々ありますが、Misskeyに起因する特有のもの以外は省いています。それぞれ検索すれば対処出来るものだった為です。

環境

  • Cloudflare Tunnelを利用
  • Ubuntu22.04.3 LTS
  • デフォルトユーザオンリーで作業します
  • compose.ymlで指定した恒久化ディレクトリは「data」です。適宜読み替えて下さい。

①ビルド直前まで作業を進める。

以下の公式解説に沿って進めていけば勝手に用意が調っていきます。

Ubuntu版Misskeyインストール方法詳説 | Misskey Hub

https://misskey-hub.net/docs/install/ubuntu-manual.html

引っかかりポイント

Cloudflare Tunnelを利用しているとNginxの設定項目のうち証明書関連の部分が記述不要になるので、忘れずにそれをコメントアウトします。

基本的には以下の公式方法から引用して問題ありません。

Nginxの設定 | Misskey Hub

https://misskey-hub.net/docs/admin/nginx.html

文章でコメントアウト箇所伝えるのも大変なので、今回使ったやつを参考までに。

二個目の「server {」ブロックの冒頭をまとめてコメントアウトしています。

server {
    【ここを自分のドメインにする(example.tld)】 80;
    【ここを自分のドメインにする(example.tld)】 [::]:80;
    server_name 【ここを自分のドメインにする(example.tld)】; # 本番用FQDNに変更(default.ymlで設定したものと同様のもの)

    # For SSL domain validation (Let's EncryptのHTTPによる検証で必要であれば入れておいてください。)
    # root /var/www/html;
    # location /.well-known/acme-challenge/ { allow all; }
    # location /.well-known/pki-validation/ { allow all; }

    # HTTPからHTTPSへ変更するためのリダイレクト
    location / { return 301 https://$server_name$request_uri; }
}

server {
    #【ここを自分のドメインにする(example.tld)】 443 ssl http2;
    #【ここを自分のドメインにする(example.tld)】 [::]:443 ssl http2;
    #server_name 【ここを自分のドメインにする(example.tld)】; # 本番用FQDNに変更(default.ymlで設定したものと同様のもの)
    #ssl_session_cache shared:ssl_session_cache:10m;

    # To use Let's Encrypt certificate
    # ssl_certificate     /etc/letsencrypt/live/【ここを自分のドメインにする(example.tld)】/fullchain.pem; # 変更
    # ssl_certificate_key /etc/letsencrypt/live/【ここを自分のドメインにする(example.tld)】/privkey.pem; # 変更

    # SSL protocol settings
    ssl_protocols TLSv1.2 TLSv1.3; # 特に事情がなければTLSv1.2以降を有効にしておいてください
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA;
    ssl_prefer_server_ciphers on;

    # Change to your upload limit
    client_max_body_size 80m; # アップロードするファイルの上限を変える場合は変更

    # Proxy to Node
    location / {
        # Misskeyが作動しているローカルのアドレスに変更(ポートなどを弄ってなければそのままで可)
        proxy_pass http://【ここを自分のIPにして、ポートも記述(xxx.xxx.xxx.xxx:3000)】;
        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_http_version 1.1;
        proxy_redirect off;

        # For WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # Cache settings
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
        add_header X-Cache $upstream_cache_status;
    }
}

②Dockerで必要な処理を進める

そうしたら稼働していたDockerの方に行って必要なことをやっていきます。

細かく起動したり落としたりしてますが、compose.ymlにCloudflare Tunnelが記述されているので一気に起こすと外部から接続出来ちゃうためです。Cloudflareの方を先に変えちゃえばまとめて起こしてもいいのかも。

※私は作業の続行が不能になる致命的なトラブル時に、すぐに鯖のサービス提供を再開したかったので最後に変えました。

①docker compose downして平時のバックアップ手順を進める。

私はディレクトリごとtgzにして固めていました。

②Redis、DB、filesをそれぞれ外に出す。

Redis

まずRedisをバックアップします。

※Dockerが止まっているかを確認する(じゃないとメモリ上からダンプされないので)

dataディレクトリ内にある、Redisのストレージに移動します。置いてあるdump.rdbを確認して

cp dump.rdb /move/to/path/dump.rdb

DB

次に、DBをバックアップします。

docker compose up -d db

で起こして、

docker compose -f /etc/misskey/compose.yml exec -T db bash -c "pg_dump -Fc -U misskey -d misskey > /move/to/path/misskey_db_move.dump

でバックアップして、外に出します。

一応、

docker compose down

します。

files

最後にfilesを出します。

docker compose up -d misskey

で起こして

docker ps

でIDを確認して

docker cp <コンテナID>:/misskey/files files

でfilesを外に出します。正常になっているのかを確認して

cp -r files /move/to/path/

で飛ばします。

③各種レストア作業

そしたらいよいよ移行していきます。

Redisのレストア

Redisのレストアはダンプファイルを指定のところに置くだけです。

sudo sh -cx "cp /path/from/dump.rdb /lib/redis/dump.rdb"

普通のcpでないのは権限の関係でsudoが出来ないため。

強制的に注ぎ込むイメージで移動させます。

PostgreSQLのレストア

今回は

  • ユーザー:misskey
  • データベース:misskey

の場合です。それぞれ変えると好きに出来ます。

pg_restore -U misskey -d misskey misskey_db_move.dump

でデータベースを移行します。

filesの移行

これはただ移動させるだけで大丈夫です。

cp -r /path/from/files /path/to/misskey/

ですね。

④そしたらビルド等を進めていく。

一番注意しなければならないのは、

pnpm run init

のコマンドを打ってはいけないということ。

これはデータベースが初期化されるコマンドなので禁忌です。

これを飛ばして、ビルドを進めていきます。この先はまた、最初と同じく公式の解説記事通りです。

⑤おまけ

デーモンを作る時に、ちょっとだけ躓きました。

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target

これ、User=~~は実行中のUbuntuユーザーです。データベースのユーザーがmisskeyだとごっちゃになります。Ubuntuのユーザーにmisskeyを追加すれば良い話だけど、あまりUbuntuにユーザーを追加したくなかったので。

以上です。

全ての鯖缶に幸福を。

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