add electrum wallet daemon with container entrypoint

This commit is contained in:
2026-09-03 23:13:20 +02:00
parent cde7fab90c
commit bfb7b013f9
6 changed files with 103 additions and 0 deletions
+1
View File
@@ -5,6 +5,7 @@
/deploy/certbot/www /deploy/certbot/www
/monero-wallet-rpc/wallet /monero-wallet-rpc/wallet
/electrum-daemon/wallet
/backend/node_modules /backend/node_modules
/backend/dist /backend/dist
+4
View File
@@ -54,6 +54,10 @@ Edit `.env.prod`. Mandatory configuration:
| `MONERO_WALLET_RPC_USERNAME` | strong random username | | `MONERO_WALLET_RPC_USERNAME` | strong random username |
| `MONERO_WALLET_RPC_PASSWORD` | strong random password | | `MONERO_WALLET_RPC_PASSWORD` | strong random password |
| `MONERO_WALLET_PASSWORD` | strong wallet password | | `MONERO_WALLET_PASSWORD` | strong wallet password |
| `ELECTRUM_NETWORK` | `mainnet` |
| `ELECTRUM_SERVER` | Electrum peer as `host:port:s` (SSL) or `host:port:t` (TCP), e.g. `electrum.blockstream.info:50002:s` |
| `ELECTRUM_WALLET_PASSWORD` | strong wallet password |
| `ELECTRUM_DAEMON_RPC_PASSWORD` | strong random password |
| `VITE_API_BASE_URL` | `/api` | | `VITE_API_BASE_URL` | `/api` |
| `VITE_SHOP_FIAT_CURRENCY` | same as `SHOP_FIAT_CURRENCY` | | `VITE_SHOP_FIAT_CURRENCY` | same as `SHOP_FIAT_CURRENCY` |
+24
View File
@@ -53,6 +53,28 @@ services:
retries: 10 retries: 10
start_period: 300s start_period: 300s
electrum-daemon:
build:
context: ./electrum-daemon
args:
ELECTRUM_VERSION: ${ELECTRUM_VERSION}
container_name: ${COMPOSE_PROJECT_NAME}_electrum_daemon
restart: unless-stopped
env_file:
- .env.dev
volumes:
- ${ELECTRUM_WALLET_DIR}:/electrum/wallet
healthcheck:
test:
[
'CMD-SHELL',
'curl -sf -u "$$ELECTRUM_DAEMON_RPC_USER:$$ELECTRUM_DAEMON_RPC_PASSWORD" -H ''Content-Type: application/json'' -d ''{"jsonrpc":"2.0","id":"health","method":"version","params":[]}'' http://127.0.0.1:$$ELECTRUM_DAEMON_PORT/'
]
interval: 10s
timeout: 5s
retries: 5
start_period: 90s
simplex-cli: simplex-cli:
build: build:
context: ./simplex-cli context: ./simplex-cli
@@ -83,6 +105,8 @@ services:
condition: service_healthy condition: service_healthy
monero-wallet-rpc: monero-wallet-rpc:
condition: service_healthy condition: service_healthy
electrum-daemon:
condition: service_healthy
simplex-cli: simplex-cli:
condition: service_healthy condition: service_healthy
env_file: env_file:
+24
View File
@@ -50,6 +50,28 @@ services:
retries: 10 retries: 10
start_period: 300s start_period: 300s
electrum-daemon:
build:
context: ./electrum-daemon
args:
ELECTRUM_VERSION: ${ELECTRUM_VERSION}
container_name: ${COMPOSE_PROJECT_NAME}_electrum_daemon
restart: unless-stopped
env_file:
- .env.prod
volumes:
- ${ELECTRUM_WALLET_DIR}:/electrum/wallet
healthcheck:
test:
[
'CMD-SHELL',
'curl -sf -u "$$ELECTRUM_DAEMON_RPC_USER:$$ELECTRUM_DAEMON_RPC_PASSWORD" -H ''Content-Type: application/json'' -d ''{"jsonrpc":"2.0","id":"health","method":"version","params":[]}'' http://127.0.0.1:$$ELECTRUM_DAEMON_PORT/'
]
interval: 10s
timeout: 5s
retries: 5
start_period: 90s
simplex-cli: simplex-cli:
build: build:
context: ./simplex-cli context: ./simplex-cli
@@ -80,6 +102,8 @@ services:
condition: service_healthy condition: service_healthy
monero-wallet-rpc: monero-wallet-rpc:
condition: service_healthy condition: service_healthy
electrum-daemon:
condition: service_healthy
simplex-cli: simplex-cli:
condition: service_healthy condition: service_healthy
env_file: env_file:
+16
View File
@@ -0,0 +1,16 @@
FROM debian:bookworm-slim
ARG ELECTRUM_VERSION
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates curl libsecp256k1-1 python3 python3-cryptography \
&& curl -fsSL "https://download.electrum.org/${ELECTRUM_VERSION}/Electrum-${ELECTRUM_VERSION}.tar.gz" \
| tar -xz -C /opt \
&& chmod +x "/opt/Electrum-${ELECTRUM_VERSION}/run_electrum" \
&& ln -s "/opt/Electrum-${ELECTRUM_VERSION}/run_electrum" /usr/local/bin/electrum \
&& rm -rf /var/lib/apt/lists/*
COPY --chmod=755 docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -euo pipefail
NETWORK_FLAG="--${ELECTRUM_NETWORK}"
WALLET_PATH="/electrum/wallet/${ELECTRUM_WALLET_NAME}"
DATA_DIR="/electrum/data"
run_electrum() { electrum "${NETWORK_FLAG}" --dir "${DATA_DIR}" "$@"; }
run_electrum_offline() { electrum --offline "${NETWORK_FLAG}" --dir "${DATA_DIR}" "$@"; }
mkdir -p /electrum/wallet "${DATA_DIR}"
chmod 700 /electrum/wallet
if [[ ! -f "${WALLET_PATH}" ]]; then
echo "Creating ${ELECTRUM_NETWORK} wallet at ${WALLET_PATH}..."
run_electrum_offline create -w "${WALLET_PATH}" --password "${ELECTRUM_WALLET_PASSWORD}"
chmod 600 "${WALLET_PATH}" 2>/dev/null || true
echo "Wallet created at ${WALLET_PATH}"
fi
run_electrum_offline setconfig rpcuser "${ELECTRUM_DAEMON_RPC_USER}"
run_electrum_offline setconfig rpcpassword "${ELECTRUM_DAEMON_RPC_PASSWORD}"
run_electrum_offline setconfig rpchost 0.0.0.0
run_electrum_offline setconfig rpcport "${ELECTRUM_DAEMON_PORT}"
run_electrum_offline setconfig server "${ELECTRUM_SERVER}"
trap 'run_electrum daemon stop || true; exit 0' SIGTERM SIGINT
run_electrum daemon -d
run_electrum load_wallet -w "${WALLET_PATH}" --password "${ELECTRUM_WALLET_PASSWORD}"
sleep infinity