Home
Softono

Mulukhiya Toot Proxy

Open source MIT Ruby
34
Stars
1
Forks
21
Issues
2
Watchers
3 months
Last Commit

 About Mulukhiya Toot Proxy

投稿に対して、ハッシュタグの追加等を行うプロキシ。通称「モロヘイヤ」。

Platforms

Web Self-hosted

Languages

Ruby

Links

Need Help Installing Mulukhiya Toot Proxy?

We provide expert installation service for this software. Our team will install, configure, and secure Mulukhiya Toot Proxy on your server. plans start at just $30.

Mulukhiya Toot Proxy

View on GitHub

mulukhiya-toot-proxy

release

各種ActivityPub対応サーバーへの投稿に対して、内容の更新等を行うプロキシ。通称「モロヘイヤ」。 詳細はwikiにて。

対応サーバー

ブランチ

ブランチ バージョン 状態
main 5.x 安定版(デフォルト)
develop 5.x 開発
v4 4.x メンテナンス

利用者は main を使用。開発は develop で行い、リリース時に main へマージする。

4.x系を利用中の場合(旧 master)

git branch -m master v4
git fetch origin
git branch -u origin/v4 v4

5.x系に移行する場合(旧 develop)

git branch -m develop main
git fetch origin
git branch -u origin/main main

5.xへの移行には追加の設定変更が必要。アップグレードガイドを参照。

導入前提

  • Ruby >= 4.0.1
  • PostgreSQL(SNS側のDB参照用)
  • Redis 7+
  • nginx(リバースプロキシ)
  • libvips(画像処理)
  • ffmpeg(メディア変換)

OS別パッケージ

FreeBSD

pkg install ruby vips ffmpeg redis postgresql16-client nginx

RHEL / AlmaLinux / Rocky Linux

sudo dnf install -y epel-release
sudo dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm
sudo dnf install -y gcc make redhat-rpm-config vips-devel libidn-devel postgresql-devel ffmpeg redis jemalloc

Debian / Ubuntu

sudo apt install gcc make libvips-dev libidn11-dev libpq-dev ffmpeg redis-server nginx

アーキテクチャ

クライアントからの投稿リクエストをインターセプトし、ハンドラパイプラインで加工してからSNS APIに転送する。

sequenceDiagram
    participant C as クライアント
    participant N as nginx
    participant M as mulukhiya
    participant S as SNS

    C->>N: POST /api/v1/statuses
    N->>N: X-Mulukhiya ヘッダ判定
    N->>M: プロキシ転送 (port 3008)
    M->>M: トークン検証
    M->>M: pre_toot ハンドラパイプライン
    Note right of M: 本文加工・タグ追加・URL処理等
    M->>S: 加工済みリクエストを転送
    S-->>M: 投稿結果
    M->>M: アカウント整合性検証
    M->>M: post_toot ハンドラパイプライン
    Note right of M: 通知・転送等
    M-->>N: レスポンス
    N-->>C: レスポンス
  • nginxがURLパターン(/api/v1/statuses, /api/v1/media 等)でリクエストをmulukhiyaに振り分け
  • pre_toot: 投稿前にハンドラが本文・メディアを加工(URL正規化、NowPlaying、タグ付け等)
  • post_toot: 投稿後にハンドラが後処理を実行(通知送信、PieFed転送等)
  • X-Mulukhiyaヘッダによるループ防止(mulukhiyaからSNSへの転送時にnginxが直接SNSにルーティング)

機能の概略

投稿本文に対して、

  • 各種短縮URLを戻し、本来のリンク先を明らかにする
  • 日本語を含んだURLを適切にエンコードし、クリックできるようにする
  • Amazonの商品URLからノイズを除去する
  • ハッシュタグ #nowplaying を含んでいたら、曲情報やサムネイルを挿入
  • サーバーのテーマと関係あるワードを含んでいたら、ハッシュタグを追加
  • アニメ実況支援。実況中の番組と関連したハッシュタグを追加
  • デフォルトハッシュタグを追加

アップロードされたメディアファイルについて、

  • 画像ファイルを上限ピクセルまで縮小
  • WebPに変換し、ファイルサイズを小さくする
  • サーバーが本来受け付けないメディアファイルを変換
  • メディアタイプに応じた #image #video #audio 等のタグを本文に挿入

その他、

  • webhook(Slack Incoming Webhook下位互換)
  • 新規登録者へのウェルカムメッセージ
  • ハッシュタグのRSSフィード / カスタムRSSフィード
  • お知らせの念押し投稿
  • Annictからの視聴記録取得・投稿
  • ブックマークされた公開投稿のPieFed転送

セットアップ

git clone https://github.com/pooza/mulukhiya-toot-proxy.git
cd mulukhiya-toot-proxy
bundle install
cp config/sample/mastodon/local.yaml config/local.yaml  # Misskeyの場合は misskey/
vi config/local.yaml  # SNSのURL、PostgreSQL DSN等を設定
  • nginx設定: config/sample/{mastodon,misskey}/mulukhiya.nginx
  • サービス起動スクリプト: config/sample/{ubuntu,rhel,freebsd}/
  • 設定の詳細: config/sample/README.md

ディレクトリ構成

app/lib/mulukhiya/
  controller/     # SNS別コントローラ (Mastodon, Misskey)
  handler/        # 投稿処理ハンドラ
  service/        # SNS APIクライアント
  listener/       # WebSocket/Streamingリスナー
  model/          # SNS別モデル
  worker/         # Sidekiqワーカー
config/
  application.yaml  # メイン設定
  sample/           # サンプル設定・起動スクリプト
views/              # Slimテンプレート + Vue.js
test/               # テスト