2023年9月21日 - @room_nb@log.nyaight.meの投稿 -

06:00:34

という訳で建てた理由と、建てた際の手順や情報を記録したいと思います。

私、にゃいとはざーど(@Nyaight_Hazard@misskey.io)がFediverseの海に漂いNヵ月、買ったドメインを活用するためにおひとり鯖でも建てよう、と思いまして。 軽量でかつ私の肌に合うような...そう、レトロチックなブログのようなものがあれば...
「そんなものあるの?」

ありました。

名をMicroblogPubと言い、一人用ブログでありながらActivityPubサーバーでもあり、そして超軽量で小型VPSでも動く。そして何より見てください、この公式ブログどシンプル!一周回ってクリーン!そしてHTMLソースそのものも弄れるカスタマイズ性もある…
ということで出来たのがこのサーバーでございます。

このブログはサイトから直接閲覧する、あるいは、@room_nb@log.nyaight.meで参照するかこのリンクから他サーバーのアカウントと同様にフォローすることができます。とはいえブログなので本垢より個人的なものが多くなりますが、よろしければぜひ。

さて、ここからが本題。先駆者が記録を残してはいたんですが、色々と仕様が変わっていたのと、始めてサーバーを触ったので、知識共有の為に書き起こそうと思います。

献立

用意するもの:
自分のドメイン(今回はlog.nyaight.me)
 文中のlog.nyaight.meの部分は適宜自分のドメインに置き換えてください。
Cloudflareアカウント
 ネームサーバーとして。ネームサーバー以外の機能も色々と便利で、今回はSSL証明書を用いる。
クレジットカード
 VPSや自宅鯖が有れば不要、無料で鯖建てたいなら。ただし、プリペイド式は弾かれるのでクレジット式かデビット式のを用意しよう。
Linux/Ubuntuコンソール操作の知識
 一番大事かもしれない。太文字にしたキーワードを調べれば大体引っ掛かるので頑張れ。
これらからすること:
Oracle Cloudアカウントの作成
無料のVPSの作成(VM.Standard.E2.1.Micro)
Docker,DockerComposeのインストール
MicroblogPub,Caddy2のセットアップ
・その後について

Oracle Cloudアカウントの作成

こちらからOracle Cloudの登録をしましょう。登録すると、永続無料のAlways Freeサービスと、30日間の$300分の無料トライアルが使えます。今回使うのはAlways Freeの部分のみですが、登録した瞬間から$300の有効期限が減るので試したい方は注意してください。

登録に割と手間がかかります。
・名前は名→姓の順
・Customer typeはIndividual(個人)を選ぶ
・部門名は必須なので適当に(Hobbyとか)
・住所行1には市区町村より先の住所を入力
・注意があるように、ホーム・リージョンにJapan East (Tokyo)を選ばないように。Japan Central (Osaka)でも選んでおこう。
・電話番号は先頭のゼロ抜きで入力
・クレジットカードが必須ですが、プリペイド式は弾かれます。

無料VPSの作成

こちらの記事の「インスタンス(サーバー)にSSHで接続する」の項まで沿えば大体OKです。
・Always Free対象のマシンはVM.Standard.E2.1.Micro[1台]とVM.Standard.A1.Flex[スペック可変]。
 詳細は公式ドキュメントに書いてますが、E2.1.MicroよりA1.Flexの方がスペックが良いです、、MicroblogPubは大したスペックは要求しないので(他の用途にA1.Flexを温存するために)E2.1.Microを選びます
SSHキーの秘密キー保存を忘れないこと!!
 サーバーに入れなくなります!!
IPv6に対応したい場合、この辺を参考に組みましょう:
 ・公式ドキュメント:IPv6対応VCNの設定
 ・OCIの潤沢な無料枠でIPv6対応のWireGuard VPNをたてる

Docker,DockerComposeのインストール

ここから先は、先程保存した秘密鍵を使ってSSH接続したコンソールで操作を行います。SSHコマンドが使えるコンソールなら何でもいいですが、分からないならPowerShellを用いましょう。私は手元にあったGit Bashを使いました。

