sandcastle-ng

Scripts for the deployment of Sandcastle (GNU Taler)
Log | Files | Refs | README

commit be70a2095935cffb7ee291cc6358ae0fa3d7f708
parent 6d2fd19fc753801c131a3b6c712269efce7fb8f9
Author: Florian Dold <florian@dold.me>
Date:   Mon,  8 Dec 2025 17:52:14 +0100

add php / drupal / turnstile

Diffstat:
MDockerfile | 19++++++++++++++++++-
Mhost/container-taler-sandcastle-demo.service | 1+
Mhost/container-taler-sandcastle-test.service | 1+
Msandcastle-run | 3+++
Mscripts/demo/setup-sandcastle.sh | 72+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 94 insertions(+), 2 deletions(-)

diff --git a/Dockerfile b/Dockerfile @@ -301,6 +301,14 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install --no-instal #WORKDIR / +FROM base-system as turnstile +COPY buildconfig/turnstile.* /buildconfig/ +RUN TAG=$(cat /buildconfig/turnstile.tag) && \ + cd /opt/ && \ + git clone git://git.taler.net/turnstile \ + --branch $TAG && \ + cd /opt/turnstile && git checkout $(cat /buildconfig/turnstile.checkout) + # Final image FROM base-system as taler-final RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y upgrade && apt-get --no-install-recommends install -y \ @@ -320,7 +328,15 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y upgrade && apt-g s-nail \ systemd-coredump \ libnss3-tools \ - uuid-runtime + uuid-runtime \ + php \ + composer \ + php-pgsql \ + php-fpm \ + php-dom \ + php-gd \ + php-curl \ + ; RUN mkdir -p /packages COPY --from=gnunet /packages/gnunet/* /packages/ @@ -334,6 +350,7 @@ COPY --from=libeufin /packages/libeufin/* /packages/ COPY --from=merchant-demos /packages/merchant-demos/* /packages/ COPY --from=challenger /packages/challenger/* /packages/ COPY --from=donau /packages/donau/* /packages/ +COPY --from=turnstile /opt/turnstile /opt/turnstile RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get -y upgrade && \ apt-get install --no-install-recommends -y /packages/*.deb COPY systemd/setup-sandcastle.service /etc/systemd/system/ diff --git a/host/container-taler-sandcastle-demo.service b/host/container-taler-sandcastle-demo.service @@ -20,6 +20,7 @@ Environment=SANDCASTLE_PORT_BANK_SPA=127.0.0.1:15002 Environment=SANDCASTLE_PORT_CHALLENGER=127.0.0.1:15003 Environment=SANDCASTLE_PORT_AUDITOR=127.0.0.1:15004 Environment=SANDCASTLE_PORT_DONAU=127.0.0.1:15005 +Environment=SANDCASTLE_PORT_DRUPAL=127.0.0.1:15006 Restart=on-failure TimeoutStopSec=70 ExecStart=%h/sandcastle-ng/sandcastle-run diff --git a/host/container-taler-sandcastle-test.service b/host/container-taler-sandcastle-test.service @@ -20,6 +20,7 @@ Environment=SANDCASTLE_PORT_BANK_SPA=127.0.0.1:16009 Environment=SANDCASTLE_PORT_CHALLENGER=127.0.0.1:16010 Environment=SANDCASTLE_PORT_AUDITOR=127.0.0.1:16011 Environment=SANDCASTLE_PORT_DONAU=127.0.0.1:16012 +Environment=SANDCASTLE_PORT_DRUPAL=127.0.0.1:16013 Restart=on-failure TimeoutStopSec=70 ExecStart=%h/sandcastle-ng/sandcastle-run diff --git a/sandcastle-run b/sandcastle-run @@ -16,6 +16,7 @@ SANDCASTLE_PORT_BANK_SPA=${SANDCASTLE_PORT_BANK_SPA:-127.0.0.1:16009} SANDCASTLE_PORT_CHALLENGER=${SANDCASTLE_PORT_CHALLENGER:-127.0.0.1:16010} SANDCASTLE_PORT_AUDITOR=${SANDCASTLE_PORT_AUDITOR:-127.0.0.1:16011} SANDCASTLE_PORT_DONAU=${SANDCASTLE_PORT_DONAU:-127.0.0.1:16012} +SANDCASTLE_PORT_DRUPAL=${SANDCASTLE_PORT_DRUPAL:-127.0.0.1:16013} # Container-internal ports, should by synced with scripts/setup-sandcastle.sh PORT_INTERNAL_EXCHANGE=8201 @@ -29,6 +30,7 @@ PORT_INTERNAL_BANK_SPA=8505 PORT_INTERNAL_CHALLENGER=8506 PORT_INTERNAL_AUDITOR=8507 PORT_INTERNAL_DONAU=8508 +PORT_INTERNAL_DRUPAL=8509 SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) cd $SCRIPT_DIR @@ -93,6 +95,7 @@ exec podman run \ -p=$SANDCASTLE_PORT_CHALLENGER:$PORT_INTERNAL_CHALLENGER \ -p=$SANDCASTLE_PORT_AUDITOR:$PORT_INTERNAL_AUDITOR \ -p=$SANDCASTLE_PORT_DONAU:$PORT_INTERNAL_DONAU \ + -p=$SANDCASTLE_PORT_DRUPAL:$PORT_INTERNAL_DRUPAL \ --privileged \ --name taler-sandcastle \ --systemd=always \ diff --git a/scripts/demo/setup-sandcastle.sh b/scripts/demo/setup-sandcastle.sh @@ -53,6 +53,7 @@ if [[ $WIRE_METHOD = iban ]]; then MERCHANT_IBAN_TALER=DE1740597 MERCHANT_IBAN_TOR=DE2648777 MERCHANT_IBAN_SANDBOX=DE949115029592 + MERCHANT_IBAN_UMAMI=DE358841382499 MERCHANT_PAYTO_ADMIN="payto://iban/$MERCHANT_IBAN_ADMIN?receiver-name=Default+Merchant" MERCHANT_PAYTO_POS="payto://iban/$MERCHANT_IBAN_POS?receiver-name=PoS+Merchant" @@ -60,6 +61,7 @@ if [[ $WIRE_METHOD = iban ]]; then MERCHANT_PAYTO_GNUNET="payto://iban/$MERCHANT_IBAN_GNUNET?receiver-name=GNUnet+Merchant" MERCHANT_PAYTO_TALER="payto://iban/$MERCHANT_IBAN_TALER?receiver-name=Taler+Merchant" MERCHANT_PAYTO_TOR="payto://iban/$MERCHANT_IBAN_TOR?receiver-name=Tor+Merchant" + MERCHANT_PAYTO_UMAMI="payto://iban/$MERCHANT_IBAN_UMAMI?receiver-name=Umami" MERCHANT_PAYTO_SANDBOX="payto://iban/$MERCHANT_IBAN_SANDBOX?receiver-name=Sandbox+Merchant" elif [[ $WIRE_METHOD = x-taler-bank ]]; then XTBHOST=sandcastle @@ -70,6 +72,7 @@ elif [[ $WIRE_METHOD = x-taler-bank ]]; then MERCHANT_PAYTO_GNUNET="payto://x-taler-bank/$XTBHOST/merchant-gnunet?receiver-name=GNUnet+Merchant" MERCHANT_PAYTO_TALER="payto://x-taler-bank/$XTBHOST/merchant-taler?receiver-name=Taler+Merchant" MERCHANT_PAYTO_TOR="payto://x-taler-bank/$XTBHOST/merchant-tor?receiver-name=Tor+Merchant" + MERCHANT_PAYTO_UMAMI="payto://x-taler-bank/$XTBHOST/merchant-umami?receiver-name=Umami" MERCHANT_PAYTO_SANDBOX="payto://x-taler-bank/$XTBHOST/merchant-sandbox?receiver-name=Sandbox+Merchant" else echo "wire method $WIRE_METHOD not supported" @@ -84,6 +87,7 @@ MERCHANT_DOMAIN=backend.$MYDOMAIN DONAU_DOMAIN=donau.$MYDOMAIN BLOG_DOMAIN=shop.$MYDOMAIN DONATIONS_DOMAIN=donations.$MYDOMAIN +DRUPAL_DOMAIN=drupal.$MYDOMAIN CHALLENGER_DOMAIN=challenger.$MYDOMAIN AUDITOR_DOMAIN=auditor.$MYDOMAIN @@ -100,6 +104,7 @@ PORT_INTERNAL_BANK_SPA=8505 PORT_INTERNAL_CHALLENGER=8506 PORT_INTERNAL_AUDITOR=8507 PORT_INTERNAL_DONAU=8508 +PORT_INTERNAL_DRUPAL=8509 ENABLE_AUDITOR=0 @@ -165,7 +170,6 @@ lift_dir talerdata /var/lib/postgresql var-lib-postgresql # offline keys are in a separate volume lift_dir talerdata_persistent /var/lib/taler-exchange/offline exchange-offline - # Usage: get_credential_pw COMPONENT/ACCOUNT function get_credential_pw() { if [[ ${USE_INSECURE_SANDBOX_PASSWORDS:-0} = 1 ]]; then @@ -582,6 +586,12 @@ cat <<EOF >/etc/caddy/Caddyfile file_server } +:$PORT_INTERNAL_DRUPAL { + root * /talerdata/sandcastle-drupal/web/ + php_fastcgi unix/var/run/php/php8.4-fpm.sock + file_server +} + :$PORT_INTERNAL_AUDITOR { reverse_proxy unix//run/taler-auditor/httpd/auditor-http.sock } @@ -699,6 +709,10 @@ http://$DONATIONS_DOMAIN$PORT_SUFFIX { reverse_proxy :$PORT_INTERNAL_DONATIONS } +http://$DRUPAL_DOMAIN$PORT_SUFFIX { + reverse_proxy :$PORT_INTERNAL_DRUPAL +} + EOF fi @@ -712,6 +726,7 @@ cat <<EOF >>/etc/hosts 127.0.0.1 $BLOG_DOMAIN 127.0.0.1 $DONATIONS_DOMAIN 127.0.0.1 $CHALLENGER_DOMAIN +127.0.0.1 $DRUPAL_DOMAIN # End of Taler Sandcastle Domains EOF @@ -788,6 +803,13 @@ taler-harness deployment provision-bank-account "${BANK_BASEURL}" \ --name "Tor Donations Merchant" \ --password $(get_credential_pw bank/merchant-tor) +sudo -i -u libeufin-bank libeufin-bank passwd merchant-umami $(get_credential_pw bank/merchant-umami) || true +taler-harness deployment provision-bank-account "${BANK_BASEURL}" \ + --login merchant-umami --public \ + --payto "$MERCHANT_PAYTO_UMAMI" \ + --name "Umami Merchant" \ + --password $(get_credential_pw bank/merchant-umami) + # Special bank account without a secure password sudo -i -u libeufin-bank libeufin-bank passwd merchant-sandbox sandbox || true taler-harness deployment provision-bank-account "${BANK_BASEURL}" \ @@ -959,6 +981,18 @@ if [[ $instance_missing = yes ]]; then --payto "$MERCHANT_PAYTO_TOR" fi +instance_missing=no +reset_merchant_pw umami || instance_missing=yes +if [[ $instance_missing = yes ]]; then + taler-harness deployment provision-merchant-instance \ + ${MERCHANT_BASEURL} \ + --management-token $ADMIN_TOK \ + --instance-password $(get_credential_pw merchant/umami) \ + --name "Umami Merchant" \ + --id umami \ + --payto "$MERCHANT_PAYTO_UMAMI" +fi + # Special instance with fixed "sandbox" password sudo -u taler-merchant-httpd taler-merchant-passwd --instance sandbox sandbox || true taler-harness deployment provision-merchant-instance \ @@ -1053,6 +1087,7 @@ taler-harness deployment provision-merchant-donau \ --donau-auth-token secret-token:secret \ --currency $CURRENCY +UMAMI_TOK=$(taler-harness merchant token ${MERCHANT_BASEURL}instances/umami/ umami --password $(get_credential_pw merchant/umami)) # Now we set up the taler-merchant-demos @@ -1060,5 +1095,40 @@ systemctl enable --now taler-demo-landing systemctl enable --now taler-demo-blog systemctl enable --now taler-demo-donations +# Turnstile (drupal/php) + +systemctl enable --now php8.4-fpm + +DRUPAL_DB_PW=$(get_credential_pw db/drupal) + +sudo -i -u postgres psql postgres -c "CREATE ROLE drupal WITH login;" || true +sudo -i -u postgres psql postgres -c "ALTER ROLE drupal password '$DRUPAL_DB_PW';" +sudo -u postgres createdb drupal --owner=drupal || true + +# Needed by PHP's composer +export HOME=/root + +# FIXME: Would probably be better to checkout output of +# drush status --fields=bootstrap --format=string + +cd /talerdata/ +if [[ ! -e /talerdata/sandcastle-drupal ]]; then + composer create-project drupal/recommended-project:^10 sandcastle-drupal + cd sandcastle-drupal + composer require drush/drush + composer exec -- drush site-install demo_umami --account-name=admin --account-pass=admin --account-mail=admin@localhost --db-url=pgsql://drupal:$DRUPAL_DB_PW@localhost/drupal --site-name=SandcastleUmami --yes +fi + +chown -R www-data:www-data /talerdata/sandcastle-drupal/ + +ln -s /opt/turnstile /talerdata/sandcastle-drupal/web/modules/taler_turnstile + +cd sandcastle-drupal +composer exec -- drush en taler_turnstile +composer exec -- drush config:set taler_turnstile.settings access_token "$UMAMI_TOK" --yes +composer exec -- drush config:set taler_turnstile.settings payment_backend_url '$PROTO://$MERCHANT_DOMAIN$PORT_SUFFIX/instances/umami/' --yes + +cd / + # FIXME: Maybe do some taler-wallet-cli test? # FIXME: How do we report errors occurring during the setup script?