Pretix ist ein Ticketshop mit zahlreicher Funktionen und erweiterbar mit Plugins. Es eignet sich für kleine Events, wie auch für große Events. Es entstand im Chaos-Umfeld. Pretix bietet personalisierte Tickets, Rabattcodes, zahlreiche Zahlungsmethoden und detaillierte Teilnehmerverwaltung.
Datum | Änderungen |
---|---|
12.03.2025 | Anleitung erstellt |
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
- Optional WatchTower
2. Verzeichnis erstellen
Dazu gibst du folgenden Befehl ein:
mkdir -p /opt/containers/pretix/data/{pretix/{config,data},database/data} chown -R 15371:15371 /opt/containers/pretix/data/pretix/{config,data}
Pretix läuft mit dem User pretixuser
mit der UID 15371. Daher müssen alle Dateien, die mit dem Pretix selbst interagieren, diesen User zugeordnet werden.
3. Docker Compose erstellen
Als Erstes öffnest du die docker-compose.yml
-Datei …
nano /opt/containers/pretix/docker-compose.yml
… und kopierst Folgendes hinein.
services: pretix: build: dockerfile: Dockerfile restart: unless-stopped healthcheck: test: ["CMD", "curl", "-fsSL", "http://localhost/healthcheck/"] interval: 10s timeout: 3s retries: 3 depends_on: - database - cache volumes: - ./data/pretix/config/:/etc/pretix/ - ./data/pretix/data/:/data/ environment: PRETIX_SECTION_CONFIG: /etc/pretix/pretix.cfg PRETIX_PRETIX_INSTANCE_NAME: ${PRETIX_NAME:-Pretix} PRETIX_PRETIX_URL: https://$PRETIX_DOMAIN PRETIX_PRETIX_CURRENCY: ${PRETIX_CURRENCY:-EUR} PRETIX_LOCALE_DEFAULT: ${PRETIX_LOCALE:-de} PRETIX_LOCALE_TIMEZONE: ${PRETIX_TIMEZONE:-Europe/Berlin} PRETIX_LANGUAGES_ENABLED: ${PRETIX_LANGUAGES:-de,en} PRETIX_DATABASE_PASSWORD: $PRETIX_DB_PASSWORD PRETIX_MAIL_HOST: $PRETIX_MAIL_HOST PRETIX_MAIL_PORT: $PRETIX_MAIL_PORT PRETIX_MAIL_PASSWORD: $PRETIX_MAIL_PASSWORD PRETIX_MAIL_TLS: ${PRETIX_MAIL_TLS:-off} PRETIX_MAIL_SSL: ${PRETIX_MAIL_SSL:-off} PRETIX_MAIL_FROM: $PRETIX_MAIL_FROM PRETIX_MAIL_ADMINS: ${PRETIX_MAIL_ADMINS:-''} PRETIX_PRETIX_LOGLEVEL: ${PRETIX_LOGLEVEL:-INFO} PRETIX_DJANGO_DEBUG: ${PRETIX_DEBUG:-False} labels: com.centurylinklabs.watchtower.enable: true traefik.enable: true traefik.http.routers.pretix.entrypoints: websecure traefik.http.routers.pretix.rule: Host(`$PRETIX_DOMAIN`) traefik.http.routers.pretix.tls.certresolver: http_resolver traefik.http.services.pretix.loadbalancer.server.port: 80 networks: - proxy - default database: image: postgres:16-alpine restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready"] interval: 10s timeout: 5s volumes: - ./data/database/data:/var/lib/postgresql/data environment: POSTGRES_DB: pretix POSTGRES_USER: pretix POSTGRES_PASSWORD: $PRETIX_DB_PASSWORD labels: com.centurylinklabs.watchtower.enable: true networks: - default cache: image: redis:7 restart: unless-stopped healthcheck: test: ["CMD-SHELL", "[ \"$(redis-cli ping)\" = \"PONG\" ]"] interval: 10s timeout: 3s labels: com.centurylinklabs.watchtower.enable: true networks: - default networks: proxy: external: true
4. .env
-Datei erstellen
Die .env
-Datei öffnest du mit folgendem Command …
nano /opt/containers/pretix/.env
… und kopierst den folgenden Inhalt hinein.
PRETIX_DOMAIN= PRETIX_NAME= PRETIX_DB_PASSWORD= PRETIX_MAIL_HOST= PRETIX_MAIL_PORT= PRETIX_MAIL_USER= PRETIX_MAIL_PASSWORD= PRETIX_MAIL_TLS=off PRETIX_MAIL_SSL=on PRETIX_MAIL_FROM= PRETIX_MAIL_ADMINS=
PRETIX_DOMAIN
: Die Domain, unter der Pretix erreicht werden soll. Wird für Traefik und Pretix selbst verwendet.PRETIX_NAME
: Der Name, der auf der Webseite angezeigt wird.PRETIX_DB_PASSWORD
: Das Datenbankpasswort von Postgres für den normalen Betrieb.PRETIX_MAIL_HOST
,USER
,PASSWORD
,PORT
,TLS
,SSL
: Die Verbindungsdaten zum SMTP-Server
: Absenderadresse für allgemeine Mails, die von Pretix versendet werden.PRETIX
_MAIL_FROMPRETIX_MAIL_ADMINS
: Eine kommaseparierte Liste an E-Mail-Adressen, die informiert werden soll, wenn ein 500er-Fehler auftritt.
4.1 Datenbankpasswort generieren
Um sichere Passwörter für
zu erstellen, kannst du den folgenden Command ausführen und das Ergebnis in die Variable eintragen.PRETIX_DB_PASSWORD
openssl rand -base64 48 | tr -dc 'a-zA-Z0-9!@#%^&*()-_=+[]{}?' && echo
Ich empfehle hier Anführungszeichen um den Variablenwert zu setzen. Als Beispiel:
PRETIX_DB_PASSWORD="ttQNU7apVBCIS7HXqafkmqHJHYrC4VnKH2Q0JRZgh7+jzTXuDFDOra5EDHZqte4u"
5. Konfigurationsdatei erstellen
Als Nächstes erstellst du die Konfigurationsdatei für Pretix, setzt die Berechtigungen und öffnest diese.
touch /opt/containers/pretix/data/pretix/config/pretix.cfg chown -R 15371:15371 /opt/containers/pretix/data/pretix/config/pretix.cfg nano /opt/containers/pretix/data/pretix/config/pretix.cfg
Das Folgende kopierst du dort hinein.
[pretix] datadir=/data trust_x_forwarded_for=on trust_x_forwarded_proto=on trust_x_forwarded_host=on [database] backend=postgresql name=pretix user=pretix host=database [redis] location=redis://cache/0 sessions=true [celery] backend=redis://cache/1 broker=redis://cache/2
Die aktuelle Konfiguration ist so eingestellt, dass du nur in der .env
-Datei Änderungen vornehmen musst. Du kannst auch statt der oben definierten Umgebungsvariablen in der Config-Datei definieren. Weitere Konfigurationswerte findest du in der Dokumentation von Pretix.
6. Dockerfile erstellen
Da Features nur über Plugins verfügbar sind, muss man dafür ein eigenes Image benutzen, wo die Plugins installiert sind. Dafür erstellst du ein Dockerfile.
nano /opt/containers/pretix/Dockerfile
Und kopierst Folgendes hinein.
FROM pretix/standalone:stable USER root RUN pip3 install pretix-passbook && \ rm -rf ~/.cache/pip USER pretixuser RUN cd /pretix/src && make production
7. Cronjob erstellen
Einige Aufgaben wie Versand von Benachrichtigungen werden im Hintergrund ausgeführt. Dafür muss regelmäßig ein Command ausgeführt werden. Das wird mit einem sogenannten Cronjob ausgeführt.
Dazu öffnest du die Konfigurationsdatei von Cron-Daemon auf dem Host.
crontab -e
Dort wählst du den gewünschten Editor aus und fügst in einer freien Zeile folgende Zeile ein.
15,45 * * * * /usr/bin/docker compose -f /opt/containers/pretix/docker-compose.yml exec -T pretix pretix cron
Der Command wird jeder Stunde 15 Minuten und 45 Minuten ausgeführt. Pretix empfiehlt zwischen jeder Minute und jeder Stunde einzustellen. Eine alternative Schreibweise wäre */30
statt 15,45
. Dort wird alle 30 Minuten der Command ausgeführt.
8. Image bauen
Docker Compose baut selbstständig beim Erstellen der Container das Image. Trotzdem hier der explizite Weg. Um das Image zu bauen, verwendest du den folgenden Command.
docker compose -f /opt/containers/pretix/docker-compose.yml build
Wenn du sicherstellen willst, dass wirklich alles neu gebildet wird kannst du auch folgenden Command verwenden.
docker compose -f /opt/containers/pretix/docker-compose.yml build --no-cache --pull
9. Stack starten
Wenn du oben alles erledigt hast, kannst du den Stack starten mit dem folgenden Command:
docker compose -f /opt/containers/pretix/docker-compose.yml up -d
Es kann beim ersten Start bis zu einer Minute dauern, bis Wallabag vollständig initialisiert und gestartet ist.
10. Erster Login
Wenn alles geklappt hat, kannst du dich jetzt auf deiner Pretix-Seite https://pretix.example.de/control/login
anmelden, mit dem Username admin@localhost
und als Passwort admin
.
11. Plugin hinzufügen
Wie schon erwähnt, gibt es viele Features als Plugin. Diese findest du auf der Marketplace-Seite. Wenn du zum Beispiel SEPA-Lastschriftverfahren anbieten willst, kannst du das „SEPA Direct Debits“ Plugin dafür nutzen. Auf der entsprechenden Seite im Tab „Instructions“ wird dir gezeigt, wie du das Plugin manuell installieren kannst. Wichtig daraus ist die Zeile.
(venv)$ pip install pretix-sepadebit
Dort siehst du, wie das PIP-Package heißt. Dieses Package kannst du in das Dockerfile einfügen als weiteres Plugin.
nano /opt/containers/pretix/Dockerfile
FROM pretix/standalone:stable USER root RUN pip3 install pretix-passbook pretix-sepadebit && \ rm -rf ~/.cache/pip USER pretixuser RUN cd /pretix/src && make production
12. Links
- Webseite: https://pretix.eu/
- Documentation: https://docs.pretix.eu/
- Git-Repository: https://github.com/pretix/pretix
- Configuration: https://docs.pretix.eu/self-hosting/config/
- Plugin Marketplace: https://marketplace.pretix.eu/