2026-01-24 22:59:20 +00:00
|
|
|
FROM node:22-alpine
|
|
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
# Install runtime dependencies
|
|
|
|
|
RUN apk add --no-cache wget curl docker-cli
|
|
|
|
|
|
|
|
|
|
# Copy package files
|
|
|
|
|
COPY neode-ui/package*.json ./
|
|
|
|
|
|
|
|
|
|
# Install Node dependencies (need all deps for mock backend)
|
|
|
|
|
RUN npm install
|
|
|
|
|
|
|
|
|
|
# Copy application code
|
|
|
|
|
COPY neode-ui/ ./
|
|
|
|
|
|
2026-06-22 11:11:40 -04:00
|
|
|
# Sibling assets the mock backend reads relative to /app (../docker, ../demo):
|
fix(demo): mock backend overhaul — real media, correct shapes, mempool.guide
- Serve committed demo/content (music/photos/documents) alongside demo/files
drop-ins, normalizing top-level folder names; Dockerfile now COPYs it. This
is why Cloud music failed: the real library sat in demo/content while the
loader only read the empty demo/files.
- Drop unbacked seeded Videos; runtime WAV/SVG fallback for any seeded media
without a real file so playback never hits 'no supported source'.
- monitoring.current/history/alerts/alert-rules/export rewritten to the exact
MetricSnapshot shapes Monitoring.vue expects (epoch-second timestamps,
containers with limits/block IO, rpc_latency_ms, ws_connections).
- streaming.list-services + configure-service (Networking Profits page was
erroring with Method not found).
- server.get-state snapshot so the 30s resync / reconnect path stops erroring.
- lnd-connect-info now returns cert/macaroon base64url + grpc/rest ports (the
lnd-ui shell only renders the wallet QR + details when they're present);
LND REST balance endpoints for the shell's new balance cards.
- Fix broken icon paths (lnd.svg → lnd.png and 15 others) against real assets.
- containers-scanned: true so app cards never sit on 'Checking…'.
- 8 new installed demo apps with placeholder dashboard UIs (btcpay-server,
grafana, nextcloud, jellyfin, vaultwarden, nostr-rs-relay, searxng,
uptime-kuma) via the previously unused demoAppShell.
- WS heartbeat 45s → 20s (+ping 25s) so idle-timeout proxies in front of the
public demo stop killing the socket (the 'always reconnecting' report).
- nginx demo proxy: mempool.space → mempool.guide (mempool.space blocks the
proxied embed) + WebSocket upgrade passthrough; txid hydration follows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 03:39:01 +01:00
|
|
|
# the Bitcoin UI mock shell and the curated cloud files (demo/files drop-ins +
|
|
|
|
|
# the committed demo/content library — both are scanned by loadDemoDiskFiles).
|
2026-06-22 11:11:40 -04:00
|
|
|
COPY docker/bitcoin-ui /docker/bitcoin-ui
|
2026-06-22 13:55:50 -04:00
|
|
|
COPY docker/electrs-ui /docker/electrs-ui
|
2026-06-22 14:19:38 -04:00
|
|
|
COPY docker/lnd-ui /docker/lnd-ui
|
|
|
|
|
COPY docker/fedimint-ui /docker/fedimint-ui
|
2026-06-22 11:11:40 -04:00
|
|
|
COPY demo/files /demo/files
|
fix(demo): mock backend overhaul — real media, correct shapes, mempool.guide
- Serve committed demo/content (music/photos/documents) alongside demo/files
drop-ins, normalizing top-level folder names; Dockerfile now COPYs it. This
is why Cloud music failed: the real library sat in demo/content while the
loader only read the empty demo/files.
- Drop unbacked seeded Videos; runtime WAV/SVG fallback for any seeded media
without a real file so playback never hits 'no supported source'.
- monitoring.current/history/alerts/alert-rules/export rewritten to the exact
MetricSnapshot shapes Monitoring.vue expects (epoch-second timestamps,
containers with limits/block IO, rpc_latency_ms, ws_connections).
- streaming.list-services + configure-service (Networking Profits page was
erroring with Method not found).
- server.get-state snapshot so the 30s resync / reconnect path stops erroring.
- lnd-connect-info now returns cert/macaroon base64url + grpc/rest ports (the
lnd-ui shell only renders the wallet QR + details when they're present);
LND REST balance endpoints for the shell's new balance cards.
- Fix broken icon paths (lnd.svg → lnd.png and 15 others) against real assets.
- containers-scanned: true so app cards never sit on 'Checking…'.
- 8 new installed demo apps with placeholder dashboard UIs (btcpay-server,
grafana, nextcloud, jellyfin, vaultwarden, nostr-rs-relay, searxng,
uptime-kuma) via the previously unused demoAppShell.
- WS heartbeat 45s → 20s (+ping 25s) so idle-timeout proxies in front of the
public demo stop killing the socket (the 'always reconnecting' report).
- nginx demo proxy: mempool.space → mempool.guide (mempool.space blocks the
proxied embed) + WebSocket upgrade passthrough; txid hydration follows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 03:39:01 +01:00
|
|
|
COPY demo/content /demo/content
|
2026-06-22 11:11:40 -04:00
|
|
|
|
2026-07-14 11:38:51 -04:00
|
|
|
# This image only ever serves the public demo — scrub the private release/registry
|
|
|
|
|
# server address from everything it serves (mock data, catalog.json, demo assets)
|
|
|
|
|
# and fail the build if any occurrence survives.
|
|
|
|
|
RUN find /app /docker /demo -type f \( -name '*.js' -o -name '*.mjs' -o -name '*.cjs' \
|
|
|
|
|
-o -name '*.css' -o -name '*.html' -o -name '*.json' -o -name '*.md' -o -name '*.txt' \
|
|
|
|
|
-o -name '*.yml' -o -name '*.yaml' \) -not -path '*/node_modules/*' \
|
|
|
|
|
-exec sed -i \
|
|
|
|
|
-e 's#146\.59\.87\.168:3000/lfg2025#registry.demo.internal/archy#g' \
|
|
|
|
|
-e 's#146\.59\.87\.168:3000#registry.demo.internal#g' \
|
|
|
|
|
-e 's#146\.59\.87\.168#registry.demo.internal#g' {} + && \
|
|
|
|
|
if grep -rq '146\.59\.87\.168' /app/mock-backend.js /app/public /docker /demo; then \
|
|
|
|
|
echo 'LEAK: release-server IP still in demo image'; exit 1; fi
|
|
|
|
|
|
2026-01-24 22:59:20 +00:00
|
|
|
# Expose port
|
|
|
|
|
EXPOSE 5959
|
|
|
|
|
|
|
|
|
|
# Health check
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=15s --retries=5 --start-period=180s \
|
|
|
|
|
CMD wget --quiet --tries=1 --spider http://localhost:5959/health || exit 1
|
|
|
|
|
|
|
|
|
|
# Start the mock backend with error handling
|
|
|
|
|
CMD ["sh", "-c", "node mock-backend.js 2>&1 || (echo 'ERROR: Backend failed to start'; cat /app/package.json; ls -la /app; sleep infinity)"]
|