Add sync service and fix tarball detection for taler-exchange/merchant

This commit is contained in:
nocci 2025-12-12 12:38:53 +00:00
parent 9543a56982
commit 2121a7763a
5 changed files with 97 additions and 5 deletions

View file

@ -25,6 +25,16 @@ LIBEUFIN_USER=demogeld
LIBEUFIN_USER_PASSWORD=
LIBEUFIN_DEBIT_THRESHOLD=DEMOGELD:1000000
# Sync service
TALER_SYNC_DB=talersync
TALER_SYNC_DB_USER=talersync
TALER_SYNC_DB_PASSWORD=talersync
SYNC_BASE_URL=https://sync.domain.tld/
SYNC_HOST=sync.domain.tld
SYNC_PORT=8087
SYNC_TARBALL_URL=
SYNC_REF=master
# Exchange offline account enablement
ENABLE_EXCHANGE_ACCOUNT=0
PAYTO_URI=payto://x-taler-bank/yourbank.domain.tld/demogeld?receiver-name=demogeld

View file

@ -7,11 +7,13 @@ ARG GNUNET_REF=v0.26.1
ARG EXCHANGE_REF=master
ARG MERCHANT_REF=master
ARG LIBEUFIN_REF=master
ARG SYNC_REF=master
# Optional tarball URLs (when set, git clone is skipped)
ARG GNUNET_TARBALL_URL=
ARG EXCHANGE_TARBALL_URL=
ARG MERCHANT_TARBALL_URL=
ARG LIBEUFIN_TARBALL_URL=
ARG SYNC_TARBALL_URL=
RUN apt-get update && apt-get install -y \
build-essential git automake autoconf autopoint libtool pkg-config \
@ -69,8 +71,8 @@ RUN set -e; \
# Exchange
EXCHANGE_DIR=""; \
EXCHANGE_TAR=0; \
if ls /vendor/exchange*.tar.gz >/dev/null 2>&1; then \
LOCAL_TARBALL="$(ls /vendor/exchange*.tar.gz | head -1)"; \
if ls /vendor/taler-exchange*.tar.gz /vendor/exchange*.tar.gz >/dev/null 2>&1; then \
LOCAL_TARBALL="$(ls /vendor/taler-exchange*.tar.gz /vendor/exchange*.tar.gz 2>/dev/null | head -1)"; \
echo "Using local Exchange tarball from ${LOCAL_TARBALL}"; \
mkdir -p /src && cd /src; \
cp "${LOCAL_TARBALL}" exchange.tar.gz; \
@ -114,8 +116,8 @@ RUN set -e; \
cd "${EXCHANGE_DIR}" && env GNUNET_PREFIX=/usr GIT_CONFIG_NOSYSTEM=1 GIT_DIR= GIT_WORK_TREE=. ./configure --prefix=/usr && make -j$(nproc) && make install; \
# Merchant
MERCHANT_DIR=""; MERCHANT_TAR=0; \
if ls /vendor/merchant*.tar.gz >/dev/null 2>&1; then \
LOCAL_TARBALL="$(ls /vendor/merchant*.tar.gz | head -1)"; \
if ls /vendor/taler-merchant*.tar.gz /vendor/merchant*.tar.gz >/dev/null 2>&1; then \
LOCAL_TARBALL="$(ls /vendor/taler-merchant*.tar.gz /vendor/merchant*.tar.gz 2>/dev/null | head -1)"; \
echo "Using local Merchant tarball from ${LOCAL_TARBALL}"; \
mkdir -p /src && cd /src; \
cp "${LOCAL_TARBALL}" merchant.tar.gz; \
@ -181,6 +183,53 @@ RUN set -e; \
cd "${LIBEUFIN_DIR}" && ./bootstrap && \
./configure --prefix=/usr && make -j$(nproc) && make install
# Taler Sync (optional wallet backup service)
RUN set -e; \
SYNC_DIR=""; SYNC_TAR=0; \
if ls /vendor/sync*.tar.gz >/dev/null 2>&1; then \
LOCAL_TARBALL="$(ls /vendor/sync*.tar.gz | head -1)"; \
echo "Using local Sync tarball from ${LOCAL_TARBALL}"; \
mkdir -p /src && cd /src; \
cp "${LOCAL_TARBALL}" sync.tar.gz; \
tar xzf sync.tar.gz; \
SYNC_DIR="$(ls -d sync-* | head -1)"; \
SYNC_TAR=1; \
elif [ -n "${SYNC_TARBALL_URL}" ]; then \
echo "Fetching Sync tarball ${SYNC_TARBALL_URL}"; \
mkdir -p /src && cd /src; \
curl -L "${SYNC_TARBALL_URL}" -o sync.tar.gz; \
tar xzf sync.tar.gz; \
SYNC_DIR="$(ls -d sync-* | head -1)"; \
SYNC_TAR=1; \
else \
git clone --depth 1 --branch "${SYNC_REF}" https://git.taler.net/sync.git /src/sync; \
SYNC_DIR="/src/sync"; \
fi; \
if [ "${SYNC_TAR}" = "1" ]; then \
if [ -f "${SYNC_DIR}/configure" ]; then \
echo "Using existing configure for Sync tarball"; \
else \
set +e; \
(cd "${SYNC_DIR}" && autoreconf -fi); \
rc=$?; \
set -e; \
if [ $rc -ne 0 ]; then \
echo "Autoreconf failed for Sync tarball; falling back to git clone ${SYNC_REF}"; \
rm -rf "${SYNC_DIR}"; \
git clone --depth 1 --branch "${SYNC_REF}" https://git.taler.net/sync.git /src/sync; \
SYNC_DIR="/src/sync"; \
cd "${SYNC_DIR}" && env GNUNET_PREFIX=/usr ./bootstrap; \
fi; \
fi; \
else \
if [ ! -f "${SYNC_DIR}/configure" ]; then \
cd "${SYNC_DIR}" && env GNUNET_PREFIX=/usr ./bootstrap; \
else \
echo "Skipping bootstrap for Sync (configure present)"; \
fi; \
fi; \
cd "${SYNC_DIR}" && env GNUNET_PREFIX=/usr GIT_CONFIG_NOSYSTEM=1 GIT_DIR= GIT_WORK_TREE=. ./configure --prefix=/usr && make -j$(nproc) && make install
# Shared entrypoint for dbinit + service start
COPY entrypoints/with-dbinit.sh /usr/local/bin/with-dbinit.sh
COPY scripts/enable-exchange-account.sh /usr/local/bin/enable-exchange-account.sh

