Skip to content

MastodonController

Tatsuya Koishi edited this page Dec 1, 2020 · 58 revisions

対応API

その他の制約

  • チャットには非対応。

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
handler:
  image_resize:
    pixel: 1920
agent:
  test:
    token: hogehoge
  info:
    token: fugafuga
postgres:
  dsn: postgres://postgres@localhost:5432/mastodon
user_config:
  redis:
    dsn: redis://localhost:6379/1
slack:
  hooks:
    - https://hooks.slack.com/services/xxxxx
    - https://discordapp.com/api/webhooks/xxxxx/slack
amazon:
  associate_tag: hoge
  access_key: fuga
  secret_key: piyo
  affiliate: true
spotify:
  client:
    id: hoge
    secret: fuga
google:
  api:
    key: xxxxx
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:
        - cure_name
        - human_name
        - cv
    - url: https://mstdn.example.com/dictionaries/dic2
      fields:
        - field1
        - field2
    - url: https://mstdn.example.com/dictionaries/dic3
      type: relative
    - url: https://mstdn.example.com/dictionaries/dic4
      type: mecab
crypt:
  salt: your_salt
  password: your_password

本体改造

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

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

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

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

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

Clone this wiki locally