「業務用エアコンのエラーコード」はこちら

LinuxでMastodonインスタンスを立ち上げる

Mastodonは、2016年にドイツのプログラマーEugen Rochko(オイゲン・ロホコ)氏が立ち上げたSNS。オープンソースの分散型ソーシャルネットワークで、誰もがサーバーを立ち上げることができる。

Twitterとの違い

分散型ソーシャルメディア

Twitterが運営元企業が一元的に管理する中央集権型SNSに対して、マストドンは、誰でも自由にサーバー(インスタンス)を開設し、各開設者が管理者として独自のルールや利用規約を定めて運営することが出来る「分散型ソーシャルメディア」の形態をしています。
ユーザーは、既存の「インスタンス」と呼ばれるサーバーの中から自身の目的に合ったものを選ぶか、自らサーバーを立ち上げて、アカウントを作成・利用することが出来、管理者は自身のインスタンスを自由に操作することが可能。
ユーザーは1つのMastodonサーバでアカウントを作れば、基本的には、その他のMastodonサーバのユーザーの投稿を読むことができる(各インスタンスが連携して成り立っているMastodon(マストドン)をすべて利用できる)。

500文字まで投稿が可能

Twitterは140文字までの投稿となっているが、Mastodon(マストドン)は500文字までの投稿が可能となっている。
Twitterと同じようにメンションとハッシュタグがある。

タイムラインの違い
Mastodon(マストドン)にはユーザーの投稿が表示されるタイムラインは、3種類存在する。
自分および自分をフォローしているユーザーの投稿が流れる「ホーム」はTwitterと同様ですが独自にあるのは「ローカル」と「連合」です。
「ローカル」には自分がアカウントを取得したサーバ内のユーザー全員の投稿が表示される。
「連合」には所属するサーバーと繋がりのあるサーバーのユーザーの投稿がすべて表示されます。

Mastodonサーバー(インスタンス)構築

次の条件で構築する
・Linux : Ubuntu22.04
・Domain :独自ドメインを取得し、ローカルIPアドレスと紐づいている
・ルートユーザーで作業できる

1. 必要なパッケージインストール

2.Node.js インストール
Node.js リポジトリ追加

Node.js インストール

Yarns GPG キーを追加し、リポジトリを有効

3. PostgreSQL のインストール・設定
PostgreSQL インストール

PostgreSQL サービスを開始

PostgreSQL シェルにログイン

Mastodon 用のデータベース(mastodon)を作成

データベース ユーザー(mastodon)を作成

Mastodon ユーザーのパスワード(任意に決める)を設定

権限を設定

作成したユーザーを Mastodon データベースの所有者として設定

PostgreSQL シェルを終了

4. Rubyのインストール
Ruby バージョン 2.5 以降をインストールする

Ruby のバージョン確認

5. Mastodon のインストールと設定
Mastodon 専用ユーザー(mastodon)を作成

Git リポジトリから最新バージョンMastodon をダウンロード

ダウンロードしたMastodon ディレクトリを Mastodon 専用の /var/www/ ディレクトリに移動

Mastodon ディレクトリの所有権を mastodon に変更

/var/www/mastodon ディレクトリに移動し、最新のブランチをチェックアウト

Mastodon に必要な依存関係をインストール(Ruby,Rails)

Mastodon セットアップ ウィザードを実行

設定内容

ドメイン名を提供するように求められます。

Type application/netcdf is already registered as a variant of application/netcdf.
Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: [Domain name]
ドメイン名を入力し、Enter

シングルユーザーモードを有効にするよう求められます:
Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? No
No と入力し、Enter キー

Docker を使用して Mastodon を実行するよう求められます。
Are you using Docker to run Mastodon? No
no と入力して、Enter

PostgreSQL データベースの詳細入力
PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon
Name of PostgreSQL user: mastodon
Password of PostgreSQL user:xxxxxxx(PostgreSQLでデータベース、ユーザーを作成した時のパスワード)
PostgreSQL データベースの詳細を入力し、Enter

Redis サーバーの詳細を入力
Database configuration works! ????
Redis host: localhost
Redis port: 6379
Redis password:(空白)
Redis ホスト、ポートを入力し、パスワード を空白のままにして、Enter

ファイルをクラウドに保存するよう求められる
Redis configuration works! ????
Do you want to store uploaded files on the cloud? No
No と入力し、Enter

localhost からメールを送信するよう求められる
Do you want to send e-mails from localhost? Y
E-mail address to send e-mails "from": Mastodon <>
Send a test e-mail with this configuration right now? No
入力し、Enter

すべての構成を保存するよう求められる
This configuration will be written to .env.production
Save configuration? (Y/n) Y
Y と入力し、Enter

データベースを準備するよう求められる
Now that configuration is saved, the database schema must be loaded.
If the database already exists, this will erase its contents.
Prepare the database now? (Y/n) Y
Y と入力し、Enter

CSS/JS アセットをコンパイルするよう求められる
The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now? (Y/n) Y
Y と入力し、Enter

管理者パスワードを設定するように求められる
All done! You can now power on the Mastodon server ????
Do you want to create an admin user straight away? Y
Username: admin
E-mail:xxx@xxxxxx.jp
You can login with the password: 9835fbd5e569ad149610862178580da7
You can change your password once you login.
管理者のユーザー名と電子メールを入力し、Enter キーを押してインストールを完了する
電子メールとpassword: 9835fbd5e569ad149610862178580da7はMastodonにログインする際必要なので忘れないようにメモをしておく

6.Mastodon  daemon サービス ファイルの作成
Mastodon には、事前設定済みの 下記systemd ファイルがありますので、それらをサーバーの /etc/sysetmd/system/ ディレクトリーにコピーして利用する
・mastodon-sidekiq.service
・mastodon-streaming.service
・mastodon-web.service
一気にコピーする

