diff --git a/README-DE.md b/README-DE.md new file mode 100644 index 0000000..d7ead5b --- /dev/null +++ b/README-DE.md @@ -0,0 +1,43 @@ +# gnutaler-docker (DE) + +Container-Stack für GNU Taler (Exchange, Merchant, LibEuFin Bank) mit optionalem Caddy-Reverse-Proxy, automatischer DB-Initialisierung und optionalem WordPress/WooCommerce-Demo-Shop mit dem GNU-Taler-Payment-Plugin. + +## Bestandteile +- `compose.yml`: Services postgres, exchange, merchant, bank, optionaler Caddy (`*.domain.tld`), einmaliger `exchange-account-init` Job, optionale `mariadb`/`wordpress`/`wp-init`. +- `Dockerfile`: Baut GNUnet/Taler/LibEuFin aus Git, legt Helper-Skripte ins Image. +- `entrypoints/with-dbinit.sh`: Rendert Templates via `envsubst`, wartet auf Postgres, führt `*-dbinit`, setzt LibEuFin-Admin/User-Passwörter. +- `postgres/init/01-init-taler.sh`: Legt DB-User/-Datenbanken mit Passwörtern aus der `.env` an. +- `scripts/enable-exchange-account.sh`: Offline-Tool zum Freischalten des Exchange-Payto-Kontos (optional, über `ENABLE_EXCHANGE_ACCOUNT`). +- `scripts/provision-bank-user.sh`: Legt Bank-User an, setzt Debit-Limit, erzeugt einen Token und schreibt ihn auf den Host. +- `exchange/…`, `merchant/…`, `bank/…`: Templated Configs plus Terms/Privacy. +- `caddy/Caddyfile`: Reverse-Proxy mit Hosts aus der Umgebung, ACME-Zertifikate. +- `wordpress`-Stack: MariaDB + WordPress + WP-CLI-Init, installiert WooCommerce und `gnu-taler-payment-for-woocommerce`. + +## Schnellstart +1. Voraussetzungen: Docker + Docker Compose. +2. `.env` aus `.env.example` kopieren und füllen (Passwörter, Hosts/URLs, ACME-Mail, Master-Key, `EXCHANGE_SECRETS_PATH`, etc.). Wichtig: + - `EXCHANGE_SECRETS_PATH`: Host-Pfad mit dem Exchange-Master-Privatschlüssel (persistieren!). + - `MASTER_PUBLIC_KEY`: zum Master-Privatschlüssel passend. + - `LIBEUFIN_MERCHANT_TOKEN`: erst nach Token-Generierung eintragen (siehe unten). +3. Build: `docker build -t taler-stack:build .` +4. Start: `docker compose up -d` +5. Bank-Token erzeugen: `./scripts/provision-bank-user.sh` (Bank-Service muss laufen). Token steht danach in `TOKEN_OUTPUT` (Default `bank/token-info.txt`); Wert in `.env` bei `LIBEUFIN_MERCHANT_TOKEN` eintragen. +6. Optional: Exchange-Payto automatisch freischalten, indem du in `.env` `ENABLE_EXCHANGE_ACCOUNT=1` setzt (PAYTO/Hosts anpassen); Job läuft als `exchange-account-init`. +7. WordPress/WooCommerce (optional): `WP_DB_*`, `WP_URL`, Admin-Creds und `WORDPRESS_HOST` in `.env` setzen; `wp-init` installiert WordPress, WooCommerce und das GNU-Taler-Payment-Plugin. + +## Caddy/Reverse-Proxy +- Hosts steuerst du über `BANK_HOST`, `EXCHANGE_HOST`, `MERCHANT_HOST`, `WORDPRESS_HOST`, ACME-Mail über `CADDY_ACME_EMAIL`. +- Bei Domainwechsel BASE_URL/PAYTO in der `.env` anpassen; Templates rendern automatisch beim Start. +- Direktes Port-Mapping (8080/8081/9966/8085) kannst du entfernen, wenn nur Caddy nach außen gehen soll. + +## Hinweise +- Passwörter in `.env` müssen zu `postgres/init/01-init-taler.sh` passen (werden automatisch übernommen). +- Master-Key muss stabil bleiben; nur Pfad mounten, nicht neu generieren. +- Wenn `ENABLE_EXCHANGE_ACCOUNT=0`, musst du das Offline-Tool manuell ausführen (`scripts/enable-exchange-account.sh` im Exchange-Container). +- Bei eigener CA `EXCHANGE_CURL_OPTS="-k"` setzen, wenn der Offline-Job `/keys` über HTTPS abfragt. +- Nach Passwortänderungen in `.env` ist kein manuelles SQL-Rendering nötig; das Init-Skript liest sie beim Start. + +## Nützliche Kommandos +- Logs: `docker compose logs -f exchange` (oder bank/merchant/caddy/wordpress). +- Bank-Token/Users neu provisionieren: `./scripts/provision-bank-user.sh` +- Payto-Enable manuell: `docker compose run --rm exchange /usr/local/bin/enable-exchange-account.sh PAYTO_URI=...` diff --git a/README.md b/README.md index 5421a49..356f3f8 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,43 @@ # gnutaler-docker -Container-Stack für GNU Taler (Exchange, Merchant, LibEuFin Bank) mit optionalem Caddy-Reverse-Proxy und automatischer DB-Initialisierung. +Container stack for GNU Taler (Exchange, Merchant, LibEuFin Bank) with optional Caddy reverse proxy, automatic DB initialization, and an optional WordPress/WooCommerce demo shop with the GNU Taler payment plugin. -## Bestandteile -- `compose.yml`: Services postgres, exchange, merchant, bank, optionaler Caddy (`*.domain.tld`), einmaliger exchange-account-init Job. -- `Dockerfile`: Baut GNUnet/Taler/LibEuFin aus Git, legt Helper-Skripte ins Image. -- `entrypoints/with-dbinit.sh`: Rendert Templates via `envsubst`, wartet auf Postgres, führt `*-dbinit`, setzt LibEuFin-Admin/User-Passwörter. -- `postgres/init/01-init-taler.sh`: Legt DB-User/-Datenbanken mit Passwörtern aus der `.env` an. -- `scripts/enable-exchange-account.sh`: Offline-Tool zum Enable-Account für den Exchange (optional, via `ENABLE_EXCHANGE_ACCOUNT`). -- `scripts/provision-bank-user.sh`: Legt Bank-User an, setzt Debit-Limit, erzeugt einen Token und schreibt ihn auf den Host. -- `exchange/…`, `merchant/…`, `bank/…`: Templated Configs, Terms/Privacy. -- `caddy/Caddyfile`: Reverse-Proxy mit Hosts aus Environment, holt Zertifikate über ACME. +## Components +- `compose.yml`: services postgres, exchange, merchant, bank, Caddy (`*.domain.tld`), one-off `exchange-account-init` job, optional `mariadb`/`wordpress`/`wp-init`. +- `Dockerfile`: builds GNUnet/Taler/LibEuFin from Git and ships helper scripts. +- `entrypoints/with-dbinit.sh`: renders templates via `envsubst`, waits for Postgres, runs `*-dbinit`, sets LibEuFin admin/user passwords. +- `postgres/init/01-init-taler.sh`: creates DB users/databases using passwords from `.env`. +- `scripts/enable-exchange-account.sh`: offline tool to enable the exchange payto account (optional, gated by `ENABLE_EXCHANGE_ACCOUNT`). +- `scripts/provision-bank-user.sh`: creates a bank user, sets debit limit, generates a token, and writes it to the host. +- `exchange/…`, `merchant/…`, `bank/…`: templated configs plus terms/privacy. +- `caddy/Caddyfile`: reverse proxy with hosts from environment, ACME certificates. +- `wordpress` stack: MariaDB + WordPress + WP-CLI init installing WooCommerce and `gnu-taler-payment-for-woocommerce`. -## Schnellstart -1. Voraussetzungen: Docker + Docker Compose. -2. `.env` aus `.env.example` kopieren und füllen (Passwörter, Hosts/URLs, ACME-Mail, Master-Key, `EXCHANGE_SECRETS_PATH`, etc.). Wichtig: - - `EXCHANGE_SECRETS_PATH`: Host-Pfad mit dem Exchange-Master-Privatschlüssel (persistieren!). - - `MASTER_PUBLIC_KEY`: zum Master-Privatschlüssel passend. - - `LIBEUFIN_MERCHANT_TOKEN`: erst nach Token-Generierung eintragen (siehe unten). +## Quick start +1. Prereqs: Docker + Docker Compose. +2. Copy `.env.example` → `.env` and fill it (passwords, hosts/URLs, ACME mail, master key, `EXCHANGE_SECRETS_PATH`, etc.). Important: + - `EXCHANGE_SECRETS_PATH`: host path containing the exchange master private key (persistent!). + - `MASTER_PUBLIC_KEY`: must match the master private key. + - `LIBEUFIN_MERCHANT_TOKEN`: set after token generation (see below). 3. Build: `docker build -t taler-stack:build .` 4. Start: `docker compose up -d` -5. Bank-Token erzeugen: `./scripts/provision-bank-user.sh` (Bank-Service muss laufen). Token steht danach in `TOKEN_OUTPUT` (Default `bank/token-info.txt`); Wert in `.env` bei `LIBEUFIN_MERCHANT_TOKEN` eintragen. -6. Optional: Exchange-Payto automatisch freischalten, indem du in `.env` `ENABLE_EXCHANGE_ACCOUNT=1` setzt (PAYTO/Hosts anpassen); Job läuft als `exchange-account-init`. +5. Generate bank token: `./scripts/provision-bank-user.sh` (bank service must be running). The token is written to `TOKEN_OUTPUT` (default `bank/token-info.txt`); copy the secret token into `.env` as `LIBEUFIN_MERCHANT_TOKEN`. +6. Optional: auto-enable exchange payto by setting `ENABLE_EXCHANGE_ACCOUNT=1` in `.env` (adjust PAYTO/hosts); job runs as `exchange-account-init`. +7. WordPress/WooCommerce (optional): set `WP_DB_*`, `WP_URL`, admin creds, and `WORDPRESS_HOST` in `.env`; `wp-init` installs WordPress, WooCommerce, and the GNU Taler payment plugin. -## Caddy/Reverse-Proxy -- Hosts steuerst du über `BANK_HOST`, `EXCHANGE_HOST`, `MERCHANT_HOST`, ACME-Mail über `CADDY_ACME_EMAIL`. -- Bei Domainwechsel passen BASE_URL/PAYTO in der `.env` ebenfalls an (Templates rendern automatisch beim Start). -- Direktes Port-Mapping (8080/8081/9966) kannst du entfernen, wenn nur Caddy nach außen gehen soll. +## Caddy / reverse proxy +- Hosts via `BANK_HOST`, `EXCHANGE_HOST`, `MERCHANT_HOST`, `WORDPRESS_HOST`; ACME mail via `CADDY_ACME_EMAIL`. +- On domain changes, adjust BASE_URL/PAYTO in `.env`; templates render automatically at startup. +- You can remove direct port mappings (8080/8081/9966/8085) if only Caddy should be exposed. -## WordPress/WooCommerce (optional) -- Services `mariadb`, `wordpress`, `wp-init`. `wp-init` installiert bei Bedarf Core, WooCommerce und das Plugin `gnu-taler-payment-for-woocommerce`. -- Env in `.env` setzen (`WP_DB_*`, `WP_URL`, Admin-Creds, `WORDPRESS_HOST`); Default-Port 8085 oder über Caddy (`WORDPRESS_HOST`). +## Notes +- Passwords in `.env` must match `postgres/init/01-init-taler.sh` (picked up automatically via environment). +- Keep the master key stable; mount it via `EXCHANGE_SECRETS_PATH`, do not regenerate on startup. +- If `ENABLE_EXCHANGE_ACCOUNT=0`, run the offline tool manually (`scripts/enable-exchange-account.sh` inside the exchange container). +- With custom CAs, set `EXCHANGE_CURL_OPTS="-k"` if the offline job needs to curl `/keys` over HTTPS. +- After changing DB passwords in `.env`, no manual SQL rendering is needed—the init script reads them at container start. -## Hinweise -- Passwörter in `.env` müssen zu `postgres/init/01-init-taler.sh` passen (wird automatisch per Env gesetzt). -- Master-Key muss stabil bleiben; nur Pfad mounten, nicht neu generieren. -- Wenn `ENABLE_EXCHANGE_ACCOUNT=0`, musst du das Offline-Tool manuell ausführen (`scripts/enable-exchange-account.sh` im Exchange-Container). -- Bei Zertifikaten mit eigenem CA kannst du `EXCHANGE_CURL_OPTS="-k"` setzen, wenn der Offline-Job die `/keys`-URL abfragt. - -## Nützliche Kommandos -- Logs eines Dienstes: `docker compose logs -f exchange` (analog bank/merchant/caddy). -- Bank-Token/Users neu provisionieren: `./scripts/provision-bank-user.sh` -- Payto-Enable manuell: `docker compose run --rm exchange /usr/local/bin/enable-exchange-account.sh PAYTO_URI=...` +## Useful commands +- Logs: `docker compose logs -f exchange` (or bank/merchant/caddy/wordpress). +- Re-provision bank users/token: `./scripts/provision-bank-user.sh` +- Manual payto enable: `docker compose run --rm exchange /usr/local/bin/enable-exchange-account.sh PAYTO_URI=...`