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
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:
@@ -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):**
|
**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
|
- [ ] 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
|
## Installed Software Versions
|
||||||
@@ -386,7 +403,7 @@ docker compose --profile full exec -e PYTHONPATH=/app api python scripts/seed/se
|
|||||||
|
|
||||||
| Data | Count |
|
| Data | Count |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Admin users | 1 (`admin@orion.lu`) |
|
| Admin users | 1 (`admin@wizard.lu`) |
|
||||||
| Platforms | 3 (OMS, Main, Loyalty+) |
|
| Platforms | 3 (OMS, Main, Loyalty+) |
|
||||||
| Admin settings | 15 |
|
| Admin settings | 15 |
|
||||||
| Subscription tiers | 4 (Essential, Professional, Business, Enterprise) |
|
| 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 | `@` | `91.99.65.229` | 300 |
|
||||||
| A | `www` | `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 |
|
| 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 | `git` | `2a01:4f8:1c1a:b39c::1` | 300 |
|
||||||
| AAAA | `flower` | `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"
|
!!! 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`
|
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
|
# redir https://oms.lu{uri} permanent
|
||||||
# }
|
# }
|
||||||
|
|
||||||
# ─── Platform 3: Loyalty+ (loyaltyplus.lu) ──────────────────
|
# ─── Platform 3: Loyalty+ (rewardflow.lu) ──────────────────
|
||||||
# Uncomment after DNS is configured for loyaltyplus.lu
|
# Uncomment after DNS is configured for rewardflow.lu
|
||||||
# loyaltyplus.lu {
|
# rewardflow.lu {
|
||||||
# reverse_proxy localhost:8001
|
# reverse_proxy localhost:8001
|
||||||
# }
|
# }
|
||||||
#
|
#
|
||||||
# www.loyaltyplus.lu {
|
# www.rewardflow.lu {
|
||||||
# redir https://loyaltyplus.lu{uri} permanent
|
# redir https://rewardflow.lu{uri} permanent
|
||||||
# }
|
# }
|
||||||
|
|
||||||
# ─── Services ───────────────────────────────────────────────
|
# ─── Services ───────────────────────────────────────────────
|
||||||
@@ -509,7 +526,7 @@ flower.wizard.lu {
|
|||||||
```
|
```
|
||||||
|
|
||||||
!!! info "How multi-platform routing works"
|
!!! 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:
|
The `domain` column in the `platforms` database table must match:
|
||||||
|
|
||||||
@@ -517,7 +534,7 @@ flower.wizard.lu {
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Main | `main` | `wizard.lu` |
|
| Main | `main` | `wizard.lu` |
|
||||||
| OMS | `oms` | `oms.lu` |
|
| OMS | `oms` | `oms.lu` |
|
||||||
| Loyalty+ | `loyalty` | `loyaltyplus.lu` |
|
| Loyalty+ | `loyalty` | `rewardflow.lu` |
|
||||||
|
|
||||||
Start Caddy:
|
Start Caddy:
|
||||||
|
|
||||||
@@ -574,7 +591,7 @@ When stores start using subdomains like `acme.oms.lu`, add wildcard blocks:
|
|||||||
reverse_proxy localhost:8001
|
reverse_proxy localhost:8001
|
||||||
}
|
}
|
||||||
|
|
||||||
*.loyaltyplus.lu {
|
*.rewardflow.lu {
|
||||||
reverse_proxy localhost:8001
|
reverse_proxy localhost:8001
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -777,7 +794,7 @@ sudo systemctl status gitea-runner
|
|||||||
| Orion API | 8000 | 8001 | `api.wizard.lu` |
|
| Orion API | 8000 | 8001 | `api.wizard.lu` |
|
||||||
| Main Platform | 8000 | 8001 | `wizard.lu` |
|
| Main Platform | 8000 | 8001 | `wizard.lu` |
|
||||||
| OMS Platform | 8000 | 8001 | `oms.lu` (TODO) |
|
| 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) |
|
| PostgreSQL | 5432 | 5432 | (internal only) |
|
||||||
| Redis | 6379 | 6380 | (internal only) |
|
| Redis | 6379 | 6380 | (internal only) |
|
||||||
| Flower | 5555 | 5555 | `flower.wizard.lu` |
|
| Flower | 5555 | 5555 | `flower.wizard.lu` |
|
||||||
@@ -914,7 +931,7 @@ After Caddy is configured:
|
|||||||
| Gitea | `https://git.wizard.lu` |
|
| Gitea | `https://git.wizard.lu` |
|
||||||
| Flower | `https://flower.wizard.lu` |
|
| Flower | `https://flower.wizard.lu` |
|
||||||
| OMS Platform | `https://oms.lu` (after DNS) |
|
| 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):
|
Direct IP access (temporary, until firewall rules are removed):
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user