Firebase Emulator SuiteをDocker on RaspberryPiで動かす

公開日時
更新日時

Firebase Local Emulator SuiteをRaspberryPi4で動かしたかったのでDocker対応を行った。

RaspberryPi4にDockerをインストールする方法は以前の記事にまとめているのでそちらを参照。

  • docker/firebase/Dockerfile を作成
FROM node:14-buster-slim

RUN apt-get update -y \
    && mkdir -p /usr/share/man/man1 \
    && apt-get install -y curl openjdk-11-jre-headless \
    && npm install -g firebase-tools

RUN mkdir -p /app

WORKDIR /app

CMD ["firebase", "--version"]

openjdkインストール前にmanディレクトリを作成しておかないとエラーになってしまうので注意。

  • docker-compose.yml にfirebaseを追加
version: '3'
services:
  datastore:
    image: busybox
    volumes:
      - yarn_install:/app/node_modules
  app:
    build: .
    environment:
      NODE_ENV: development
      CHOKIDAR_USEPOLLING: 'true'
    volumes:
      - yarn_install:/app/node_modules
      - .:/app:cached
    command: ['yarn', 'dev']
    working_dir: /app
    ports:
      - 3000:3000
    depends_on:
      - firebase
  firebase:
    build:
      context: .
      dockerfile: ./docker/firebase/Dockerfile
    volumes:
      - ~/.config/configstore:/root/.config/configstore
      - ./firebase.json:/app/firebase.json
      - ./firestore.rules:/app/firestore.rules
      - ./firestore.indexes.json:/app/firestore.indexes.json
      - ./.firebaserc:/app/.firebaserc
      - ./functions:/app/functions
    command: ['firebase', 'emulators:start']
    ports:
      - 9099:9099
      - 5001:5001
      - 8080:8080
      - 5000:5000
      - 4000:4000
volumes:
  yarn_install:

appではNext.jsアプリを動かしている。

  • firebase.json にemulator hostの設定を追加

Docker上のemulatorにアクセスできるように 0.0.0.0 を指定する。

{
  // ...
  "emulators": {
    "auth": {
      "host": "0.0.0.0",
      "port": 9099
    },
    "functions": {
      "host": "0.0.0.0",
      "port": 5001
    },
    "firestore": {
      "host": "0.0.0.0",
      "port": 8080
    },
    "hosting": {
      "host": "0.0.0.0",
      "port": 5000
    },
    "ui": {
      "host": "0.0.0.0",
      "enabled": true
    }
  }
}
  • 初期設定として firebase login で認証情報を追加
docker-compose build
docker-compose run --rm firebase firebase login --no-localhost

~/.config/configstore/firebase-tools.json が生成される。

  • 起動
docker-compose up

これでFirebase Emulator SuiteをRaspberry Pi上のDockerで動かせるようになった。

Node.jsのDockerイメージがARMをサポートしてくれているおかげでローカルのmac上でもRaspberryPi4上でも同じイメージが使えるのは楽。

=> その後、GitHub ActionsでのFirestore Rulesテストがエラーになったので対応

参考


Related #firebase

SharedArrayBuffer updates in Android Chrome 88 and Desktop Chrome 92

クロスオリジン分離対応を実施

Firebase Emulator Suiteで起動しているFunctionsから本番のFirestoreにアクセスする

functionsのみエミュレータを使うようにするとできる

Firebase Functions呼び出し時に Error: function terminated. が発生した場合

firebase functions:logで詳細を確認できる

Cloud BuildでFirebase Hostingのデプロイを行う

リポジトリへのpush以外をトリガーにしたい場合に使用

Firebase FunctionsでonCallで実装しているにも関わらずCORSエラーが発生した場合

Cloud Functions(GCP)の管理画面を確認してみる

JestでFirestoreセキュリティルールのテストを書く

Github ActionsでCIを回せるようになった