3.5 KiB
Mintel Alpha Platform — Developer Cheat Sheet
This platform runs real customer websites on their own domains
(e.g. klz-cables.com, marisas.world, shop.customer.de).
You do not manage servers.
You ship Docker containers.
Mintel runs the platform.
Control Plane (Infra)
Internal services (developers only):
Git (Gitea)
https://git.infra.mintel.me
CI (Gitea Actions)
https://git.infra.mintel.me/actions
Container Registry
https://registry.infra.mintel.me
Error Tracking (GlitchTip)
https://errors.infra.mintel.me
Analytics (Umami)
https://analytics.infra.mintel.me
Uptime
https://status.infra.mintel.me
Logs (Dozzle)
https://logs.infra.mintel.me
SMTP
SMTP Config
SMTP_HOST= SMTP_PORT=587 SMTP_SECURE=false SMTP_USER= SMTP_PASS= SMTP_FROM= # muss im projekt gesetzt werden
Shared Image Optimization (imgproxy)
Alle Bilder werden zentral über imgproxy optimiert, resized und in moderne Formate (WebP, AVIF) konvertiert.
Basis-URL
https://img.infra.mintel.me
https://img.infra.mintel.me/unsafe/rs:800x600/plain/https://example.com/bild.jpg
https://img.infra.mintel.me/rs:400x/plain/https://picsum.photos/2000/1333
---
## Production Platform (Alpha)
Alpha runs all customer websites and is publicly reachable.
- Listens on ports 80 / 443
- Runs Traefik
- Routes real domains
- Is isolated from Infra
Customer DNS A records point to the Alpha server IP.
---
## Routing (Traefik)
Routing is host-based.
Each service declares its domains via labels:
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(example.com,www.example.com)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=le
- traefik.http.services.app.loadbalancer.server.port=3000
Traefik:
- terminates TLS
- auto-issues certificates
- supports zero-downtime deploys
---
## Directory layout on Alpha
Each app lives in:
/opt/alpha/sites/APP_NAME
Contains:
docker-compose.yml
.env (optional)
content/
db/
---
## Container Images
All production images are built by CI and pushed to the Mintel Registry.
Registry:
registry.infra.mintel.me
Naming:
registry.infra.mintel.me/ORG/APP_NAME:TAG
Example:
registry.infra.mintel.me/mintel/mb-grid-solutions:latest
---
## Databases
### Postgres (shared)
One Postgres server, many databases.
Connection format:
postgres://infra:infra@postgres:5432/APP_DB
Each app must use its own database.
---
### Redis (shared)
One Redis instance, multiple DB indexes.
redis://redis:6379/1
redis://redis:6379/2
Each app must use its own DB number.
---
## Health checks (required)
Every public service must expose:
GET /health → 200 OK when ready
Used by Traefik for zero-downtime routing.
---
## Error Tracking (GlitchTip)
Each app gets a DSN:
https://PUBLIC_KEY@errors.infra.mintel.me/PROJECT_ID
Set as:
SENTRY_DSN
---
## Analytics (Umami)
Each site gets a website ID.
Include:
https://analytics.infra.mintel.me/script.js
data-website-id=YOUR_ID
---
## Deployment (Gitea Actions)
Flow:
- Push to main
- CI builds image
- Image pushed to registry
- Alpha pulls and runs
- Traefik routes traffic
Deploy target:
deploy@alpha.mintel.me
---
## Monitoring
Errors → GlitchTip
Traffic → Umami
Logs → Dozzle
Uptime → Uptime-Kuma
Infra monitors everything.
---
## Summary
You push code
CI builds images
Registry stores images
Alpha runs containers
Traefik routes domains
Databases are shared but isolated
Deploys are zero-downtime
Everything is monitored
This is a real production platform.