Docker公式手順にあるコマンドをコピペして実行すれば大体OKです。
Dockerのインストール手順
 sudo docker run hello-worldの所で失敗した場合、dockerのサービスが起動してません。sudo service docker startを唱えてから再試行しましょう。
Docker Composeのインストール手順

MicroblogPubのセットアップ

いよいよもって、ようやく、MicroblogPubを建てます。

事前々準備:


# 管理人として実行
sudo -s
# 作業用フォルダに移動
cd /usr/local/bin

Swapメモリを作成: メモリが圧迫しきるとサーバーが止まってしまうので、追加のメモリ容量を作る。特にE2.1.Microは低スペックなので多めに取る。(参考資料)


# Swapメモリ用領域の作成(4GB)
dd if=/dev/zero of=/swapvol bs=1M count=4096
chmod 600 /swapvol
# Swap設定
mkswap /swapvol
swapon /swapvol
# Swapメモリがあることを確認
free

このままだと再起動時にSwapメモリが付かない為、festabファイルをnanoエディタで追記する。nano /etc/fstabを唱え、最下行に/swapvol swap swap defaults 0 0を追記して保存する。

MicroblogPubのインストール: 大体公式ガイドのまんま。初回make buildする際割と待つ。make configのウィザードはメッセージに従って入力すればOK。


git clone https://git.sr.ht/~tsileo/microblog.pub log.nyaight.me
cd log.nyaight.me
chmod -R 777 ./
make build
make config

プロファイルの編集: nano data/profile.tomlを唱える。設定できる項目は公式ガイド参照。インストール手順にあるtrusted_hosts = ["*"]を加えるのを忘れないこと。私の場合次のようになった:


https = true
trusted_hosts = ["*"]
secret = "***********"
admin_password = "***********"
domain = "log.nyaight.me"
username = "room_nb"
icon_url = "https://log.nyaight.me/static/res/icon.png"
image_url = "https://log.nyaight.me/static/res/header.png"
name = "room#N/B log."
summary = "ActivityPubに向けてログを配信中...(省略)"
metadata = [
  {key="🔗Links", value = "[links.**nyaight.me**/portal](https://links.nyaight.me/portal)"},
  {key="📡Admin", value = "[**@Nyaight_Hazard**@misskey.io](https://misskey.io/@Nyaight_Hazard)"},
]
hides_following = true

アイコンとヘッダーのhttps://log.nyaight.me/static/...については、どうやらapp/static下にあるファイルがそのままサイトに転写されているようなので、それを利用しました。

Caddy2のセットアップ

さて、このまま単体ではネットに届かない為、MicroblogPubとネットの橋渡し役となるCaddy2を導入します。今回はCloudflare用のプラグインがセットとなったiarekylew00t/caddy-cloudflareを利用します。これを用いることで、CloudflareのDNSレコードやSSL証明書を連携することが出来ます。

先ずnano docker-compose.ymlを以下の内容で上書きしDockerの構成にCaddyを追加する。(参考資料)


version: "3.9"

services:
  caddy:
    image: iarekylew00t/caddy-cloudflare:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./site:/srv
      - caddy_data:/data
      - caddy_config:/config

  server:
    image: microblogpub/microblogpub:latest
    container_name: microblogpub
    user: 1000:1000
    restart: always
    volumes:
      - ./data:/app/data
      - ./app/static:/app/app/static
    ports:
      - "8000:8000"

volumes:
  caddy_data:
  caddy_config:

次にCloudflareのAPIトークンが必要なので取ってくる。
Cloudflare ユーザー API トークン
→トークンを作成
→カスタム トークンを作成する
→アクセス許可に
・ゾーン>ゾーン>読み取り
・ゾーン>DNS>編集
 を追加して[概要に進む]→[トークンを作成]
→APIトークンをメモにとる

そしてnano Caddyfileで以下のようにCaddyの構成を書く。


https://log.nyaight.me {
	tls {
		dns cloudflare (APIトークンをココに貼る)
	}
	reverse_proxy microblogpub:8000
}

