This repository contains a docker-compose setup for a pretalx installation based on docker.
Use the development overlay to prepare emails in the protected organiser Manual delivery screen:
docker compose -f docker-compose.yml -f compose.dev.yml up -d --buildThe application is then available at http://localhost:8088/orga and the
Mailpit inbox at http://localhost:8026. The overlay leaves SMTP unconfigured,
so Mailpit receives no messages by default. To test SMTP delivery, set the
application service's PRETALX_MAIL_HOST to mail and PRETALX_MAIL_PORT to
1025; Mailpit captures that mail locally. Its SMTP listener is also available
on localhost:1026. Set up a user and an organiser with:
docker exec -it pretalx pretalx initNo messages are delivered externally in this setup. Override
ARC_PRETALX_PORT, ARC_MAILPIT_PORT, or ARC_SMTP_PORT if a development
port is already in use.
Read the ARC production deployment and privacy guide before collecting real applications. It covers debug settings, network exposure, operator permissions and verification of protected document downloads.
-
Edit
conf/pretalx.cfgand fill in your own values (→ configuration documentation) -
Edit
docker-compose.ymland change the line toports: - "127.0.0.1:8346:80"(if you use nginx). Change the database password. -
If you don't want to use docker volumes, create directories for the persistent data and make them read-writeable for the userid 999 and the groupid 999. Change
pretalx-redis,pretalx-database,pretalx-dataandpretalx-publicto the corresponding directories you've chosen. -
Configure a reverse-proxy for better security and to handle TLS. Pretalx listens on port 80 in the
pretalxdockernetwork. You can find a few words on an nginx configuration atreverse-proxy-examples/nginx -
Make sure you serve all requests for the
/static/and/media/paths (whendebug=false). See installation for more information -
Optional: Some of the Gunicorn parameters can be adjusted via environment variables:
- To adjust the number of Gunicorn workers, provide
the container with
GUNICORN_WORKERSenvironment variable. GUNICORN_MAX_REQUESTSandGUNICORN_MAX_REQUESTS_JITTERto configure the requests a worker instance will process before restarting.GUNICORN_FORWARDED_ALLOW_IPSlets you specify which IPs to trust (i.e. which reverse proxies'X-Forwarded-*headers can be used to infer connection security).GUNICORN_BIND_ADDRcan be used to change the interface and port that Gunicorn will listen on. Default:0.0.0.0:80
Here's how to set an environment variable in
docker-compose.ymlor when usingdocker runcommand. - To adjust the number of Gunicorn workers, provide
the container with
-
Run
docker-compose up -d. After a few minutes the setup should be accessible under http://yourdomain.com/orga -
Set up a user and an organizer by running
docker exec -ti pretalx pretalx init. -
Set up a cronjob for periodic tasks like this
15,45 * * * * docker exec pretalx-app pretalx runperiodic
- Run
docker-compose stop,docker-compose pulland finallydocker-compose up -dto upgrade to the newest version.
Back up the database (pretalx-database), pretalx-data and the uploaded media
in pretalx-public. Private application documents and temporary uploads live
in /data/arc-private; public uploads such as avatars live at /public/media.
Neither is regenerable. /public/static is regenerable.
The data volume holds the instance's .secret file used to derive the Django
SECRET_KEY. Losing that secret invalidates signed values such as sessions and
password-reset tokens. Treat all backups as sensitive recruitment data.
- Ansible role without docker: https://github.com/pretalx/ansible-pretalx/
- More complex docker based pretalx installation: https://github.com/allmende/pretalx-docker
To upgrade the repo to a new version, e.g. v2025.2.2, run just release v2025.2.2. This should handle the submodule,
make a properly tagged commit, and push it including the tags.