npm startで複数のNode.jsのアプリケーションを立ち上げたい

2019/10/12

2018/03/12投稿ではてなブログから移行した内容です.

結論

  • concurrentlyを利用する
  • -prefixを使う

例)package.json

"scripts": {
    "start": "concurrently \"npm -prefix ./1つ目のアプリのディレクトリ/ start\" \"npm -prefix ./2つ目のアプリのディレクトリ/ start\""
}

経緯

Firebase Realtime Databaseを利用したシステムを最近作りました.

詳細はこちらより、ご確認ください.

そこで,データベースの内容をバックアップ取りたいなーと思ったのですが,
Blazeプラン(有料)じゃないと使えないみたい...
自動バックアップ | Firebase

無料で簡単な方法でやりたいと思い,調べてみました.

方法1

まず,初めにこちらの記事を発見.

firebase活用調査編③【databaseのバックアップ】

ちょっとやってみたのですが,自分の環境ではうまくいかなかったため,断念.

方法2

次に,こちらを発見.

サーバーに Firebase Admin SDK を追加する | Firebase

この方法が一番簡単そうなので,これで行くことに決定.

let fs = require('fs')

let admin = require('firebase-admin')
let serviceAccount = require('秘密鍵')

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://プロジェクトID.firebaseio.com"
})

setInterval(viroBackup, 5000)

function viroBackup () {
  let db = admin.database()
  db.ref('/').once('value', (snapshot) => {
    let now = new Date()
    let dirName = now.getFullYear() + '-' + (Number(now.getMonth()) + 1) + '-' + now.getDate()
    let fileName = now.getHours() + '_' + now.getMinutes() + '_' + now.getSeconds() + '_bk.json';
    if (!fs.existsSync(dirName)) {
      fs.mkdirSync(dirName)
    }
    fs.writeFileSync('./' + dirName + '/' + fileName, JSON.stringify(snapshot.val(), null, 4))
  })
}

こんな感じで完成.
でも,問題点が...
これをどうやって動かすか.

解決策1

Node.jsで動かせるやつないかなーって調べたら,nowというサービスを発見.
https://codeiq.jp/magazine/2017/10/54570/

使ってみたのだが,ディレクトリを作る権限が無くて失敗.
設定で出来るのかもしれないが,調べるのが面倒なので却下.

解決策2

AWSを利用する.
EC2は,金銭面で怖いので却下(知らないものは怖い).
AWS Lambdaを利用したのだが,バックアップを上手く取得できない.

AWS Lambdaでファイル入出力をしてみる

Lambdaは,ファイル関係は向かないみたい...

解決策3

1月に作成したシステムが動いているさくらVPSで動かす.
でも,どうやって複数のサービスを動かせばよいのだろうか...
調べてみると,こちらの記事を発見.

npmのコマンドを同時実行する

これでよさそう!
でもどうやって,ディレクトリの違うNode.jsのプロジェクトを実行させれば良いのだろうか...
こちらの記事で解決できました.

npm で package.json がカレントディレクトリにない場合 - Please Sleep