正しく構成できていれば、docker compose up -dを唱えて数分待てばウェブから接続出来るようになります。
お疲れ様でした。

その後について

さてこれで終わりかと言えばそうでもありません。サーバーをちゃんと維持できるようにしたり、中身を改造したりしています。私がした工夫として、
nano /home/ubuntu/.bashrc: SSH接続時に自動でフォルダ移動する
nano /etc/rc.local: 再起動時にMicroblogPubとCaddyを自動で起こす
crontab -e: 週2回Dockerのクリーンアップdocker system prune --volumes -fと再起動rebootをする
 ・CRONの時刻が日本時間になるようにtzselectで変更
・VSCodeからサーバーの中身を弄れるようにする(資料1)(資料2)
独自GithubレポジトリでMicroblogPubの中身を管理
 ・その際パーミッションの変更Caddyfileとdocker-composeを反映しないように

このMicroblogPubはまだまだ改造しがいがありそうなので取り組んで行きたいと思います。それはそれとして普通のブログとしても運用していきたいね。
では。

microblog.pub - A self-hosted, single-user, ActivityPub powered microblog.
Remote follow room#N/B log.
Oracle Cloud Infrastructure Always Freeを使ってタダでMisskeyインスタンスを立てよう | aqz/tamaina
Linux Swap設定方法(CentOS 7)
microblog.pub - A self-hosted, single-user, ActivityPub powered microblog.
microblog.pub - A self-hosted, single-user, ActivityPub powered microblog.
GitHub - IAreKyleW00t/docker-caddy-cloudflare: The official Caddy Docker image built with the Cloudflare DNS module
Keep Caddy Running - Caddy Documentation
Visual Studio Code で Remote SSH する。 - Qiita
Visual Studio CodeでLinux ホストリモート開発 - Qiita
GitHub - NyaightHazard/log.nyaight.me: The custom edition of MiroblogPub: an ActivityPub powered microblog.
Git でファイルパーミッションの変更(chmod)を無視する - git config core.filemode false
06:03:13

Article 鯖建て時の記録を書きました。いや~大変だった。
でもこの分量書けるのは個人ブログだからこそよにゃ。

2023-09-21 06:00:34

という訳で建てた理由と、建てた際の手順や情報を記録したいと思います。

私、にゃいとはざーど(@Nyaight_Hazard@misskey.io)がFediverseの海に漂いNヵ月、買ったドメインを活用するためにおひとり鯖でも建てよう、と思いまして。 軽量でかつ私の肌に合うような...そう、レトロチックなブログのようなものがあれば...
「そんなものあるの?」

ありました。

名をMicroblogPubと言い、一人用ブログでありながらActivityPubサーバーでもあり、そして超軽量で小型VPSでも動く。そして何より見てください、この公式ブログどシンプル!一周回ってクリーン!そしてHTMLソースそのものも弄れるカスタマイズ性もある…
ということで出来たのがこのサーバーでございます。

このブログはサイトから直接閲覧する、あるいは、@room_nb@log.nyaight.meで参照するかこのリンクから他サーバーのアカウントと同様にフォローすることができます。とはいえブログなので本垢より個人的なものが多くなりますが、よろしければぜひ。

さて、ここからが本題。先駆者が記録を残してはいたんですが、色々と仕様が変わっていたのと、始めてサーバーを触ったので、知識共有の為に書き起こそうと思います。

献立

用意するもの:
自分のドメイン(今回はlog.nyaight.me)
 文中のlog.nyaight.meの部分は適宜自分のドメインに置き換えてください。
Cloudflareアカウント
 ネームサーバーとして。ネームサーバー以外の機能も色々と便利で、今回はSSL証明書を用いる。
クレジットカード
 VPSや自宅鯖が有れば不要、無料で鯖建てたいなら。ただし、プリペイド式は弾かれるのでクレジット式かデビット式のを用意しよう。
Linux/Ubuntuコンソール操作の知識
 一番大事かもしれない。太文字にしたキーワードを調べれば大体引っ掛かるので頑張れ。
