1
0
hugo/old/2019-04-04-misskey.md
2024-12-21 21:03:10 +09:00

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