カタカタカタ…💻 おや? Mastodon がまた注目されてる?
ん~……でもインスタンスは影響で重そうだねぇ……
んじゃインスタンスを建ててみれば良いかな。

少し前だと 1 台 Windows 10 を NAS 動作させていて、
それに Telnet BBS なんかも入れていたのですが、
この環境を Raspberry Pi 3 に変えたんですよね。
そうしたら月 1000 円も電気料金が安くなったので、
そのまま使ってたりします。💰😆
OS や Syncthing(Dropbox 代わり)は SSD、
バックアップ向けにハードディスクのハイブリッド仕様とか。
でも NAS や Syncthing 動作させていても、
メモリはまだまだ大丈夫な状態だったんですよね。

Raspberry Pi で動かせそうな気もするんだけど~……

カタカタ…💻

カタカタ…

…あ!

Pleroma

 Pleroma

使えるじゃないですか!ActivityPub で通信するなら
Mastodon や Misskey なんかともリモートできるじゃないですか!
軽そうだからこれで Raspberry Pi 動作できるんじゃないかな?

事務所の環境は IPoE にしたので、NAT はできなくなっているのですが、
 Tailscale で外初サーバを経由できるようにしてありました。

しかもたまたま無料のインスタンスを  Oracle Cloud Infrastructure (OCI) で立ち上げて、
2 ヶ月経過して、安定動作できる状態になっていたのでした。
何という事だ、環境が整っている…… 😳😆😅

んじゃ~構築してみますか!


Raspberry Pi へインストール

Raspberry Pi OS だから Debian 系ですね~。ここは OTP を使う手順でいきます。

 Installing on Linux using OTP releases

もちろん使えるよね?

arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix"

パシッ!

arm

あ~む、ぱくっ。(・~・)mogmog… ←何食べてるの?

純粋な Debian だとインストーラーの設定で
sudo が入らない場合があるから、
root で操作する説明書きをされているんですね。

Raspberry Pi OS は sudo が有効なので、

sudo su -

として書いてあるとおりに作業開始です。

apt install curl unzip libncurses5 postgresql postgresql-contrib nginx certbot libmagic-dev

apt install imagemagick ffmpeg libimage-exiftool-perl

systemctl restart postgresql

パッケージを入れて、Postgres を起動。
もしかして入っている可能性があるので restart なのですね。

adduser --system --shell  /bin/false --home /opt/pleroma pleroma

pleroma ユーザーを追加して……

export FLAVOUR="arm"

Raspberry Pi OS なので arm ですね。
あ~む、ぱくっ。(・~・)mogmog… ←だから何食べてるの?

su pleroma -s $SHELL -lc "
curl 'https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=$FLAVOUR' -o /tmp/pleroma.zip
unzip /tmp/pleroma.zip -d /tmp/
"