これらからすること:
Oracle Cloudアカウントの作成
無料のVPSの作成(VM.Standard.E2.1.Micro)
Docker,DockerComposeのインストール
MicroblogPub,Caddy2のセットアップ
・その後について

Oracle Cloudアカウントの作成

こちらからOracle Cloudの登録をしましょう。登録すると、永続無料のAlways Freeサービスと、30日間の$300分の無料トライアルが使えます。今回使うのはAlways Freeの部分のみですが、登録した瞬間から$300の有効期限が減るので試したい方は注意してください。

登録に割と手間がかかります。
・名前は名→姓の順
・Customer typeはIndividual(個人)を選ぶ
・部門名は必須なので適当に(Hobbyとか)
・住所行1には市区町村より先の住所を入力
・注意があるように、ホーム・リージョンにJapan East (Tokyo)を選ばないように。Japan Central (Osaka)でも選んでおこう。
・電話番号は先頭のゼロ抜きで入力
・クレジットカードが必須ですが、プリペイド式は弾かれます。

無料VPSの作成

こちらの記事の「インスタンス(サーバー)にSSHで接続する」の項まで沿えば大体OKです。
・Always Free対象のマシンはVM.Standard.E2.1.Micro[1台]とVM.Standard.A1.Flex[スペック可変]。
 詳細は公式ドキュメントに書いてますが、E2.1.MicroよりA1.Flexの方がスペックが良いです、、MicroblogPubは大したスペックは要求しないので(他の用途にA1.Flexを温存するために)E2.1.Microを選びます
SSHキーの秘密キー保存を忘れないこと!!
 サーバーに入れなくなります!!
IPv6に対応したい場合、この辺を参考に組みましょう:
 ・公式ドキュメント:IPv6対応VCNの設定
 ・OCIの潤沢な無料枠でIPv6対応のWireGuard VPNをたてる

Docker,DockerComposeのインストール

ここから先は、先程保存した秘密鍵を使ってSSH接続したコンソールで操作を行います。SSHコマンドが使えるコンソールなら何でもいいですが、分からないならPowerShellを用いましょう。私は手元にあったGit Bashを使いました。

Docker公式手順にあるコマンドをコピペして実行すれば大体OKです。
Dockerのインストール手順
 sudo docker run hello-worldの所で失敗した場合、dockerのサービスが起動してません。sudo service docker startを唱えてから再試行しましょう。
Docker Composeのインストール手順

MicroblogPubのセットアップ

いよいよもって、ようやく、MicroblogPubを建てます。

事前々準備:


# 管理人として実行
sudo -s
# 作業用フォルダに移動
cd /usr/local/bin

Swapメモリを作成: メモリが圧迫しきるとサーバーが止まってしまうので、追加のメモリ容量を作る。特にE2.1.Microは低スペックなので多めに取る。(参考資料)


# Swapメモリ用領域の作成(4GB)
dd if=/dev/zero of=/swapvol bs=1M count=4096
chmod 600 /swapvol
# Swap設定
mkswap /swapvol
swapon /swapvol
# Swapメモリがあることを確認
free

このままだと再起動時にSwapメモリが付かない為、festabファイルをnanoエディタで追記する。nano /etc/fstabを唱え、最下行に/swapvol swap swap defaults 0 0を追記して保存する。

MicroblogPubのインストール: 大体公式ガイドのまんま。初回make buildする際割と待つ。make configのウィザードはメッセージに従って入力すればOK。


git clone https://git.sr.ht/~tsileo/microblog.pub log.nyaight.me
cd log.nyaight.me
chmod -R 777 ./
make build
make config

プロファイルの編集: nano data/profile.tomlを唱える。設定できる項目は公式ガイド参照。インストール手順にあるtrusted_hosts = ["*"]を加えるのを忘れないこと。私の場合次のようになった:


