Initial Testversion

This commit is contained in:
Matthias Lotz 2026-04-12 13:24:45 +02:00
commit 9da19bc533
2 changed files with 313 additions and 0 deletions

200
README.md Normal file
View File

@ -0,0 +1,200 @@
# pretix-Testinstanz unter WSL mit Docker
Dieses Verzeichnis enthaelt ein lokales Test-Setup fuer pretix unter WSL Ubuntu 22.04 mit Docker Desktop.
## Voraussetzungen
- Windows 11 mit installiertem Docker Desktop
- In Docker Desktop: WSL Integration fuer deine Ubuntu-Distribution aktivieren
- Die Dateien sollten im Linux-Dateisystem liegen, also z. B. unter `/home/<user>/...` und nicht unter `/mnt/c/...`
## Start
1. Datenverzeichnis anlegen und fuer den pretix-Container beschreibbar machen:
```bash
mkdir -p data
sudo chown -R 15371:15371 data
```
2. Container starten:
```bash
docker compose up -d
```
3. Logs pruefen, bis pretix sauber hochgefahren ist:
```bash
docker compose logs -f pretix
```
Optional kannst du auch den periodischen Cronlauf pruefen:
```bash
docker compose logs -f pretix-cron
```
4. Im Browser oeffnen:
- pretix: http://localhost:8345/control/
- Test-Mailbox: http://localhost:8025
## Standardzugang
Laut offizieller pretix-Dokumentation ist nach dem ersten Start ein Admin-Zugang unter `admin@localhost` mit dem Passwort `admin` verfuegbar. Das Passwort solltest du direkt nach dem Login aendern.
## Erste Schritte in pretix
Ja: Nach dem ersten Login ist ein Organizer der erste sinnvolle Schritt. Der Organizer ist in pretix die organisatorische Einheit, unter der spaeter Events, Produkte, Rechnungen und Einstellungen verwaltet werden.
### Empfohlene Reihenfolge fuer die erste Einrichtung
1. Passwort des Admin-Benutzers aendern.
2. Einen Organizer anlegen.
3. Ein Test-Event anlegen.
4. Mindestens ein Ticketprodukt anlegen.
5. Den Shop im Frontend pruefen.
6. Eine Testbestellung ausloesen.
7. E-Mail-Eingang in Mailpit kontrollieren.
### 1. Organizer anlegen
- Im Backend auf `Organizer erstellen` klicken.
- Einen Namen vergeben, z. B. `Test Organizer`.
- Eine kurze Kennung oder einen Slug vergeben, falls pretix danach fragt.
- Adresse, E-Mail und weitere Stammdaten kannst du fuer den Test zunaechst minimal ausfuellen und spaeter nachziehen.
### 2. Event anlegen
- Innerhalb des Organizers ein neues Event erstellen.
- Als Titel z. B. `Testevent 2026` waehlen.
- Eine Zeitzone setzen, sinnvollerweise `Europe/Berlin`.
- Ein Datum in der Zukunft waehlen, damit das Event nicht direkt als abgelaufen wirkt.
- Die Standardwaehrung sollte in diesem Setup bereits auf `EUR` stehen.
### 3. Ticketprodukt anlegen
- Im Event zu den Produkten wechseln.
- Ein neues Produkt vom Typ Ticket anlegen.
- Beispielwerte fuer den Test:
- Name: `Standardticket`
- Preis: `10,00 EUR`
- Verfuegbarkeit: z. B. `100`
- Das Produkt speichern und sicherstellen, dass es sichtbar und verkaeuflich ist.
### 4. Shop testen
- Im Event die Vorschau oder den Shop-Link oeffnen.
- Pruefen, ob das Ticket im Frontend erscheint.
- Ein Ticket in den Warenkorb legen und eine Testbestellung abschicken.
### 5. E-Mails pruefen
- Die Testinstanz liefert E-Mails an Mailpit aus, nicht an ein echtes Postfach.
- Mailpit erreichst du unter `http://localhost:8025`.
- Dort solltest du Bestell- oder System-E-Mails fuer den Test sehen.
### Sinnvoller Minimaltest
Wenn du pretix nur einmal durchklicken willst, reicht dieser Ablauf:
1. Organizer erstellen.
2. Event erstellen.
3. Ein Ticketprodukt anlegen.
4. Shop-Link oeffnen.
5. Testbestellung absenden.
6. E-Mail in Mailpit kontrollieren.
---
## Praxisbeispiel: Kostenlose Veranstaltungsreihe Mo-Do mit Anmeldepflicht
### Warum "Quota braucht ein Datum" und was das bedeutet
pretix unterscheidet zwischen:
- **Einzelevent**: Ein festes Datum, eine einzige Quota. Keine Datumsauswahl in der Quota noetig.
- **Veranstaltungsreihe** (Sub-Events): Mehrere Termine unter einem Event. Jede Quota kann sich auf bestimmte Termine beziehen.
Wenn du bei der Quota ein Datum auswaehlen willst (oder musst), aber keines angezeigt wird, bedeutet das: das Event ist noch kein Serienevent. Sub-Events muessen erst aktiviert werden.
### Schritt 1: Sub-Events am Event aktivieren
1. Ins Event wechseln → **Einstellungen****Allgemein** (oder **Konfiguration**).
2. Die Option **"Dieses Event hat mehrere Termine / Sub-Events"** (englisch: *"This event has multiple dates"*) aktivieren.
3. Speichern.
Danach erscheint im linken Menue ein neuer Punkt: **Termine** (oder **Sub-Events**).
### Schritt 2: Die einzelnen Termine anlegen
Jeden Wochentermin einmal anlegen. Beispiel fuer eine Woche:
| Name | Datum | Beginn | Ende |
|------------------|-------------|--------|-------|
| Montag-Session | 13.04.2026 | 17:30 | 18:00 |
| Dienstag-Session | 14.04.2026 | 17:30 | 18:00 |
| Mittwoch-Session | 15.04.2026 | 17:30 | 18:00 |
| Donnerstag-Session | 16.04.2026 | 17:30 | 18:00 |
Fuer laufende Serien empfiehlt es sich, alle Termine einer Woche auf einmal anzulegen oder eine Woche spater zu ergaenzen.
> **Tipp**: Es gibt keine automatische Wiederholung in pretix. Jeder Termin muss einzeln angelegt werden entweder manuell oder per API.
### Schritt 3: Kostenfreies Produkt anlegen (falls nicht schon passiert)
- Name z. B. `Anmeldung`
- Preis: `0,00 EUR`
- Das Produkt muss trotz Nullpreis angelegt sein, damit pretix die Buchung als "Bestellung" behandelt.
### Schritt 4: Quota anlegen
- Zu **Quotas** wechseln → neue Quota anlegen.
- Kontingent z. B. `20` (Maximale Teilnehmerzahl pro Termin).
- Unter **"Gilt fuer Termine"** jetzt die gewuenschten Sub-Events auswaehlen.
- Jeder Termin bekommt idealerweise eine eigene Quota, damit die Kapazitaet pro Tag separat gilt.
### Schritt 5: Shop pruefen
- Den Shop-Link des Events oeffnen.
- Eine der Termine auswaehlen und kostenlos anmelden.
- Bestaetigung in Mailpit pruefen (`http://localhost:8025`).
### Zusammenfassung des Datenmodells fuer diesen Fall
```
Organizer
└── Event "Wochentreffen" (Sub-Events aktiviert)
├── Sub-Event "Montag 13.04."
├── Sub-Event "Dienstag 14.04."
├── Sub-Event "Mittwoch 15.04."
├── Sub-Event "Donnerstag 16.04."
├── Produkt "Anmeldung" (0,00 EUR)
└── Quotas (je Termin, z. B. 20 Plaetze)
```
## Cron-Hinweis
pretix erwartet, dass regelmaessig `pretix cron` ausgefuehrt wird. In diesem Test-Setup uebernimmt das der Dienst `pretix-cron` automatisch alle 5 Minuten. Direkt nach dem ersten Start kann die Warnung im Dashboard noch kurz sichtbar sein, bis der erste Lauf erfolgt ist.
## Stoppen und Aufraeumen
- Stoppen:
```bash
docker compose down
```
- Stoppen und auch Datenbank/Redis-Daten entfernen:
```bash
docker compose down -v
```
- Das Verzeichnis `data/` bleibt dabei erhalten. Wenn du wirklich ganz von vorn beginnen willst, kannst du es zusaetzlich loeschen.
## Wichtige Hinweise
- Diese Konfiguration ist nur fuer lokale Tests gedacht.
- Fuer produktiven Betrieb solltest du der offiziellen pretix-Doku folgen und HTTPS, Reverse Proxy, Backup und Härtung sauber einrichten.

