feat: standalone libreshop demo stack pinned to v0.1.0

White-label preview: brings up cms + cms-db + mail + pdf + nginx +
shop with placeholder env so the toolkit runs clickably without
any adapter. Adapters (e.g. mp) replace compose.yaml with their own
composition + branding env.

Every libreshop component image is pinned to :v0.1.0 — override per
service via LIBRESHOP_<SVC>_TAG in .env if testing rolling :main.
.env.example documents every variable; mail stays in stdout-log
mode and PayPal stays in sandbox/no-creds mode by default.
This commit is contained in:
Michael Czechowski
2026-04-29 18:18:44 +02:00
commit f3b663d36f
4 changed files with 304 additions and 0 deletions

42
.env.example Normal file
View File

@@ -0,0 +1,42 @@
# libreshop/demo — copy to .env and edit. Defaults below are
# placeholder values; the stack boots clickably with them but mail
# stays in stdout-log mode and PayPal stays in sandbox/no-creds mode.
# Pinned versions (override per service if you want to test :main).
LIBRESHOP_CMS_TAG=v0.1.0
LIBRESHOP_MAIL_TAG=v0.1.0
LIBRESHOP_PDF_TAG=v0.1.0
LIBRESHOP_SHOP_TAG=v0.1.0
LIBRESHOP_NGINX_TAG=v0.1.0
# Where the demo binds nginx (host port).
LIBRESHOP_DEMO_PORT=8080
# Strapi DB (local-only credentials; rotate for any non-toy run).
CMS_DB_NAME=libreshop
CMS_DB_USER=libreshop
CMS_DB_PASSWORD=changeme-in-prod
# Strapi secrets — generate real values with: openssl rand -base64 32
CMS_JWT_SECRET=changeme-jwt-secret-32-bytes-min!!!
CMS_API_TOKEN_SALT=changeme-api-token-salt
CMS_ADMIN_JWT_SECRET=changeme-admin-jwt-secret
CMS_APP_KEYS=key-a,key-b,key-c,key-d
CMS_TRANSFER_TOKEN_SALT=changeme-transfer-salt
ADMIN_EMAIL_ADDRESS=admin@example.invalid
# Mail relay — leave blank for stdout-log mode (no real email sent).
MAIL_SMTP_RELAY_HOST=
MAIL_SMTP_RELAY_PORT=587
MAIL_SMTP_RELAY_USERNAME=
MAIL_SMTP_RELAY_PASSWORD=
# Shop runtime — placeholder demo token, no PayPal client.
SHOP_API_TOKEN=demo-shop-api-token
SHOP_SITE_URL=http://localhost:8080
SHOP_BASE_URL=/
PAYMENT_ENVIRONMENT=sandbox
PAYPAL_CLIENT_ID=
# Nginx host header (browser sees this; localhost is fine for the demo).
NGINX_HOST=localhost