## Summary
- nginx `v0.1.0` → `v0.1.1`: bakes default white-label routing config, fixes `/admin` 404
- cms `v0.1.0` → `v0.1.1`: white-label email templates driven by `SHOP_*` env vars
## Smoke test (run on server after merge)
```sh
docker compose pull nginx cms
docker compose up -d
curl -sS -o /dev/null -w "%{http_code}" http://localhost:8080/admin
# expect 200 or 302 (not 404)
```
Reviewed-on: #1
Co-authored-by: Michael Czechowski <mail@dailysh.it>
Co-committed-by: Michael Czechowski <mail@dailysh.it>
libreshop/demo
Standalone preview of the libreshop
toolkit. Composes cms, mail, pdf, nginx, shop (plus a
Postgres for the CMS) with placeholder env so the stack runs
clickably without any adapter.
This is the white-label preview — no muellerprints branding, no
specific product catalogue, no production credentials. Adapters
(e.g. mp) replace the
compose.yaml here with their own composition + branding env.
Quick start
git clone https://git.librete.ch/libreshop/demo
cd demo
cp .env.example .env
docker compose pull
docker compose up -d
Open http://localhost:8080 — nginx fronts
the Nuxt shop on :9999 and proxies /api/* to Strapi on :5555.
Strapi admin: log into the CMS at
http://localhost:8080/admin and create the first admin user on
first launch.
What is and isn't in the demo
In:
- All five libreshop component images, pinned to
:v0.1.0. - Postgres for the CMS (
postgres:16-alpine). - Inter-service networking via the
internalanddatadocker networks. - Healthchecks per service.
Out:
- Real SMTP — mail stays in stdout-log mode unless you fill the
MAIL_SMTP_RELAY_*block in.env. - Real PayPal —
PAYMENT_ENVIRONMENT=sandboxwith no client ID. - TLS — nginx serves plain HTTP on port 8080. Front it with caddy / another reverse proxy + Let's Encrypt for a public deployment.
- Production data — the CMS starts empty.
Versions
.env.example pins every component to a :v0.1.0 tag. To test the
rolling :main of one component, override its tag:
LIBRESHOP_CMS_TAG=main docker compose up -d cms
Each component publishes :main, :sha-<7>, :vX.Y.Z, and :latest
(latest only on tag pushes). For reproducible runs always pin a
specific :vX.Y.Z.
Troubleshooting
- Strapi takes 2-5 min to start on first run (DB init + admin
setup). The
start_period: 5mhealthcheck accommodates this. pull access denied— the libreshop registry is currently read-public, so anonymous pull works. If you see auth errors on pull, either the package was unpublished or your docker daemon is hitting a stale credential. Trydocker logout git.librete.ch.- CORS / origin mismatches —
SHOP_SITE_URLandNGINX_HOSTin.envmust match the URL you actually open in a browser.
Contributing
The demo composition follows the libreshop adapter contract — env
overrides + bind-mounted volumes only, no docker exec patches into
running containers. If a new env var is needed for an adapter, raise
it on the relevant component repo (e.g.
git.librete.ch/libreshop/cms/issues) and the demo will pick it up
on the next release.