188 lines
7.3 KiB
Bash
Executable file
188 lines
7.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Install bank + exchange + merchant landing pages inside containers and ensure
|
|
# nginx listens on 9013 (bank) / 9014 (exchange) / 9015 (merchant).
|
|
#
|
|
# Port map (wire these in Caddy / podman -p):
|
|
# 9013 bank landing
|
|
# 9014 exchange landing
|
|
# 9015 merchant landing
|
|
# Unified vanilla CTR: set LANDING_CTR=goa-regio-ng (default) so all three
|
|
# landings land in the same container publishing 9010-9015.
|
|
#
|
|
# Usage:
|
|
# # on koopa (podman local):
|
|
# LANDING_CTR=goa-regio-ng ./scripts/taler-landing/deploy-landings.sh
|
|
# # from laptop (rsync SoT → remote tree, then deploy there):
|
|
# ./scripts/taler-landing/deploy-landings.sh --ssh hernani@192.168.100.95
|
|
# ./scripts/taler-landing/deploy-landings.sh --ssh # uses LANDING_SSH
|
|
#
|
|
# After stamp-landing-stack / stamp-landing-version, prefer --deploy on those
|
|
# scripts so publish cannot be skipped.
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
# allow override when files already on host /tmp
|
|
SRC_EX="${SRC_EX:-$ROOT/configs/exchange-landing}"
|
|
SRC_MER="${SRC_MER:-$ROOT/configs/merchant-landing}"
|
|
SRC_BANK="${SRC_BANK:-$ROOT/configs/bank-landing}"
|
|
SRC_QR="${SRC_QR:-$ROOT/configs/bank-landing/qrcode.min.js}"
|
|
SRC_GOA_AMT="${SRC_GOA_AMT:-$ROOT/configs/shared/goa-amount.js}"
|
|
|
|
LANDING_CTR="${LANDING_CTR:-goa-regio-ng}"
|
|
C_EX="${C_EX:-$LANDING_CTR}"
|
|
C_MER="${C_MER:-$LANDING_CTR}"
|
|
C_BANK="${C_BANK:-$LANDING_CTR}"
|
|
|
|
SSH_HOST="${LANDING_SSH:-hernani@192.168.100.95}"
|
|
# Remote sync tree on koopa (not a git checkout — laptop SoT is Freigabe-pushed).
|
|
REMOTE_ROOT="${LANDING_REMOTE_ROOT:-src/koopa/koopa-admin-log}"
|
|
USE_SSH=0
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--ctr) LANDING_CTR="${2:-}"; C_EX="$LANDING_CTR"; C_MER="$LANDING_CTR"; C_BANK="$LANDING_CTR"; shift 2 ;;
|
|
--ssh)
|
|
if [ $# -ge 2 ] && [[ "${2:-}" != -* ]]; then
|
|
SSH_HOST="$2"
|
|
shift 2
|
|
else
|
|
shift
|
|
fi
|
|
USE_SSH=1
|
|
;;
|
|
--local) USE_SSH=0; shift ;;
|
|
--remote-root) REMOTE_ROOT="${2:-}"; shift 2 ;;
|
|
-h|--help)
|
|
sed -n '2,22p' "$0"
|
|
exit 0
|
|
;;
|
|
*) echo "unknown arg: $1" >&2; exit 2 ;;
|
|
esac
|
|
done
|
|
|
|
# Prefer per-landing copy, then shared (keeps bank/exchange/merchant in sync)
|
|
resolve_goa_amount() {
|
|
local local_copy="$1"
|
|
if [ -f "$local_copy" ]; then
|
|
printf '%s' "$local_copy"
|
|
elif [ -f "$SRC_GOA_AMT" ]; then
|
|
printf '%s' "$SRC_GOA_AMT"
|
|
else
|
|
printf ''
|
|
fi
|
|
}
|
|
|
|
copy_goa_amount() {
|
|
local ctr="$1" dest="$2" src="$3"
|
|
src=$(resolve_goa_amount "$src")
|
|
if [ -n "$src" ] && [ -f "$src" ]; then
|
|
podman cp "$src" "${ctr}:${dest}/goa-amount.js"
|
|
echo " goa-amount.js ← $src"
|
|
else
|
|
echo " WARN: goa-amount.js missing for $ctr"
|
|
fi
|
|
}
|
|
|
|
deploy_via_ssh() {
|
|
local host="$1"
|
|
local remote_root="$2"
|
|
echo "=== sync landings → ${host}:${remote_root} ==="
|
|
ssh -o BatchMode=yes -o ConnectTimeout=12 "$host" "mkdir -p $(printf '%q' "$remote_root")/configs/shared $(printf '%q' "$remote_root")/scripts/taler-landing $(printf '%q' "$remote_root")/configs/bank-landing $(printf '%q' "$remote_root")/configs/exchange-landing $(printf '%q' "$remote_root")/configs/merchant-landing"
|
|
|
|
# SoT HTML / nginx / shared JS + this script (so remote deploy matches laptop).
|
|
rsync -az --relative \
|
|
"$ROOT/./configs/bank-landing/index.html" \
|
|
"$ROOT/./configs/exchange-landing/index.html" \
|
|
"$ROOT/./configs/exchange-landing/nginx-landing.conf" \
|
|
"$ROOT/./configs/merchant-landing/index.html" \
|
|
"$ROOT/./configs/merchant-landing/nginx-landing.conf" \
|
|
"$ROOT/./configs/shared/goa-amount.js" \
|
|
"$ROOT/./scripts/taler-landing/deploy-landings.sh" \
|
|
"${host}:${remote_root}/"
|
|
|
|
if [ -f "$SRC_QR" ]; then
|
|
rsync -az "$SRC_QR" "${host}:${remote_root}/configs/bank-landing/qrcode.min.js"
|
|
fi
|
|
for site in bank exchange merchant; do
|
|
if [ -f "$ROOT/configs/${site}-landing/goa-amount.js" ]; then
|
|
rsync -az "$ROOT/configs/${site}-landing/goa-amount.js" \
|
|
"${host}:${remote_root}/configs/${site}-landing/goa-amount.js"
|
|
fi
|
|
done
|
|
|
|
echo "=== remote deploy ctr=${LANDING_CTR} ==="
|
|
# shellcheck disable=SC2029
|
|
ssh -o BatchMode=yes -o ConnectTimeout=12 "$host" \
|
|
"cd $(printf '%q' "$remote_root") && LANDING_CTR=$(printf '%q' "$LANDING_CTR") ./scripts/taler-landing/deploy-landings.sh --local"
|
|
}
|
|
|
|
if [ "$USE_SSH" = 1 ]; then
|
|
deploy_via_ssh "$SSH_HOST" "$REMOTE_ROOT"
|
|
exit 0
|
|
fi
|
|
|
|
echo "=== bank landing → $C_BANK :9013 (html + goa-amount) ==="
|
|
if podman inspect -f '{{.State.Running}}' "$C_BANK" 2>/dev/null | grep -qx true; then
|
|
podman exec "$C_BANK" mkdir -p /var/www/bank-landing
|
|
if [ -f "$SRC_BANK/index.html" ]; then
|
|
podman cp "$SRC_BANK/index.html" "$C_BANK:/var/www/bank-landing/index.html"
|
|
fi
|
|
copy_goa_amount "$C_BANK" /var/www/bank-landing "$SRC_BANK/goa-amount.js"
|
|
else
|
|
echo "WARN: $C_BANK not running — skip bank landing files"
|
|
fi
|
|
|
|
echo "=== exchange landing → $C_EX :9014 ==="
|
|
# nginx may be missing on exchange image
|
|
if ! podman exec "$C_EX" command -v nginx >/dev/null 2>&1; then
|
|
echo "installing nginx in $C_EX …"
|
|
podman exec "$C_EX" bash -c 'export DEBIAN_FRONTEND=noninteractive; apt-get update -qq && apt-get install -y -qq nginx'
|
|
fi
|
|
podman exec "$C_EX" mkdir -p /var/www/exchange-landing /etc/nginx/sites-available /etc/nginx/sites-enabled
|
|
podman cp "$SRC_EX/index.html" "$C_EX:/var/www/exchange-landing/index.html"
|
|
if [ -f "$SRC_QR" ]; then
|
|
podman cp "$SRC_QR" "$C_EX:/var/www/exchange-landing/qrcode.min.js"
|
|
fi
|
|
copy_goa_amount "$C_EX" /var/www/exchange-landing "$SRC_EX/goa-amount.js"
|
|
podman cp "$SRC_EX/nginx-landing.conf" "$C_EX:/etc/nginx/sites-available/exchange-landing"
|
|
podman exec "$C_EX" bash -c '
|
|
ln -sfn /etc/nginx/sites-available/exchange-landing /etc/nginx/sites-enabled/exchange-landing
|
|
# ensure sites-enabled is included
|
|
if ! grep -q sites-enabled /etc/nginx/nginx.conf 2>/dev/null; then
|
|
sed -i "/http {/a\\ include /etc/nginx/sites-enabled/*;" /etc/nginx/nginx.conf 2>/dev/null || true
|
|
fi
|
|
nginx -t
|
|
if command -v systemctl >/dev/null && systemctl is-system-running >/dev/null 2>&1; then
|
|
systemctl enable nginx 2>/dev/null || true
|
|
systemctl restart nginx || nginx
|
|
else
|
|
nginx -s reload 2>/dev/null || nginx
|
|
fi
|
|
ss -lntp | grep 9014 || netstat -lntp 2>/dev/null | grep 9014 || true
|
|
'
|
|
|
|
echo "=== merchant landing → $C_MER :9015 ==="
|
|
podman exec "$C_MER" mkdir -p /var/www/merchant-landing
|
|
podman cp "$SRC_MER/index.html" "$C_MER:/var/www/merchant-landing/index.html"
|
|
copy_goa_amount "$C_MER" /var/www/merchant-landing "$SRC_MER/goa-amount.js"
|
|
podman cp "$SRC_MER/nginx-landing.conf" "$C_MER:/etc/nginx/sites-available/merchant-landing"
|
|
podman exec "$C_MER" bash -c '
|
|
ln -sfn /etc/nginx/sites-available/merchant-landing /etc/nginx/sites-enabled/merchant-landing
|
|
nginx -t
|
|
nginx -s reload 2>/dev/null || systemctl reload nginx 2>/dev/null || true
|
|
ss -lntp | grep 9015 || true
|
|
'
|
|
|
|
echo
|
|
echo "=== inside-container checks ==="
|
|
podman exec "$C_EX" curl -sS -m 3 -o /dev/null -w "exchange_landing=%{http_code}\n" http://127.0.0.1:9014/intro/ || true
|
|
podman exec "$C_MER" curl -sS -m 3 -o /dev/null -w "merchant_landing=%{http_code}\n" http://127.0.0.1:9015/intro/ || true
|
|
|
|
echo
|
|
echo "PORTS TO WIRE (host → Caddy / firewall / podman -p):"
|
|
echo " 9013 bank landing ($C_BANK)"
|
|
echo " 9014 exchange landing ($C_EX)"
|
|
echo " 9015 merchant landing ($C_MER)"
|
|
echo
|
|
echo "If host curl to :9014/:9015 fails, republish pasta ports (commit+replace) — see README."
|
|
echo "OK deploy-landings: ctr=${LANDING_CTR} mode=local"
|