220 lines
3.5 KiB
Markdown
220 lines
3.5 KiB
Markdown
# 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
|
|
|
|
```text
|
|
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. |