2022-07-08 / @syui

misskeyをherokuで立てる[2022年度版]

pleromaと同じくmisskeyをherokuで立てるのにも多少の苦労があるかもしれません。さらに運用するとなると様々な問題が絡んできます。

今回もherokuでmisskeyのインスタンスを立ち上げるまでのヒントを書いていければと思います。

ref : https://misskey-hub.net/docs/install/manual.html

$ git clone https://github.com/misskey-dev/misskey.git
$ cd misskey
$ cp .config/example.yml .config/default.yml
$ vim .config/default.yml
db:
  host: $DB_HOST
  port: $DB_PORT
  db: $DB_NAME
  user: $DB_USER
  pass: $DB_PASS
  extra:
    ssl: { rejectUnauthorized: false }

redis:
  host: $REDIS_HOST
  port: $REDIS_PORT
  pass: $REDIS_PASS

まずmisskeyとheroku-postgresを接続するポイントは、ssl:trueではなくssl:{ rejectUnauthorized: false }です。

必要な情報は以下から得ましょう。

$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku pg:credentials:url

$ heroku addons:create heroku-redis:hobby-dev
$ heroku redis:credentials
$ yarn install
$ yarn build
$ yarn run init
$ yarn start

redisへの接続に問題があります。heroku-redisの接続制限的に厳しいのかもしれません。ioredisが使われるようになったみたいです。

https://devcenter.heroku.com/ja/articles/connecting-heroku-redis#connecting-in-node-js

編集するファイルとしては、packages/backend/srcにある db/redis, server/index.ts, config/load.ts などです。

process.env.PORTprocess.env.HEROKU_REDIS_AQUA_URL, process.env.HEROKU_REDIS_AQUA_URLなどを設定してみるといいかも。

Procfileには、web: NODE_ENV=production yarn startを書きます。

rediscloud

回避策としてaddons:rediscloudを使用すると動きます。

$ heroku addons:create rediscloud:30
$ heroku config
redis://default:${REDIS_CLOUD_PASS}@${REDIS_CLOUD_HOST}:${REDIS_CLOUD_PORT}
redis:
  host: ${REDIS_CLOUD_HOST}
  port: ${REDIS_CLOUD_PORT}
  family: 4  # 0=Both, 4=IPv4, 6=IPv6
  pass: ${REDIS_CLOUD_PASS}
tags: misskey, heroku