https = true
trusted_hosts = ["*"]
secret = "***********"
admin_password = "***********"
domain = "log.nyaight.me"
username = "room_nb"
icon_url = "https://log.nyaight.me/static/res/icon.png"
image_url = "https://log.nyaight.me/static/res/header.png"
name = "room#N/B log."
summary = "ActivityPubに向けてログを配信中...(省略)"
metadata = [
  {key="🔗Links", value = "[links.**nyaight.me**/portal](https://links.nyaight.me/portal)"},
  {key="📡Admin", value = "[**@Nyaight_Hazard**@misskey.io](https://misskey.io/@Nyaight_Hazard)"},
]
hides_following = true

アイコンとヘッダーのhttps://log.nyaight.me/static/...については、どうやらapp/static下にあるファイルがそのままサイトに転写されているようなので、それを利用しました。

Caddy2のセットアップ

さて、このまま単体ではネットに届かない為、MicroblogPubとネットの橋渡し役となるCaddy2を導入します。今回はCloudflare用のプラグインがセットとなったiarekylew00t/caddy-cloudflareを利用します。これを用いることで、CloudflareのDNSレコードやSSL証明書を連携することが出来ます。

先ずnano docker-compose.ymlを以下の内容で上書きしDockerの構成にCaddyを追加する。(参考資料)


version: "3.9"

services:
  caddy:
    image: iarekylew00t/caddy-cloudflare:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./site:/srv
      - caddy_data:/data
      - caddy_config:/config

  server:
    image: microblogpub/microblogpub:latest
    container_name: microblogpub
    user: 1000:1000
    restart: always
    volumes:
      - ./data:/app/data
      - ./app/static:/app/app/static
    ports:
      - "8000:8000"

volumes:
  caddy_data:
  caddy_config:

次にCloudflareのAPIトークンが必要なので取ってくる。
Cloudflare ユーザー API トークン
→トークンを作成
→カスタム トークンを作成する
→アクセス許可に
・ゾーン>ゾーン>読み取り
・ゾーン>DNS>編集
 を追加して[概要に進む]→[トークンを作成]
→APIトークンをメモにとる

そしてnano Caddyfileで以下のようにCaddyの構成を書く。


https://log.nyaight.me {
	tls {
		dns cloudflare (APIトークンをココに貼る)
	}
	reverse_proxy microblogpub:8000
}

正しく構成できていれば、docker compose up -dを唱えて数分待てばウェブから接続出来るようになります。
お疲れ様でした。

その後について

さてこれで終わりかと言えばそうでもありません。サーバーをちゃんと維持できるようにしたり、中身を改造したりしています。私がした工夫として、
nano /home/ubuntu/.bashrc: SSH接続時に自動でフォルダ移動する
nano /etc/rc.local: 再起動時にMicroblogPubとCaddyを自動で起こす
crontab -e: 週2回Dockerのクリーンアップdocker system prune --volumes -fと再起動rebootをする
 ・CRONの時刻が日本時間になるようにtzselectで変更
・VSCodeからサーバーの中身を弄れるようにする(資料1)(資料2)
独自GithubレポジトリでMicroblogPubの中身を管理
 ・その際パーミッションの変更Caddyfileとdocker-composeを反映しないように

このMicroblogPubはまだまだ改造しがいがありそうなので取り組んで行きたいと思います。それはそれとして普通のブログとしても運用していきたいね。
では。

microblog.pub - A self-hosted, single-user, ActivityPub powered microblog.
Remote follow room#N/B log.
Oracle Cloud Infrastructure Always Freeを使ってタダでMisskeyインスタンスを立てよう | aqz/tamaina
Linux Swap設定方法(CentOS 7)
microblog.pub - A self-hosted, single-user, ActivityPub powered microblog.
microblog.pub - A self-hosted, single-user, ActivityPub powered microblog.
GitHub - IAreKyleW00t/docker-caddy-cloudflare: The official Caddy Docker image built with the Cloudflare DNS module
Keep Caddy Running - Caddy Documentation
Visual Studio Code で Remote SSH する。 - Qiita
Visual Studio CodeでLinux ホストリモート開発 - Qiita
GitHub - NyaightHazard/log.nyaight.me: The custom edition of MiroblogPub: an ActivityPub powered microblog.
Git でファイルパーミッションの変更(chmod)を無視する - git config core.filemode false