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テストがエラーになったので対応