Same companion shape as bitcoin-ui/electrs-ui: host-networked nginx bound to 127.0.0.1:18091 (auth: gated + session_passthrough), serving a dark glass status page that polls the node's restricted RPC via a session-gated /cuprate-rpc/ proxy — sync height/target with progress bar, peers, mempool, chain size and free disk (from get_info), plus a wallet 'remote node' endpoint. The offline state explains the disk gate so a refused node says why. No secret rendering: the restricted RPC is Monero's safe-for-public subset, so nginx.conf is baked into the image (no pre_start hook, no bind mount). companion.rs auto-provisions archy-cuprate-ui alongside cuprate and reaps it when cuprate goes. Catalog regenerated (cuprate-ui entry + manifest embed, 18091 into the mesh launch-port list). NOTE: releases/app-catalog.json is UNSIGNED as committed — run scripts/sign-catalog.sh before publishing.
21 lines
961 B
Docker
21 lines
961 B
Docker
FROM git.tx1138.com/lfg2025/nginx:1.27.4-alpine
|
|
# Static site content.
|
|
COPY index.html /usr/share/nginx/html/
|
|
COPY 50x.html /usr/share/nginx/html/
|
|
# Unlike bitcoin-ui, the nginx.conf is baked into the image, not
|
|
# bind-mounted: there is no secret to render in. Cuprate's restricted RPC
|
|
# (the only upstream this UI proxies) is unauthenticated by design —
|
|
# Monero's safe-for-public subset — so there is nothing to substitute at
|
|
# start time and no rotation to follow.
|
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
#
|
|
# Run nginx as root to avoid chown failures in rootless Podman user
|
|
# namespaces. The rest of the nginx image is unchanged.
|
|
RUN sed -i 's/^user nginx;/user root;/' /etc/nginx/nginx.conf && \
|
|
mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/proxy_temp \
|
|
/var/cache/nginx/fastcgi_temp /var/cache/nginx/uwsgi_temp \
|
|
/var/cache/nginx/scgi_temp
|
|
EXPOSE 18091
|
|
ENTRYPOINT []
|
|
CMD ["nginx", "-g", "daemon off;"]
|