大体おんなじ毎日

エンジニアじゃないけど技術ブログ書いています

おひとり様Misskey鯖構築日記《7》

今回ものえるさんの記事を参考に進めていきます。

blog.noellabo.jp

前回はMisskeyのビルド後にデータベースを初期化するところまで終えました。

今回は「systemdの設定」からやっていきます。

Misskeyをサービスとして起動するための、systemdのユニットファイルを設定します。

sudo nano /etc/systemd/system/misskey.service

下記の内容を記述します。

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/home/misskey/.nodenv/shims/yarn start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target

ユニットファイルの変更を反映(daemon-reload)し、有効に(enable)し、実行(start)します。

sudo systemctl daemon-reload
sudo systemctl enable misskey
sudo systemctl start misskey

停止する場合はstop、開始がstart、再起動がrestartです。

Misskeyのバージョンアップの際などに、マイグレーション前に停止し、マイグレーション後に開始する、などの操作を行います。

nginx(リバースプロキシ)

Misskeyは、それ自身がWebサーバとしての機能を備えていますが、こうしたWebアプリケーションでは、外部からのアクセスを一度nginx等のリバースプロキシが引き受けて、必要に応じてアプリケーションに転送する構成をとることが一般的です。

ufwhttps接続を許可する

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

証明書

certbotを使って取得・更新します。

まず、certbotと、cloudflare用のDNS認証を自動化するプラグインをインストールします。

sudo apt install certbot python3-certbot-dns-cloudflare

cloudflareにプログラムから必要な指示を行うため、IDとなるメールアドレスと、APIのキーを設定したファイルを作成します。

cd /etc/letsencrypt
sudo nano .cloudflare_credentials

ファイルの内容に、cloudflareで登録したメールアドレスと、取得したAPIのキーを設定します。

dns_cloudflare_email = (Cloudflareに登録したメールアドレス)
dns_cloudflare_api_key = (Cloudflareで取得したAPIキー)

f:id:crim0404:20211111174517p:plain

上記から表示をクリックして取得しました。

重要情報なので、rootだけが見られるようにアクセス権を設定します。

sudo chmod 600 .cloudflare_credentials

certbotコマンドに--dry-runオプションをつけて動作を確認します。

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials .cloudflare_credentials -d (Misskeyを設置するドメイン名) -d (オブジェクトストレージのバケット名.ドメイン名) -m (証明書が切れた時の連絡用メールアドレス) --manual-public-ip-logging-ok --agree-tos --no-eff-email --dry-run

問題ないようであれば--dry-runをはずし、実際に取得を行います。

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials .cloudflare_credentials -d  (Misskeyを設置するドメイン名)  -d (オブジェクトストレージのバケット名.ドメイン名) -m (証明書が切れた時の連絡用メールアドレス) --manual-public-ip-logging-ok --agree-tos --no-eff-email

certbotでは、証明書の更新が実際に行われた場合にだけ実行するスクリプトを定義しておくことができます。

nginxなどは、証明書が更新されても、nginxに再読込を指示しないと、古い証明書の内容をいつまでも覚えていて実際に新しい証明書が使用されません。

自動的に証明書などが再読込されるように設定しておきます。

sudo nano renewal-hooks/deploy/reload.sh

下記の通りに記述します。

#!/bin/bash
systemctl reload nginx

これに実行権を設定しておきます。

sudo chmod +x renewal-hooks/deploy/reload.sh

証明書の有効期限が1ヶ月を切ると、取得の際に使ったバラメータに基づいて再取得が行われ、nginxのreloadが行われて、新しい証明書が使われるようになります。

証明書の取得に失敗した場合、設定した連絡用メールアドレスに期限が迫っている旨のメールが届くのですぐに対処してください。

今回はここで終わりにします。

次回は「nginxの設定」からやっていきます。