おひとり様Misskey鯖構築日記《7》
今回ものえるさんの記事を参考に進めていきます。
前回は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等のリバースプロキシが引き受けて、必要に応じてアプリケーションに転送する構成をとることが一般的です。
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キー)
上記から表示をクリックして取得しました。
重要情報なので、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の設定」からやっていきます。