見出し画像

【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では今年も『Marvelアドベントカレンダー2024』をやります🎄🎅Marvelのエンジニアがクリスマスまで記事のバトンを繋ぎます🦌🛷
是非毎日のお楽しみとしてご覧ください🎁

★Marvelのアドベントカレンダーはこちら
https://note.com/marvel_engineer/m/ma7e8d8ae4288

Marvelが少しでも気になった方は是非Wantedlyもご覧ください🙌


いいなと思ったら応援しよう!