Replaces the first-boot-containers.sh sed/envsubst approach with a
Rust-native render step bound into the ContainerOrchestrator lifecycle.
- New container::bitcoin_ui module: embeds the nginx.conf template via
include_str!, reads the plaintext RPC password from
/var/lib/archipelago/secrets/bitcoin-rpc-password, substitutes
{{BITCOIN_RPC_AUTH}} with base64(archipelago:<password>), and atomic-
writes (tmp + rename) to /var/lib/archipelago/bitcoin-ui/nginx.conf.
Idempotent: byte-compares before writing so unchanged input is a
no-op (no inode churn, no restart cascade).
- ProdContainerOrchestrator gains run_pre_start_hooks(app_id) returning
HookOutcome::{Rewritten, Unchanged}. Fires in install_fresh before
create_container, and in ensure_running: on Running + Rewritten
triggers a restart; on Stopped re-renders then starts.
- bitcoin-ui Dockerfile no longer COPYs a default.conf; the file now
arrives via runtime bind-mount of the rendered config. If the bind-
mount is ever missing, nginx starts with no site configured and
returns 404 everywhere — safe failure vs. serving upstream RPC with
a stale Authorization header.
- apps/{bitcoin,electrs,lnd}-ui/manifest.yml land as first-class
manifests. bitcoin-ui declares the bind-mount target and a dependency
on bitcoin-core; electrs-ui and lnd-ui declare their own deps and
health checks.
- 8 new unit tests on the render fn (idempotency, rotation, trimming,
missing/empty secret, template invariants) plus an integration test
asserting install(bitcoin-ui) actually lands a substituted nginx.conf
on disk via the hook. 39/39 container:: tests pass
(test_parse_image_versions pre-existing failure unchanged, out of
scope).
39 lines
785 B
YAML
39 lines
785 B
YAML
app:
|
|
id: electrs-ui
|
|
name: Electrs UI
|
|
version: 1.0.0
|
|
description: |
|
|
Archipelago-native HTTP frontend for electrs/electrumx status. Runs
|
|
nginx inside a container, serves static assets, and proxies
|
|
/electrs-status to the archipelago backend on 127.0.0.1:5678.
|
|
|
|
container:
|
|
build:
|
|
context: /opt/archipelago/docker/electrs-ui
|
|
dockerfile: Dockerfile
|
|
tag: localhost/electrs-ui:local
|
|
|
|
dependencies: []
|
|
|
|
resources:
|
|
memory_limit: 64Mi
|
|
|
|
security:
|
|
readonly_root: false
|
|
network_policy: host
|
|
|
|
# Host networking: nginx listens on 50002 directly on the host IP.
|
|
ports: []
|
|
|
|
volumes: []
|
|
|
|
environment: []
|
|
|
|
health_check:
|
|
type: http
|
|
endpoint: http://127.0.0.1:50002
|
|
path: /
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|