【12/11】Misskeyのおひとり様インスタンスを立てて自分の城を作ってみる
※12/10の記事は社内限定公開でした🎅🎄
自己紹介
Marvel株式会社のすながです。
2024年4月入社、大阪在住、自治体システム開発に携わっています。
前職というか、1つ前のプロジェクトまでは、不本意ながらフリーランスで稼働していました。会社勤めに復帰できて、会社員って素晴らしい〜と思いながら日々勤務しています。フリーランスエンジニアになろう!という広告は片っ端から非表示です笑
Misskeyとは
Misskeyは日本発のオープンソースSNSプラットフォームです。
分散型SNSプロトコル「ActivityPub」をサポートしており、MastodonやPleromaといった他のActivityPub対応SNSと通信が可能です。
※通常のSNS(XやFacebook)は一社のサーバーで管理され、データや運営ルールはその会社に依存します。分散型SNSでは、多数の独立したサーバー(インスタンス)が存在し、それぞれが独自のルールで運営されますが、同じプロトコルを使うことで相互に接続可能です。
なぜおひとり様インスタンスか
イーロン・マスクになりたいと思ったからですw
(Xのいろんな機能の変更については賛否両論あると思いますが)単純に彼のようにあれこれテコ入れして自分好みにしていきたいなーという欲が芽生えました。(Xの変更がイーロン好みなのかはわかりません)
自分好みのインスタンスと出会えていないので、自分の城を作ればいいじゃない!という発想です。
環境・完成品
開発環境
◦ Macbook Air M1
▪ OS: 15.1(24B83)Docker Desktop:4.35.1 (173168)
◦ Misskey: 2024.10.2-alpha.2
◦ cloudflare : latest //localhostへ外部から接続するために導入、本記事では省略
◦ redis:7-alpine
◦ postgres: 15-alpine
◦ meilisearch:v1.1.1 //ノート検索機能のために導入Cloudglare R2 //オブジェクトストレージとして利用、本記事では省略
※上述の通り、Cloudflareについては本記事では触れません。紙面が足りない…
公式サイトに沿って立ち上げる
公式で構築の仕方を公開しているので、まずはそこに準拠しつつ…。
リポジトリの取得
さっそくここから手順を変えました。
公式ではgitのソースをcloneして自端末でビルドするのですが、Docker hubにMisskeyのイメージが公開されているので、それをとってくる方式にします。
(ビルドするリソースをケチるため)
とはいえ公式に準拠するため、cloneはして、公式が用意してくれているymlなどをとってきます。
ターミナルでソースを落としたいフォルダまでcdして、下記実行。
git clone -b master https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master
設定
下記コマンドで、各種設定ファイルのサンプルをコピーします。
※3行目はファイル名がcompose_example.ymlから
docker-compose.yml.exampleに変わったっぽいので、書き換えています
cp .config/docker_example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
cp ./docker-compose.yml.example ./docker-compose.yml
※Macの場合、非表示ファイルはCmd+Shift+. で表示できます
.configフォルダはデフォルトだと見えないので、適宜表示してください
※ここまでやったら、使わないファイルは消してしまっていいです
.config/docker.env
Postgresのログイン情報を決めて記載します。
****のところは自由に決めてください。
# db settings
POSTGRES_PASSWORD=********
POSTGRES_USER=*********
POSTGRES_DB=misskey
.config/meilisearch.env
空のファイルを作成した後、下記を入力してください。
任意の16バイト以上の文字列で、マスターキーになります。(私は UUIDで生成しました)
MEILI_MASTER_KEY=*******************
docker-compose.yml
歯抜けで示すより全体像を示した方が嬉しいと思うので、適宜伏せますが、全部載せます。
services:
web:
# Misskeyのイメージが公開されているので、それをとってくる
image: misskey/misskey:2024.10.2-alpha.2
restart: always
links:
- db
- redis
- meilisearch
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "3000:3000"
networks:
- internal_network
- external_network
volumes:
- ./.config:/misskey/.config:ro
redis:
restart: always
image: redis:7-alpine
networks:
- internal_network
volumes:
- ./redis:/data
healthcheck:
test: "redis-cli ping"
interval: 5s
retries: 20
db:
restart: always
image: postgres:15-alpine
networks:
- internal_network
# ↑で準備したファイルを指定します
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
retries: 20
# コメントアウトを解除
meilisearch:
restart: always
image: getmeili/meilisearch:v1.1.1
environment:
- MEILI_NO_ANALYTICS=true
- MEILI_ENV=production
# ↑で準備したファイルを指定します
env_file:
- .config/meilisearch.env
networks:
- internal_network
volumes:
- ./meili_data:/meili_data
networks:
internal_network:
internal: true
external_network:
.config/default.yml
こちらは変更したところを抜粋します。
# ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user.
# 公開URLを設定
url: https://misskey.eri-sunaga.com/
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!
# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────
:
:
# Auth
# ここでもDBのログイン情報を設定
user: ********
pass: ********
# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────
# コメントアウトを解除
meilisearch:
host: meilisearch
port: 7700
# apiKey=↑で決めたマスターキーです
apiKey: '**************'
# デフォルトtrueだけどうまく動かないのでfalseにします
ssl: false
# https://qiita.com/arkw/items/81238fe96ec602a2e055より引用
# > Misskey 13.12.2以降のバージョンでは、Meilisearchのインデックス名が必須となっています。
# > アルファベット、ハイフン、アンダーバーのみ使用でき、Misskey Hubではサーバのホスト名が推奨されています。
# > (例: https://misskey.io なら misskey-io)
index: 'misskey-eri-sunaga-com'
ビルド
Misskey公式手順ではsudoついてるけど、コピペして実行したらいらんって怒られたので外します。
docker compose build
docker compose run --rm web pnpm run init
Dockerのスペックやネットワークが弱いとうまくいかないです。。
起動
これもsudoはいらないです。
docker compose up -d
完成!
localhost:3000にアクセスするとMisskeyが起動しているはずです!
(さらに外部からアクセスするためには、本記事では記載を省略したCloudflareが必要です)
おひとり様インスタンスの場合、読んで字の如く、自分しかインスタンスにいないので、初期設定のままだとタイムラインが寂しいです。。。
連合を組んだり、リレーを追加してみたりして、楽しい規模に拡大してみてください。
わたしはおひとり様にしたことで、情報の波に踊らされることがなくなって自分への集中力がアップしました!情報の波に揉まれたい時は適宜そういうSNSを覗きに行きますが、一度見始めると止まらないんですよね。。。自分で規模を調整できるところがおひとり様のいいところ、そして、なにより、自分の城をもっているんだぞ!という謎の自信につながりますw
盛大にバグを踏み抜いて有識者とやりとりしたりもして、楽しくMisskeyライフを送っています!一緒に楽しみませんか?
おわりに
いかがでしたでしょうか。
もともとMisskey.ioに登録していたところから、2024年10月初旬に急に思い立って、手間取りながら立てたわたしのインスタンス。まだこうしたいああしたいがあるので、完成とは言えないのですが、日々楽しく開拓しています。
もしこの記事を読んで「やってみたい!」と思った方がいたら、ぜひ一歩踏み出してみてください。もちろん、最初からインスタンスを立てなくても、既存のMisskey.ioや他のインスタンスでその魅力に触れることから始めてもOKです。
それでは、あなたのMisskeyライフが素晴らしいものになりますように!
最後までお読みいただき、ありがとうございました。
Marvelが少しでも気になった方は是非Wantedlyもご覧ください🙌