Files
archy/apps/bitcoin-core/manifest.yml
T

113 lines
4.5 KiB
YAML
Raw Normal View History

2026-01-24 22:01:51 +00:00
app:
id: bitcoin-core
2026-04-30 16:29:56 -04:00
name: Bitcoin Core
version: 28.4.0
2026-04-30 16:29:56 -04:00
description: Reference Bitcoin Core node with dynamic prune/full-mode startup based on host disk.
2026-04-30 16:29:56 -04:00
container_name: bitcoin-core
2026-01-24 22:01:51 +00:00
container:
2026-04-30 16:29:56 -04:00
image: 146.59.87.168:3000/lfg2025/bitcoin:28.4
pull_policy: if-not-present
network: archy-net
entrypoint: ["sh", "-lc"]
custom_args:
2026-04-29 15:47:51 -04:00
# Sync-speed flags: -par=0 uses every core (was capped at 2 by
# --cpus=2, now removed for bitcoin/electrumx). -dbcache sized to
# the IBD sweet spot - 4GB on full nodes, 1GB on pruned. Container
2026-04-29 15:47:51 -04:00
# --memory=8g (config.rs::get_memory_limit) leaves headroom for
# mempool + connections.
#
# -printtoconsole=0: foreground bitcoind defaults console logging ON,
# which pushed every IBD "UpdateTip" line through conmon into journald
# (>1 GB/day on a fresh node). bitcoind still writes debug.log in the
# datadir (/var/lib/archipelago/bitcoin/debug.log, self-shrunk on
# restart) — use that for deep debugging; podman logs only carries
# entrypoint/startup errors.
- >-
BITCOIND="$(command -v bitcoind || true)";
if [ -z "$BITCOIND" ]; then
BITCOIND="$(find /opt -path '*/bin/bitcoind' -type f 2>/dev/null | sort | tail -n 1)";
fi;
if [ -z "$BITCOIND" ]; then
echo "bitcoind not found in image" >&2;
exit 127;
fi;
2026-06-11 04:44:58 -04:00
RPC_USER="$(printenv BITCOIN_RPC_USER)";
RPC_PASS="$(printenv BITCOIN_RPC_PASS)";
RPC_CONF="/tmp/rpc.conf";
umask 077;
{ echo "rpcuser=$RPC_USER"; echo "rpcpassword=$RPC_PASS"; } > "$RPC_CONF";
2026-06-11 04:44:58 -04:00
RPC_TXRELAY_AUTH="$(printenv BITCOIN_RPC_TXRELAY_RPCAUTH || true)";
DISK_GB_VALUE="$(printenv DISK_GB || true)";
RPC_HEADROOM="-rpcthreads=16 -rpcworkqueue=256";
RPC_TXRELAY_FLAGS="-rpcwhitelistdefault=0";
if [ -n "$RPC_TXRELAY_AUTH" ]; then
2026-06-12 03:00:15 -04:00
RPC_TXRELAY_FLAGS="$RPC_TXRELAY_FLAGS -rpcauth=$RPC_TXRELAY_AUTH -rpcwhitelist=txrelay:sendrawtransaction,submitpackage,testmempoolaccept,getmempoolinfo,getrawmempool,getmempoolentry,getnetworkinfo,getblockchaininfo,getblockcount,getblockhash,getblock,getblockheader,getrawtransaction,gettxout,gettxspendingprevout,decoderawtransaction,decodescript,estimatesmartfee,uptime,ping,getconnectioncount,getpeerinfo,getindexinfo,getdeploymentinfo,getchaintips";
2026-06-11 04:44:58 -04:00
fi;
if [ "${DISK_GB_VALUE:-0}" -lt 1000 ]; then
exec "$BITCOIND" -datadir=/home/bitcoin/.bitcoin -conf="$RPC_CONF" -printtoconsole=0 -server=1 -prune=550 -rpcallowip=0.0.0.0/0 -rpcbind=0.0.0.0:8332 -listen=1 -bind=0.0.0.0:8333 -dbcache=1024 -par=0 -maxconnections=125 $RPC_HEADROOM $RPC_TXRELAY_FLAGS;
else
exec "$BITCOIND" -datadir=/home/bitcoin/.bitcoin -conf="$RPC_CONF" -printtoconsole=0 -server=1 -txindex=1 -rpcallowip=0.0.0.0/0 -rpcbind=0.0.0.0:8332 -listen=1 -bind=0.0.0.0:8333 -dbcache=4096 -par=0 -maxconnections=125 $RPC_HEADROOM $RPC_TXRELAY_FLAGS;
fi
derived_env:
- key: DISK_GB
template: "{{DISK_GB}}"
secret_env:
- key: BITCOIN_RPC_PASS
secret_file: bitcoin-rpc-password
2026-06-11 04:44:58 -04:00
- key: BITCOIN_RPC_TXRELAY_RPCAUTH
secret_file: bitcoin-rpc-txrelay-rpcauth
data_uid: "100101:100101"
2026-01-24 22:01:51 +00:00
dependencies:
- storage: 500Gi
2026-01-24 22:01:51 +00:00
resources:
cpu_limit: 0
memory_limit: 4Gi
2026-01-24 22:01:51 +00:00
disk_limit: 500Gi
2026-01-24 22:01:51 +00:00
security:
capabilities: [CHOWN, FOWNER, SETUID, SETGID, DAC_OVERRIDE]
readonly_root: false
2026-01-24 22:01:51 +00:00
network_policy: isolated
2026-01-24 22:01:51 +00:00
ports:
# RPC is auth-only: publish host-local ONLY - the LAN cannot reach
# nodeIP:8332. In-node consumers (lnd, fedimint, btcpay, mempool-api)
# dial the container's archy-net alias directly (bitcoin-core:8332),
# which needs no publish at all. Do NOT bind the archy-net gateway
# (10.89.0.1): rootlessport binds in the HOST netns where that address
# does not exist, and the whole unit crash-loops (2026-07-09, .228).
# P2P 8333 stays public.
2026-01-24 22:01:51 +00:00
- host: 8332
container: 8332
protocol: tcp
bind: 127.0.0.1
2026-01-24 22:01:51 +00:00
- host: 8333
container: 8333
protocol: tcp
2026-01-24 22:01:51 +00:00
volumes:
- type: bind
source: /var/lib/archipelago/bitcoin
target: /home/bitcoin/.bitcoin
options: [rw]
2026-01-24 22:01:51 +00:00
environment:
- BITCOIN_RPC_USER=archipelago
2026-01-24 22:01:51 +00:00
health_check:
type: tcp
endpoint: localhost:8332
2026-01-24 22:01:51 +00:00
interval: 30s
timeout: 5s
retries: 3
2026-01-24 22:01:51 +00:00
bitcoin_integration:
rpc_access: admin
sync_required: true
testnet_support: false
2026-01-24 22:01:51 +00:00
pruning_support: true