su pleroma -s $SHELL -lc "
mv /tmp/release/* /opt/pleroma
rmdir /tmp/release
rm /tmp/pleroma.zip
"

mkdir -p /var/lib/pleroma/uploads

chown -R pleroma /var/lib/pleroma

mkdir -p /var/lib/pleroma/static

chown -R pleroma /var/lib/pleroma

mkdir -p /etc/pleroma

chown -R pleroma /etc/pleroma

pleroma ユーザーでパッケージをダウンロードし、
必要なディレクトリを作成してます。
とりあえず uploads ディレクトリも OS が動いている SSD にして高速化する作戦。
実際のところ、画像は CDN か別の画像プロバイダを使おうと思っています。

ここまでドキュメントに記載どおりです。

su pleroma -s $SHELL -lc "./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql"

ここでドメイン名を訪ねてきました。

……実はこのブログも最近 balloon-jp.vercel.app と
🎈 Vercel の無料ドメインにしたばかりなのです。
有料ドメインを最近まで採用していたのですが、
自分に何か起きたら、ドメイン延長されずに参照できなくなっちゃうでしょう?
無料のドメインであれば、サービスがある限りは残るので。
その方が良いんじゃないかと思い切ってドメインを変えたのです。

という事で無料ドメイン 🎈 EU.org が気に入っているので、
balloon.net.eu.org にサブドメインを付ける事にしましょう。
う~ん……カチャカチャ… 💻 s.balloon.net.eu.org で良いかな。
もちろんここでネームサーバを設定しておきます。
🎈 Cloudflare は EU.org ドメインも扱えますからね。

それでは続きを行っていきます。

su postgres -s $SHELL -lc "psql -f /tmp/setup_db.psql"

su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"

su pleroma -s $SHELL -lc "./bin/pleroma daemon"

一度起動して動作確認ですね……

sleep 20 && curl http://localhost:4000/api/v1/instance

さすがに Raspberry Pi だと一度では参照失敗。
同じコマンドを再度叩いたら、JSON データかな? ズラズラ返ってきました。

su pleroma -s $SHELL -lc "./bin/pleroma stop"

直接起動は停止して……ここでは nginx の手順はいらないので、
サービスをインストールして自動起動できるようにします。

cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service

systemctl enable pleroma

systemctl start pleroma

Raspberry Pi OS はデスクトップ入りにしているので、
VNC から Chromium で https://localhost:4000/ で無事表示できる事を確認。
よしよし、良い感じですね。


CapRover からリバースプロキシして Raspberry Pi へ接続

OCI のインスタンスには CapRover を入れてあります。

……え? CapRover を知らない!!???

CapRover の画面

 CapRover

おかしいな~すでに 🎈 複合コンテンツ のところに
ページ作ってたから、みんな知ってると思ってたんだけどな~~~

🎈 CapRover | ふうせん🎈 FU-SEN

Docker ベースの PaaS というものなのですが……
🎈 Google Cloud Run とか、🎈 Fly とか、🎈 Railway とか、
最近 Heroku が無料プランの提供が終了します~っていうから、
えええ~~~!!!? 😳😨😭 って引越し先探した人は名前聞いたでしょ?
(いや、自分は Heroku そもそもまともに使ってないです。
公開サーバが US と EU でしたから……)
Dockerfile で FROM linuxserver/firefox とだけ入れて、
PORT 3000 番でデプロイするだけで、
Chrome からでも Firefox が中で動いてあら不思議~~~とかいうものですが
(これで 🎈 Chrome OS Flex からでも Firefox が使えたりしますが)
そんな話をしたいんじゃないの、CapRover の話をしなきゃ 😆

どうやらサーバインストール型の PaaS については
日本だと Dokku を選択している人が多いみたい。
でもそれだと Git 必須になってしまうし、
デプロイのために更に git push が必要じゃないですか。
CapRover だとシェル起動して
caprover deploy ってするだけでデプロイできちゃうんです。
GitHub とかだったら WebHooks に URL 入れるだけで
普通に git push すれば良いだけ~簡単~~~!!
……ああ、また話がずれちゃった 😆

で、実は CapRover の特徴として one-click apps というのがあって、
複雑な作業を行わずに簡単た~んにアプリが使えてしまう仕組みがあるんです。
なんかすっごいいっぱいあるから、ここリンクしておくから、探索してみてよ~。

 Caprover one-click apps browser

なんとこの one-click apps に……

Nginx Reverse Proxy

Nginx Reverse Proxy があるのです。

Nginx Reverse Proxy の初期設定

よし、ここに項目を入れていく~。

「App Name」はわかる名前でいいよね~。
ドメイン名を元に s-balloon-net-eu-org でもいいし、
Pleroma-Proxy でもいい。ただし数字が使えないので注意。

「Version」はそのままで良し。

「Upstream address」、ああ、プロキシ先のアドレス。ここ重要ね。
すでに OCI のインスタンスは Tailscale を入れてあるので、
Raspberry Pi 3 は 192.168.●.● とは別に
Tailscale のアドレス 100.●.●.● というアドレスがあります。
これは Tailscale をインストールしている環境だけで参照ができます。
その IP アドレスで今回が入れます。ポート番号は 4000 なので、
http://100.●.●.●:4000 となります。

うん。あとはそのままで良い。これだけ。

デプロイしたら、ドメイン s.balloon.net.eu.org を追加して、
https 有効にして、(🎈 Let’s Encrypt を CapRover レベルで発行します)
これで見れるはずだ。簡単~~!

……あれ? 表示されないぞ? 😅😨😆


ちょこっとだけ細かい設定

パソコンから Raspberry Pi へ http://192.168.●.●:4000/ としたら、
わかるんじゃないかな? カタカタ… 💻 あ、エラーだ。
という事は…… Pleroma のデフォルトが 127.0.0.1 限定になってるんじゃないかな?

検索して、設定画面に入ります。
ここではまだ root になっている前提なので、 sudo なしですよ~。

nano /etc/pleroma/config.exs

あ~~……

config :pleroma, Pleroma.Web.Endpoint,
  url: "s.balloon.net.eu.org",
  http: [ip: {127, 0, 0, 1}, port: 4000]

当たりました~~~ 😁

config :pleroma, Pleroma.Web.Endpoint,
  url: "s.balloon.net.eu.org",
  http: [ip: {0, 0, 0, 0}, port: 4000]

0.0.0.0 とする事で、どこからでもアクセスできるようにします。
それでも Raspberry Pi へのアクセスはローカルと Tailscale 経由のみなので、
自分の環境ならば、これでも大丈夫と。

ドキュメントでは Pleroma と同じ環境で nginx を入れてあるので、
127.0.0.1 のままで参照できるんですよね。
バックとフロントが異なる環境の場合は、ここ、注意が必要です。

Ctrl + X で終了して、Y で保存して

systemctl restart pleroma

https://s.balloon.net.eu.org/ パシッ。よっし、いった~~~!!

オイラの Pleroma インスタンス動作開始~~~ 👏パチパチパチ…

s.balloon.net.eu.org

🎈 s.balloon.net.eu.org 🎈🦊 ふうせん ぷれろま

🎈 @balloon@s.balloon.net.eu.org

こうして ふうせん🎈 FU-SEN は早速 Pleroma への投稿をはじめるのであった。
めでたし、めでたし。

……あ、 s.balloon.net.eu.org は
登録を受け付けないお一人様インスタンスとなっています。
Pleroma 以外に Mastodon、 Misskey などを使っていれば、
そちらからもリモートフォローできますからね。

それにしても約 2 年ぶりのブログ更新。
それでも 🎈 複合コンテンツ がいろいろ動いてたり、
🎈ふうせん🎈 FU-SEN 📒 メモ という、
複合コンテンツで扱うまででもない情報をまとめている Wiki ができたり、
こっそり動かしていたりはするんですけどね。

……感染? いや、ほとんどパソコンの前に居たから、
他の人と接触していない時間だったら日本で上位に入るんじゃないか?
という位の生活を過ごしていたおかげで、😆😆😆
元気な体のまま過ごしていましたよ。
でも運動不足だからどこかでかけないと~~ 😆
そろそろお店のオープンとかで風船プレゼントとかが出てきているので、
風船をゲットしつつ、いろいろしたいな~と考えている
今日この頃なのであります 🎈😍


追加 2022/11/23

Pleroma インスタンスに限った事ではありませんが、

Raspberry Pi を用いて長期的に運用したい場合は、
SD カードの代わりに USB 接続の SSD を使用する事を強くおすすめします。

Raspberry Pi 3 B/B+・4・400 は USB からの起動が可能です。
ブログで「1 ヶ月位経過して動作しなくなった」というのを見るのですが、
おそらく SD カードのデータ破損です。

また、特にメモリが 1GB しかない Raspberry Pi 3 B/B+ では、
swap を大きめに設定し、メモリ自体も zram で圧縮するようにすると
メモリ使用量を減らして少しでも快適に動作するでしょう。
これは安値の VPS を使用する場合も同様に
メモリ使用量を減らせるようにすると効果的です。


追加 2022/11/24

もっと大事な話をするのを忘れていましたよ! 😆

 Caprover one-click apps browser

CapRover の one-click apps に……

Mastodon

Mastodon があります。

ええ、CapRover をサーバにインストールしておくと、
簡単操作で Mastodon インスタンスもインストールできて
使えるようになってるんです。
(自分は流行とは別にこれがきっかけで Mastodon を認識しはじめていました)

ただし、Mastodon は Pleroma より高スペックを要求するので、
インストールする前に適切な環境か確認して下さい。

CapRover Slack #general 内 | Slack

CapRover の Slack でも開発者の Kasra さんが話題を出していました。
「でも要求スペックが高いので、Pleroma が入ると良いかも。
日本では Misskey も好まれてますよ~」とコメントを入れておきました。
もしかしたら、もしかするかもしれません。