113
docker-compose.yml Normal file
View File

@ -0,0 +1,113 @@
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: pretix
POSTGRES_USER: pretix
POSTGRES_PASSWORD: ${PRETIX_DB_PASSWORD:-pretix_test_password}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pretix -d pretix"]
interval: 10s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --save 60 1 --loglevel warning
volumes:
- redis-data:/data
mailpit:
image: axllent/mailpit:latest
restart: unless-stopped
ports:
- "127.0.0.1:8025:8025"
pretix:
image: pretix/standalone:stable
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
mailpit:
condition: service_started
ports:
- "127.0.0.1:8345:80"
environment:
PRETIX_PRETIX_INSTANCE_NAME: "pretix Testinstanz"
PRETIX_PRETIX_URL: "http://localhost:8345"
PRETIX_PRETIX_CURRENCY: "EUR"
PRETIX_PRETIX_DATADIR: "/data"
PRETIX_LOCALE_DEFAULT: "de"
PRETIX_LOCALE_TIMEZONE: "Europe/Berlin"
PRETIX_DATABASE_BACKEND: "postgresql"
PRETIX_DATABASE_NAME: "pretix"
PRETIX_DATABASE_USER: "pretix"
PRETIX_DATABASE_PASSWORD: "${PRETIX_DB_PASSWORD:-pretix_test_password}"
PRETIX_DATABASE_HOST: "db"
PRETIX_DATABASE_PORT: "5432"
PRETIX_MAIL_FROM: "pretix-test@localhost"
PRETIX_MAIL_HOST: "mailpit"
PRETIX_MAIL_PORT: "1025"
PRETIX_MAIL_TLS: "off"
PRETIX_MAIL_SSL: "off"
PRETIX_REDIS_LOCATION: "redis://redis:6379/0"
PRETIX_REDIS_SESSIONS: "true"
PRETIX_CELERY_BACKEND: "redis://redis:6379/1"
PRETIX_CELERY_BROKER: "redis://redis:6379/2"
volumes:
- pretix-data:/data
command: all
pretix-cron:
image: pretix/standalone:stable
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
mailpit:
condition: service_started
pretix:
condition: service_started
environment:
PRETIX_PRETIX_INSTANCE_NAME: "pretix Testinstanz"
PRETIX_PRETIX_URL: "http://localhost:8345"
PRETIX_PRETIX_CURRENCY: "EUR"
PRETIX_PRETIX_DATADIR: "/data"
PRETIX_LOCALE_DEFAULT: "de"
PRETIX_LOCALE_TIMEZONE: "Europe/Berlin"
PRETIX_DATABASE_BACKEND: "postgresql"
PRETIX_DATABASE_NAME: "pretix"
PRETIX_DATABASE_USER: "pretix"
PRETIX_DATABASE_PASSWORD: "${PRETIX_DB_PASSWORD:-pretix_test_password}"
PRETIX_DATABASE_HOST: "db"
PRETIX_DATABASE_PORT: "5432"
PRETIX_MAIL_FROM: "pretix-test@localhost"
PRETIX_MAIL_HOST: "mailpit"
PRETIX_MAIL_PORT: "1025"
PRETIX_MAIL_TLS: "off"
PRETIX_MAIL_SSL: "off"
PRETIX_REDIS_LOCATION: "redis://redis:6379/0"
PRETIX_REDIS_SESSIONS: "true"
PRETIX_CELERY_BACKEND: "redis://redis:6379/1"
PRETIX_CELERY_BROKER: "redis://redis:6379/2"
volumes:
- pretix-data:/data
entrypoint:
- /bin/sh
- -c
command:
- 'while true; do pretix cron; sleep 300; done'
volumes:
postgres-data:
redis-data:
pretix-data: