おひとりサーバー 兼 個人ブログ のMicroblogPubサーバーを立ち上げました
という訳で建てた理由と、建てた際の手順や情報を記録したいと思います。
私、にゃいとはざーど(@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はまだまだ改造しがいがありそうなので取り組んで行きたいと思います。それはそれとして普通のブログとしても運用していきたいね。
では。