docs(deployment): add 2026-02-14 progress and update platform domains
Some checks failed
CI / pytest (push) Successful in 34m7s
CI / dependency-scanning (push) Successful in 26s
CI / audit (push) Successful in 7s
CI / ruff (push) Successful in 9s
CI / architecture (push) Successful in 11s
CI / docs (push) Failing after 36s
CI / deploy (push) Failing after 3s

Updates hetzner-server-setup.md with:
- Wizamart → Orion rename completion
- Production DB rebuild with orion_db/orion_user
- Platform domains: wizard.lu, oms.lu, rewardflow.lu
- .dockerignore and env_file additions
- CapacitySnapshot fix
- loyaltyplus.lu → rewardflow.lu throughout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-14 20:07:23 +01:00
parent 688896d856
commit 62e418c473

View File

@@ -54,9 +54,26 @@ Complete step-by-step guide for deploying Orion on a Hetzner Cloud VPS.
**Deferred (not urgent, do when all platforms ready):**
- [ ] DNS A + AAAA records for platform domains (`oms.lu`, `loyaltyplus.lu`)
- [ ] DNS A + AAAA records for platform domains (`oms.lu`, `rewardflow.lu`)
- [ ] Uncomment platform domains in Caddyfile after DNS propagation
- [ ] Update `platforms` table `domain` column to match production domains
!!! success "Progress — 2026-02-14"
**Completed:**
- **Wizamart → Orion rename** — 1,086 occurrences replaced across 184 files (database identifiers, email addresses, domains, config, templates, docs, seed data)
- Template renamed: `homepage-wizamart.html``homepage-orion.html`
- **Production DB rebuilt from scratch** with Orion naming (`orion_db`, `orion_user`)
- Platform domains configured in seed data: wizard.lu (main), oms.lu, rewardflow.lu (loyalty)
- Docker volume explicitly named `orion_postgres_data`
- `.dockerignore` added — prevents `.env` from being baked into Docker images
- `env_file: .env` added to `docker-compose.yml` — containers load host env vars properly
- `CapacitySnapshot` model import fixed (moved from billing to monitoring in `alembic/env.py`)
- All services verified healthy at `https://api.wizard.lu/health`
**Next steps:**
- [ ] Step 17: Backups — verify Hetzner backup scope, add PostgreSQL pg_dump
- [ ] Step 18: Monitoring & observability — Prometheus, Grafana, uptime checks, alerting
## Installed Software Versions
@@ -386,7 +403,7 @@ docker compose --profile full exec -e PYTHONPATH=/app api python scripts/seed/se
| Data | Count |
|---|---|
| Admin users | 1 (`admin@orion.lu`) |
| Admin users | 1 (`admin@wizard.lu`) |
| Platforms | 3 (OMS, Main, Loyalty+) |
| Admin settings | 15 |
| Subscription tiers | 4 (Essential, Professional, Business, Enterprise) |
@@ -417,7 +434,7 @@ Before setting up Caddy, point your domain's DNS to the server.
| A | `@` | `91.99.65.229` | 300 |
| A | `www` | `91.99.65.229` | 300 |
### loyaltyplus.lu (Loyalty+ Platform) — TODO
### rewardflow.lu (Loyalty+ Platform) — TODO
| Type | Name | Value | TTL |
|---|---|---|---|
@@ -442,7 +459,7 @@ It should match the value in the Hetzner Cloud Console (Networking tab). Then cr
| AAAA | `git` | `2a01:4f8:1c1a:b39c::1` | 300 |
| AAAA | `flower` | `2a01:4f8:1c1a:b39c::1` | 300 |
Repeat for `oms.lu` and `loyaltyplus.lu`.
Repeat for `oms.lu` and `rewardflow.lu`.
!!! tip "DNS propagation"
Set TTL to 300 (5 minutes) initially. DNS changes can take up to 24 hours to propagate globally, but usually complete within 30 minutes. Verify with: `dig api.wizard.lu +short`
@@ -484,14 +501,14 @@ www.wizard.lu {
# redir https://oms.lu{uri} permanent
# }
# ─── Platform 3: Loyalty+ (loyaltyplus.lu) ──────────────────
# Uncomment after DNS is configured for loyaltyplus.lu
# loyaltyplus.lu {
# ─── Platform 3: Loyalty+ (rewardflow.lu) ──────────────────
# Uncomment after DNS is configured for rewardflow.lu
# rewardflow.lu {
# reverse_proxy localhost:8001
# }
#
# www.loyaltyplus.lu {
# redir https://loyaltyplus.lu{uri} permanent
# www.rewardflow.lu {
# redir https://rewardflow.lu{uri} permanent
# }
# ─── Services ───────────────────────────────────────────────
@@ -509,7 +526,7 @@ flower.wizard.lu {
```
!!! info "How multi-platform routing works"
All platform domains (`wizard.lu`, `oms.lu`, `loyaltyplus.lu`) point to the **same FastAPI backend** on port 8001. The `PlatformContextMiddleware` reads the `Host` header to detect which platform the request is for. Caddy preserves the Host header by default, so no extra configuration is needed.
All platform domains (`wizard.lu`, `oms.lu`, `rewardflow.lu`) point to the **same FastAPI backend** on port 8001. The `PlatformContextMiddleware` reads the `Host` header to detect which platform the request is for. Caddy preserves the Host header by default, so no extra configuration is needed.
The `domain` column in the `platforms` database table must match:
@@ -517,7 +534,7 @@ flower.wizard.lu {
|---|---|---|
| Main | `main` | `wizard.lu` |
| OMS | `oms` | `oms.lu` |
| Loyalty+ | `loyalty` | `loyaltyplus.lu` |
| Loyalty+ | `loyalty` | `rewardflow.lu` |
Start Caddy:
@@ -574,7 +591,7 @@ When stores start using subdomains like `acme.oms.lu`, add wildcard blocks:
reverse_proxy localhost:8001
}
*.loyaltyplus.lu {
*.rewardflow.lu {
reverse_proxy localhost:8001
}
@@ -777,7 +794,7 @@ sudo systemctl status gitea-runner
| Orion API | 8000 | 8001 | `api.wizard.lu` |
| Main Platform | 8000 | 8001 | `wizard.lu` |
| OMS Platform | 8000 | 8001 | `oms.lu` (TODO) |
| Loyalty+ Platform | 8000 | 8001 | `loyaltyplus.lu` (TODO) |
| Loyalty+ Platform | 8000 | 8001 | `rewardflow.lu` (TODO) |
| PostgreSQL | 5432 | 5432 | (internal only) |
| Redis | 6379 | 6380 | (internal only) |
| Flower | 5555 | 5555 | `flower.wizard.lu` |
@@ -914,7 +931,7 @@ After Caddy is configured:
| Gitea | `https://git.wizard.lu` |
| Flower | `https://flower.wizard.lu` |
| OMS Platform | `https://oms.lu` (after DNS) |
| Loyalty+ Platform | `https://loyaltyplus.lu` (after DNS) |
| Loyalty+ Platform | `https://rewardflow.lu` (after DNS) |
Direct IP access (temporary, until firewall rules are removed):