misskeyをherokuで立てる

misskey on heroku.

misskeyという分散snsをherokuというpaasで動かしてみた記録です。

remote:        * Stack heroku-18

remote:        NPM_CONFIG_LOGLEVEL=error
remote:        NODE_ENV=production
remote:        NODE_MODULES_CACHE=true
remote:        NODE_VERBOSE=false

remote:        Resolving node version 10.x...
remote:        Downloading and installing node 10.15.3...
remote:        Using default npm version: 6.4.1

remote:        > misskey@10.98.3 install 

misskeyをherokuで動作させるポイントとしては、.config/default.ymlheroku $PORTです。

herokuは、deployする度にPORTが変動し、その値は、PORTの環境変数に入っています。しかし、misskeyのsource codeはそれに対応していないようなので、少しだけcodeをPaaS向きに書き換える必要があります。

$ git clone https://github.com/syuilo/misskey
$ cd !$:t

# git reset --hard 551d1b7f8624d2e9c19a99dd80aaf49f096ce836

$ git branch
$ git checkout -b master

$ heroku create $APP_NAME
$ heroku git:remote -a $APP_NAME
$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-nodejs
# heroku buildpacks:set https://github.com/heroku/heroku-buildpack-nodejs#v143

# gitignoreに注意、.configが入っている可能性
$ cat .gitignore
$ cat ~/.gitignore

$ cd .config/
$ mv example.yml default.yml
$ mv mongo_initdb_example.js mongo_initdb.js 

$ heroku addons:create mongolab:sandbox
$ heroku addons:create heroku-redis:hobby-dev
$ heroku config

$ vim default.yml

default.yml

# Final accessible URL seen by a user.
url: https://$APP_NAME.herokuapp.com
#url: http://localhost
port: 80
#port: 8000

# mongodb://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}
mongodb:
  host: $DB_HOST
  port: $DB_PORT
  db: $DB_NAME
  user: $DB_USER
  pass: $DB_PASS

drive:
  storage: 'db'

# redis://h:${REDIS_PASS}@${REDIS_HOST}:${REDIS_PORT}
redis:
  host: $REDIS_HOST
  port: $REDIS_PORT
  pass: $REDIS_PASS

autoAdmin: true
disableHsts: true
clusterLimit: 1
# repo rootに移動
$ cd ..

$ heroku config
$ cat docs/setup.ja.md

$ mongo ${DB_HOST}:${DB_PORT}/${DB_NAME} -u ${DB_USER} -p ${DB_PASS}
 2. `use misskey` misskeyデータベースを使用
 3. `db.createUser( { user: "$USER", pwd: "$PASS", roles: [ { role: "readWrite", db: "misskey" } ] } )` misskeyユーザーを作成
 4. `exit` mongoシェルを終了

$ grep -R 'config.port' src/

# herokuのPORT対応
# default.yml
$ vim ./src/config/load.ts
+ config.port = process.env.PORT;
# production
$ vim ./src/server/index.ts
- server.listen(config.port);
+ server.listen(process.env.PORT || 8000);

# previewするには、`.config/default.yml`の値を`ur:localhost`と`port:8000`にする
$ npm i
$ NODE_ENV=production npm start

$ vim Procfile
web: NODE_ENV=production npm start

# gitignoreに注意、.configが入っている可能性
$ cat .gitignore
$ cat ~/.gitignore

$ git add .
$ git commit -m "first"
$ git push -u heroku master

# 問題の調査
$ heroku logs
$ heroku run bash

misskeyの管理について

autoAdmin: trueで最初に作成されたユーザーが管理者になります。

/adminにアクセスして、インスタンス -> ユーザー登録を停止する