+++ date = "2019-04-04" tags = ["misskey","heroku"] title = "misskeyをherokuで立てる" slug = "misskey" +++ [misskey](https://github.com/syuilo/misskey) on [heroku](https://heroku.com). `misskey`という分散snsをherokuというpaasで動かしてみた記録です。 ```bash 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.yml`と`heroku $PORT`です。 herokuは、deployする度にPORTが変動し、その値は、PORTの環境変数に入っています。しかし、misskeyのsource codeはそれに対応していないようなので、少しだけcodeをPaaS向きに書き換える必要があります。 ```sh $ 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 ```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 ``` ```bash # 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`にアクセスして、`インスタンス -> ユーザー登録を停止する`