Skip to content

MastodonController

Tatsuya Koishi edited this page Feb 24, 2022 · 58 revisions

対応API

ハンドラへの制約

特になし

イベントへの制約

以下のイベントには対応していない。

  • pre_chat
  • post_chat
  • post_reaction

nginxの設定例

Mastodon公式 に載っている手順通りにnginxを設定し、同一ホストにモロヘイヤを設置する想定。

  location ~ ^/api/v[0-9]+/(statuses|media|search)$ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    tcp_nodelay on;
    if ($http_x_mulukhiya != '') {
      proxy_pass http://localhost:3000;
    }
    if ($http_x_mulukhiya = '') {
      proxy_pass http://localhost:3008;
    }
  }
  location ~ ^/api/v[0-9]+/statuses/[0-9]+/(favourite|reblog|bookmark)$ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    tcp_nodelay on;

    if ($http_x_mulukhiya != '') {
      proxy_pass http://localhost:3000;
    }
    if ($http_x_mulukhiya = '') {
      proxy_pass http://localhost:3008;
    }
  }
  location ~ ^/api/v[0-9]+/media/[0-9]+$ {
    proxy_pass_header Server;
    set $test "${request_method}${http_x_mulukhiya}";
    if ($test ~* '^PUT.+') {
      proxy_pass http://localhost:3000;
    }
    if ($test = 'PUT') {
      proxy_pass http://localhost:3008;
    }
    if ($test ~* '^(GET|POST)') {
      proxy_pass http://localhost:3000;
    }
  }
  location ^~ /mulukhiya {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://localhost:3008;
  }

設定ファイルのサンプル

agent:
  info:
    token: your_token
  test:
    token: your_token
alert:
  hooks:
    - https://hooks.slack.com/services/xxxxx
    - https://discordapp.com/api/webhooks/xxxxx/slack
crypt:
  password: your_password
  salt: your_salt
environment: production
handler:
  default_tag:
    tags:
      - タグ1
      - タグ2
  dictionary_tag:
    dics: []
  hexo_announce:
    category: お知らせ
  image_resize:
    pixel: 1920
  itunes_image:
    disable: true
  spotify_image:
    disable: true
  you_tube_image:
    disable: true
mastodon:
  search:
    limit: 100
  url: https://mstdn.example.com/
postgres:
  dsn: postgres://postgres@localhost:5432/mastodon
sidekiq:
  auth:
    password: your_password
  redis:
    dsn: redis://localhost:6379/2
  schedule:
    announcement:
      every: 10m
user_config:
  redis:
    dsn: redis://localhost:6379/1

本体改造

ファイルアップロード時の制約を回避

アップロード関連のハンドラを利用する場合は、 app/javascript/mastodon/utils/resize_image.js の既存コードを全て削除し、 代わりに以下のコードを貼り付け。 (「実質何もしない」様に書き換えている)

export default inputFile => new Promise(resolve => {
  resolve(inputFile);
});

修正後はいつもの様に、 RAILS_ENV=production bundle exec rails assets:precompile を実行。

これを行うことにより、アップロードした全てのファイルにImageMagickffmpegを通せる様になる。

Clone this wiki locally