Mastodon の作業ディレクトリを /home/mastodon/live/ から /var/www/mastodon/ に変更する

サービス ファイルで /home/mastodon/.rbenv/shims/bundle を /usr/local/bin/bundle に変更する

systemd をリロードして構成の変更を適用

Mastodon サービスの開始・有効

サービスの起動状況を確認

出力内容例

mastodon-web.service - mastodon-web
Loaded: loaded (/etc/systemd/system/mastodon-web.service; enabled; vendor >
Active: active (running) since Tue 2023-01-31 12:18:22 UTC; 16h ago
Main PID: 5049 (ruby3.0)
Tasks: 29 (limit: 2365)
Memory: 394.3M
CPU: 17.016s
CGroup: /system.slice/mastodon-web.service
tq5049 "puma 5.6.5 (tcp://127.0.0.1:3000) [mastodon]" "" "" "" "" >
tq5077 "puma: cluster worker 1: 5049 [mastodon]" "" "" "" "" "" "">
mq5953 "puma: cluster worker 0: 5049 [mastodon]" "" "" "" "" "" "">

Feb 01 01:55:02 lepard bundle[5077]: [c0947be0-4b4e-42ac-b352-14f48bb77146] met>
Feb 01 01:55:12 lepard bundle[5563]: [29b1d386-e8e9-43ba-a073-357e257b2b14] met>

mastodon-sidekiq.service - mastodon-sidekiq
Loaded: loaded (/etc/systemd/system/mastodon-sidekiq.service; enabled; ven>
Active: active (running) since Tue 2023-01-31 12:18:22 UTC; 16h ago
Main PID: 5047 (ruby3.0)
Tasks: 40 (limit: 2365)
Memory: 263.6M
CPU: 1min 26.504s
CGroup: /system.slice/mastodon-sidekiq.service
mq5047 "sidekiq 6.5.7 mastodon [0 of 25 busy]" "" "" "" "" "" "" ">

Feb 01 05:11:37 lepard bundle[5047]: 2023-02-01T05:11:37.831Z pid=5047 tid=2cwv>
Feb 01 05:11:37 lepard bundle[5047]: 2023-02-01T05:11:37.833Z pid=5047 tid=2cwv>
Feb 01 05:11:37 lepard bundle[5047]: 2023-02-01T05:11:37.833Z pid=5047 tid=2bz3>
Feb 01 05:11:37 lepard bundle[5047]: 2023-02-01T05:11:37.837Z pid=5047 tid=2bz3>

mastodon-streaming.service - mastodon-streaming
Loaded: loaded (/etc/systemd/system/mastodon-streaming.service; enabled; v>
Active: active (running) since Tue 2023-01-31 12:18:22 UTC; 16h ago
Main PID: 5048 (node)
Tasks: 18 (limit: 2365)
Memory: 88.7M
CPU: 1.766s
CGroup: /system.slice/mastodon-streaming.service
tq5048 /usr/bin/node ./streaming
mq5060 /usr/bin/node /var/www/mastodon/streaming

Mastodon はポート 3000 でリッスンするので3000ポートを開放する
firewalld Ufw等により開放する、今回はUfwを使う

確認

Nginx をリバース プロキシとして構成

1. Nginx をインストール

Nginx 仮想ホスト構成ファイルを Nginx ディレクトリにコピー

2. Mastodon 仮想ホスト構成ファイルを編集

編集内容

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

upstream backend {
server 127.0.0.1:3000 fail_timeout=0;
}

upstream streaming {
server 127.0.0.1:4000 fail_timeout=0;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;

server {
if ($host = ubuntu.korodes.com) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80;
listen [::]:80;
server_name ubuntu.korodes.com;
root /var/www/mastodon/public;
location /.well-known/acme-challenge/ { allow all; }
location / { return 301 https://$host$request_uri; }

}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ubuntu.korodes.com;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

# Uncomment these lines once you acquire a certificate:
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_certificate /etc/ssl/certs/ssl-cert-lion.pem; ←暫定的
ssl_certificate_key /etc/ssl/private/ssl-cert-lion.key;
 ←暫定的
keepalive_timeout 70;
sendfile on;
client_max_body_size 80m;

root /var/www/mastodon/public;

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;

location / {
try_files $uri @proxy;
}

3.Nginx のキャッシュ ディレクトリを作成

4. Nginx を確認

5. Lets Encrypt SSL 導入
Snap パッケージ マネージャーをインストール

Snap パッケージを最新バージョンに更新

Certbot パッケージをインストール

Certbot バイナリをシステムへシンボリック リンクを作成

Lets Encrypt SSL 証明書を取得

表示

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):[Mail address]


Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?


(Y)es/(N)o: Y


Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.


(Y)es/(N)o: Y

Account registered.
Requesting a certificate for [Domain name]

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/[Domain name]/fullchain.pem
Key is saved at: /etc/letsencrypt/live/[Domain name]/privkey.pem
This certificate expires on 2023-05-01.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for [Domain name] to /etc/nginx/conf.d/mastodon.conf
Congratulations! You have successfully enabled HTTPS on https://[Domain name]


If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le


マストドンにアクセス

任意のWeb で、URL https://[domain name] を入力すると下記のページが表示される
ログインをクリック

次のログイン情報入力画面になる
上記「5. Mastodon のインストールと設定」の「Mastodon セットアップ ウィザード」
の最後に設定した「メールアドレス」「パスワード」を入力し、ログインする

ログインに成功すると下記のようなMastodonダッシュボードが表示される
Mastodon を使用して、独自のソーシャル メディア ネットワークを作成してください


 

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