da25f46e3e
Docker: moved all docker files to docker/ tree (was conflated with upstream Dockerfile at root + server/Dockerfile). Single container now: caddy (front, serves static + proxies /api /ws) + node backend (internal :4001). Node never exposed. entrypoint.sh runs both. Compose: one service. Blank page root cause: storage adapters had inconsistent module systems. firebase.js = ESM (export). ws.js + memory.js = CJS (module.exports). CRA prod build = ESM strict -> CJS runtime crash, blank root. Dev mode lenient, masked bug. First ws prod build (docker) = first exposure. Never dev/prod split intended; just inconsistency from M2 era. Fix: all adapters ESM. ws.js lazy-loads 'ws' pkg via dynamic import() (Node/jest only; browser uses global WebSocket). index.js static imports. server jest: added babel.config.js (preset-env, node target) to transform ESM for jest. Test: src/tests/StorageEsm.test.js — 4 tests grep all adapters for module.exports / require(). Regression guard catches CJS leak. Verified: docker page renders (root 4534 chars, UI visible). server 24 green, shared 90 green, FE ESM 4 green.
23 lines
568 B
YAML
23 lines
568 B
YAML
# docker/docker-compose.yml — single container: caddy (front) + node (back).
|
|
# Usage (from repo root):
|
|
# docker compose -f docker/docker-compose.yml up --build
|
|
services:
|
|
app:
|
|
build:
|
|
context: ..
|
|
dockerfile: docker/Dockerfile
|
|
args:
|
|
- REACT_APP_TRACKER_APP_ID=${TRACKER_APP_ID:-ttrpg-initiative-tracker-default}
|
|
image: ttrpg-app:local
|
|
ports:
|
|
- "${PORT:-8080}:80"
|
|
volumes:
|
|
- app-data:/data
|
|
environment:
|
|
- DB_PATH=/data/tracker.sqlite
|
|
- PORT=4001
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
app-data:
|