mastodonをインストールできる状態まで作業するのはホント長く辛い道のりでした。
自分がWebサイトを制作する環境づくりとして幾度かLAMP環境を整えてきましたが、それはApache、MySQL、PHPの三つを主にインストールしてきたために、少しは出来る方だと思ってましたが非常に甘い認識でした。
恐らく外部サーバーに構築する場合はさらに難易度高めの構築作業が発生するんだろうと思ってますが、それを行うかどうかはTwitterの今後の発展をみて考えようかと思いますw
さて、前回でようやくインストールまで行えました。
ここからはブラウザに表示するまでの情報設定や機能設定を行っていきます。ここも何度を変更し、失敗ややり直しを繰り返して来ました。
Webサイト構築をかじった程度の人間には無理だろうとも思い諦めてしまいそうになりましたが、表示したときは本当にうれしかったので、今も挑戦中で同じように悩んでいる方に少しでも参考になる情報を共有出来たらと思います。
では、ここからはインストール後の設定変更作業を説明していきたいと思います。
前回と同じく説明方法の引用は「LinuxBabe」さんからになります。
LinuxBabe
https://www.linuxbabe.com/ubuntu/how-to-install-mastodon-on-ubuntu
serviceファイルをコピー
sudo cp /var/www/mastodon/dist/mastodon*.service /etc/systemd/system/
sudo sed -i 's/home\/mastodon\/live/var\/www\/mastodon/g' /etc/systemd/system/mastodon-*.service
sudo sed -i 's/home\/mastodon\/.rbenv\/shims/usr\/local\/bin/g' /etc/systemd/system/mastodon-*.service
環境の読み直し
sudo systemctl daemon-reload
常時起動設定
sudo systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
起動しているか確認
sudo systemctl status mastodon-web mastodon-sidekiq mastodon-streaming
私の場合、何度も起動に失敗していました。なぜかいつもその原因はmastodon-streaming。
× mastodon-streaming.service - mastodon-streaming
Loaded: loaded (/etc/systemd/system/mastodon-streaming.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2022-12-20 13:18:48 JST; 7min ago
Main PID: 9306 (code=exited, status=1/FAILURE)
CPU: 392ms
faildにより起動しておらず、ブラウザにURLを入力するも画面は真っ白な状態。エラー確認は以下の方法で行いました。
sudo journalctl -u mastodon-streaming
status よりももう少し多めにエラーログ確認ができた記憶があります。内容を確認するとNodejsに関する表示が多かったために、Nodejsが悪いのか?と疑問に思いバージョン確認するとv18にアップしていました。
最新状態が良いのだろうと自分の判断でNodejsをアップグレードにしてしまったことが間違いだったんでしょう。
mastodonはv18はまだ未対応との情報がいくつかあったため、アンインストールし、再度v16を入れなおしたんですが、それでも上手くいかず、mastodoインストール編を1からやり直しということになりました。
インストール作業は推奨するバージョンなどがありますので、自身の無い方は自分発進の考えでの作業はひとまず控えておいた方が良さそうです。
ポート番号3000確認
sudo ss -lnpt | grep 3000
もし3000を別が使っていればmastodonが使う番号に設定変更
sudo vi etc/systemd/system/mastodon-web.service
Environment="PORT=3000"
設定読み直しmastodon-webをリスタート
sudo systemctl daemon-reload
sudo systemctl restart mastodon-web
前々回でWebサーバー「Nginx」をインストールしたと思うので、mastodonの情報をNginxに加えていきます。
ファイルをコピー
sudo cp /var/www/mastodon/dist/nginx.conf /etc/nginx/conf.d/mastodon.conf
コピーしたmastodon.confを編集していくんですが、このファイルの中にSSLを設定する場所があります。
その為に、まずはSSLの情報を先に準備しましょう。
SSL設定
ネット上にインストール紹介されている方の中で、以前はSSL無しでも可能だったような記事がいくつかありましたが、現在はそのような設定をする項目を探しきれませんでした。もしかすると自身で項目を追加すれば良いのかも知れませんが、私が情報にあるような内容を追加して再読み込みすると反映しませんでした。
外部のSSLを契約するのに有料はちょっと・・・。
無料のSSLサービスもあるそうなんですが、ローカル構築で設定可能なの?とも疑問があり、契約などの作業も・・・。
調べるとローカルサーバーで疑似的なSSLが組めるんだそう。そう、サーバーなのだからサーバー自身でセキュリティを組めばいい、そんな発想だと思います。
ネット上では俗に「オレオレSSL」と呼ぶんだそうです。何かちょっと怖いw
ではでは、ローカルにSSL発行してくれるシステム構築していきましょう。
参考は以下のサイトから引用します。感謝いたします!
https://rikuga.me/2017/12/24/oreore-ca-and-ssl-cert/
作業はrootユーザーに変更したほうが良さそうでした。作業ディレクトリにパーミッションの関係で作業が出来なかったエラーが発生したためです。
sudo apt -y install openssl
以下のコマンド作業はrootユーザーに切り替わって行った方が良いかも知れません。sudoではパーミッションにより出来なかった箇所がありました。
cd /home
sudo mkdir demossl
cd demossl
sudo mkdir demoCA
sudo touch demoCA/index.txt
sudo echo 00 > demoCA/serial
localhost版
認証局の秘密鍵作成
openssl genrsa -out ./ca.key 2048
認証局のCSR作成
openssl req -new -key ca.key -out ca.csr -subj '/C=JP/ST=Tokyo/L=Shibuya-ku/O=Oreore CA inc./OU=Oreore Gr./CN=Oreore CA'
認証局のCSRに署名して証明書作成
openssl x509 -days 3650 -in ./ca.csr -req -signkey ./ca.key -out ca.crt
鍵作成
openssl genrsa -out localhost.key 2048
CSR作成
openssl req -new -key localhost.key -out localhost.csr -subj '/C=JP/ST=Tokyo/L=Tokyo/O=Oreore CA inc./OU=example Gr./CN=localhost'
SSL証明書作成
yes | openssl ca -config <(cat /usr/local/etc/openssl/openssl.cnf <( printf "\n[usr_cert]\nsubjectAltName=DNS:localhost,DNS:localhost,DNS:localhost")) -keyfile ./ca.key -outdir ./ -cert ca.crt -in localhost.csr -out localhost.crt -days 3650
※cat: /usr/local/etc/openssl/openssl.cnf: そのようなファイルやディレクトリはありません
上記のようなメッセージが出る
ドメイン版
認証局の秘密鍵作成
openssl genrsa -out ./ca.key 2048
認証局のCSR作成
openssl req -new -key ca.key -out ca.csr -subj '/C=JP/ST=Tokyo/L=Shibuya-ku/O=Oreore CA inc./OU=Oreore Gr./CN=Oreore CA'
認証局のCSRに署名して証明書作成
openssl x509 -days 3650 -in ./ca.csr -req -signkey ./ca.key -out ca.crt
鍵作成
openssl genrsa -out 192.168.0.20.key 2048
CSR作成
openssl req -new -key 192.168.0.20.key -out 192.168.0.20.csr -subj '/C=JP/ST=Tokyo/L=Tokyo/O=Oreore CA inc./OU=192.168.0.20 Gr./CN=192.168.0.20'
SSL証明書作成
yes | openssl ca -config <(cat /usr/local/etc/openssl/openssl.cnf <( printf "\n[usr_cert]\nsubjectAltName=DNS:192.168.0.20,DNS:192.168.0.20,DNS:192.168.0.20")) -keyfile ./ca.key -outdir ./ -cert ca.crt -in 192.168.0.20.csr -out 192.168.0.20.crt -days 3650
これでdemosslに出来た各ファイルのうち、00.pemとlocalhost.keyを/etc/ssl/certs内にprivateディレクトリを作成して、このディレクトリにコピーします。
sudo mkdir /etc/ssl/certs/private
cp /home/demossl/ca.key /etc/ssl/certs/private/ca.key;
cp /home/demossl/ca.crt /etc/ssl/certs/private/ca.crt;
これでSSLの準備は完了しましたので、nginxに関するファイルを編集していきたいと思います。
mastodon.confを編集
sudo vi /etc/nginx/conf.d/mastodon.conf
サーバー名を登録
server_name example.com;
↓
server_name 192.168.0.20;
外部公開する場合はここにドメインを登録すると思います。localhostではホストからの接続は出来ませんでした。
ドキュメントルートを変更
root /home/mastodon/live/public;
↓
root /var/www/mastodon/public;
mastodonの移行先が今までの情報通りに進めればこの内容で大丈夫と思いますが、もし/var/www/よりさらにディレクトリ作成してオリジナルにした場合はパスをご自身で確認して任意のパスに変更してください。
コメントを外し、SSLのキーがあるパスに変更
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
↓
ssl_certificate /etc/ssl/certs/private/ca.crt;
ssl_certificate_key /etc/ssl/certs/private/ca.key;
nginxのキャッシュフォルダを作成
sudo mkdir -p /var/nginx/cache/
構文チェック
sudo nginx -t
入力内容に問題が無ければ「syntax is ok」という文字が表示し、最後に「test is successful」と表示されるハズです。間違いがあれば何行目に問題があると指示がでますので、OKが出るように慎重にチェックしましょう。
nginx設定再読み込み
sudo systemctl reload nginx
ここまで設定が終了したら、ブラウザで確認してみましょう。
サーバーネームはIPアドレスで登録したと思いますので以下のURLを入力します。
https://192.168.0.20/
こちらでmastodonのデフォルト画面が表示すれば成功です。表示するまでは本当にドキドキしました。何度も表示しないとかサーバーと繋がらないとか何かと正常表示しなかっただけに、ロゴマークが表示されただけでとても嬉しい感情は今でも覚えています。
もし表示しなければ以下の点を確認してください。
Firewallで制御されていないか サーバー以外のデバイスからpingを送ってみる ufwの無効化をチェックする 必要な機能が稼働しているか PostgreSQL、Ngign、mastodon-web、mastodon-sidekiq、mastodon-streamingをstatusでActiveになっているか確認 mastodon.confの設定情報に誤りはないか サーバーネームに設定したIPアドレスをチェック rootのパスが間違っていないかチェック
ようやくここきて表示したときは感動ものだと思います。本当に長い。
ただ、あくまでこれはローカル環境で構築したもの。
外部サーバーで構築する場合はドメインの取得やレンタルサーバーの契約、セキュリティの構成など色々とさらに作業が増えるでしょうし、使用するたびにたまるデータの管理もしなければと思うとちょっと考えますねw
それではこの辺で。お疲れ様でした。