エンジニアの卵の成長日記

ふわっちで配信してますhttps://whowatch.tv/profile/w:kurowasi2525

npm startで複数のNode.jsのアプリケーションを立ち上げたい【Firebaseのバックアップ編】

結論

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

例)package.json

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

わからないことがあれば,Twitterに連絡ください.
twitter.com


経緯

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

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

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

方法1

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

www.sss3.co.jp

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

方法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を利用したのだが,バックアップを上手く取得できない.

qiita.com

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


解決策3

1月に作成したシステムが動いているさくらVPSで動かす.

でも,どうやって複数のサービスを動かせばよいのだろうか...

調べてみると,こちらの記事を発見.

qiita.com

これでよさそう!

でもどうやって,ディレクトリの違うNode.jsのプロジェクトを実行させれば良いのだろうか...

こちらの記事で解決できました.

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