Skip to content

MastodonController

Tatsuya Koishi edited this page Mar 3, 2021 · 58 revisions

対応API

ハンドラへの制約

特になし

イベントへの制約

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

  • pre_chat
  • post_chat

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;
  }

設定ファイルのサンプル

environment: production
mastodon:
  url: https://mstdn.example.com/
  status:
    max_length: 600
  search:
    limit: 100
agent:
  test:
    token: your_token
  info:
    token: your_token
postgres:
  dsn: postgres://postgres@localhost:5432/mastodon
user_config:
  redis:
    dsn: redis://localhost:6379/1
alert:
  slack:
    hooks:
      - https://hooks.slack.com/services/xxxxx
      - https://discordapp.com/api/webhooks/xxxxx/slack
  mail:
    to: [email protected]
sidekiq:
  redis:
    dsn: redis://localhost:6379/2
  auth:
    password: your_password
tagging:
  default_tags:
    - デフォルトタグ1
    - デフォルトタグ2
  dictionaries:
    - url: https://mstdn.example.com/dictionaries/dic1
      fields:
        - field1
        - field2
    - url: https://mstdn.example.com/dictionaries/dic2
      type: relative
    - url: https://mstdn.example.com/dictionaries/dic3
      type: mecab
crypt:
  salt: your_salt
  password: your_password

本体改造

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

アップロード関連のハンドラを利用する場合は、 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