141 lines
3.4 KiB
Markdown
141 lines
3.4 KiB
Markdown
|
+++
|
||
|
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`にアクセスして、`インスタンス -> ユーザー登録を停止する`
|