View file

@ -93,9 +93,27 @@ services:
ports:
- "8080:8080"
sync:
image: taler-stack:build
entrypoint: ["/usr/local/bin/with-dbinit.sh"]
command: ["taler-sync-httpd", "-c", "/etc/taler-sync/taler-sync.conf"]
environment:
DB_NAME: ${TALER_SYNC_DB:-talersync}
INIT_CMD: taler-sync-dbinit -c /etc/taler-sync/taler-sync.conf
PGHOST: ${POSTGRES_HOST:-postgres}
PGUSER: ${POSTGRES_ADMIN_USER:-postgres}
PGPASSWORD: ${POSTGRES_PASSWORD:-taler}
SYNC_BASE_URL: ${SYNC_BASE_URL:-https://sync.domain.tld/}
SYNC_HOST: ${SYNC_HOST:-sync.domain.tld}
depends_on: [postgres]
volumes:
- ./sync/conf:/etc/taler-sync
ports:
- "8087:8087"
caddy:
image: caddy:2
depends_on: [exchange, merchant, bank]
depends_on: [exchange, merchant, bank, sync]
ports:
- "80:80"
- "443:443"
@ -108,6 +126,7 @@ services:
BANK_HOST: ${BANK_HOST:-ob.antifa.ltd}
EXCHANGE_HOST: ${EXCHANGE_HOST:-exchange.antifa.ltd}
MERCHANT_HOST: ${MERCHANT_HOST:-merchant.antifa.ltd}
SYNC_HOST: ${SYNC_HOST:-sync.domain.tld}
WORDPRESS_HOST: ${WORDPRESS_HOST:-wordpress.domain.tld}
mariadb:

View file

@ -23,12 +23,14 @@ GNUNET_VERSION="${GNUNET_VERSION:-0.21.2}"
EXCHANGE_VERSION="${EXCHANGE_VERSION:-1.0.0}"
MERCHANT_VERSION="${MERCHANT_VERSION:-1.1.3}"
LIBEUFIN_VERSION="${LIBEUFIN_VERSION:-1.2.0}"
SYNC_VERSION="${SYNC_VERSION:-1.1.0}"
# GNUnet tarball is hosted under the GNUnet mirror, Taler components under the Taler mirror.
GNUNET_URL="${GNUNET_TARBALL_URL:-https://ftp.gnu.org/gnu/gnunet/gnunet-${GNUNET_VERSION}.tar.gz}"
EXCHANGE_URL="${EXCHANGE_TARBALL_URL:-https://ftp.fau.de/gnu/taler/taler-exchange-${EXCHANGE_VERSION}.tar.gz}"
MERCHANT_URL="${MERCHANT_TARBALL_URL:-https://ftp.fau.de/gnu/taler/taler-merchant-${MERCHANT_VERSION}.tar.gz}"
LIBEUFIN_URL="${LIBEUFIN_TARBALL_URL:-https://ftp.fau.de/gnu/taler/libeufin-${LIBEUFIN_VERSION}.tar.gz}"
SYNC_URL="${SYNC_TARBALL_URL:-https://ftp.fau.de/gnu/taler/sync-${SYNC_VERSION}.tar.gz}"
fetch() {
local url="$1"
@ -49,5 +51,6 @@ fetch "$GNUNET_URL"
fetch "$EXCHANGE_URL"
fetch "$MERCHANT_URL"
fetch "$LIBEUFIN_URL"
fetch "$SYNC_URL"
echo "Done. Tarballs are in ${VENDOR_DIR}"

11
sync/conf/taler-sync.conf Normal file
View file

@ -0,0 +1,11 @@
[sync]
# Public URL where the sync service is reachable
BASE_URL = https://sync.domain.tld/
SERVE = tcp
PORT = 8087
BIND_TO = 0.0.0.0
DB = postgres
[syncdb-postgres]
# Adjust credentials/host in .env and ensure they match this URL
CONFIG = postgres://talersync:talersync@postgres:5432/talersync