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

YouTubeの「Firebase Release Notes」プレイリスト

最新のアップデートの概要を把握するのにちょうど良い

Firebase Extensions

Functionsを実装する際の参考になる

Cloud FunctionsでFirebase Authenticationの認証情報を取得する

functions.https.onCallを使用している場合はcontextパラメータを受け取ることができる

Nuxt.jsのservice workerで環境変数を切り替えられるようにする

設定情報をハードコードしたくなかったので、ビルド時にnodeコマンドでファイル生成を行い環境変数を切り替えられるように対応した。

CloudFunctionsを使ってFirestoreのサブコレクションを削除する

CloudFunctions内でFirebase CLIのdeleteコマンドを呼び出すことで一括削除ができる