[Blog](https://deploywithox.com/blog) [Guides](https://deploywithox.com/blog#c-guides) # How to self-host pretix ticketing on your own Ubuntu VPS Run pretix v2026.8.0, the open source ticket shop, on your own Ubuntu server with ox and no Docker: Postgres, Redis, Celery and a media server, as it ran. Saurav Sharma Oct 17, 2026 10 min read On this page - [What you need](https://deploywithox.com/blog/self-host-pretix#what-you-need) - [The steps](https://deploywithox.com/blog/self-host-pretix#steps) - [The ox.toml, line by line](https://deploywithox.com/blog/self-host-pretix#config) - [Postgres, Redis and backups](https://deploywithox.com/blog/self-host-pretix#services) - [Frequently asked questions](https://deploywithox.com/blog/self-host-pretix#faq) To self-host pretix you need an Ubuntu server, a fork of the pretix repo with an `ox.toml` and one small Python file added, and 19 variables, most of them fixed values or references that ox fills in. In our run the first deploy took about 5 minutes, and ox set up Postgres and Redis for it. **How we tested** On Oct 17, 2026, ox deployed pretix v2026.8.0 from commit [`f7863c9f`](https://github.com/pretix/pretix/commit/f7863c9feea1d366acb6e215aee2425582f56656) on a fresh DigitalOcean server with 8 vCPUs and 16 GB of memory. The run then redeployed it, backed it up and rebooted the server. Then a separate test agent, one that did not write the config, signed in, created an organizer and an event, and saw the event listed after a reload, and checked the app's services and its backup. [pretix](https://github.com/pretix/pretix) is ticket sales software for events. An organizer sets up an event in the control panel, and ticket buyers use a shop page for that event. It is a Django app: Postgres holds the data, Redis holds the cache, the sessions and the task queue, and a Celery worker sends mail and runs background tasks such as exports. The code is under the GNU AGPL version 3 with additional terms: the pretix notice stays at the bottom of its pages, and offering pretix as a service to others has conditions. Read the `LICENSE` file first if that is your plan. ox deployed pretix v2026.8.0 (commit f7863c9f) on Oct 17, 2026 on a fresh DigitalOcean server with 8 vCPUs and 16 GB of memory; the first deploy took 5 minutes and a redeploy took 2 minutes. - **First deploy:** 5 minutes, from adding the project until the app passed the run's first checks. - **Redeploy of the same commit:** 2 minutes, until the app passed the checks again. - **Server:** DigitalOcean, 8 vCPUs and 16 GB of memory (`s-8vcpu-16gb`), with this app alone on it. Every one of the 85 apps we deployed ran on this one size, so it was not picked for this app. - **Memory in use after the reboot:** 8565 MB of 15986 MB, for the whole server: Ubuntu, the app and its staging copy, its services, Caddy and the ox agent. On a server with no apps, ox's tests on real servers hold the agent to 40 MB or less and Caddy to 50 MB or less. - **Services ox runs for it:** `postgres`, `redis`. - **Background processes:** `mediafiles`, `worker`, each its own systemd unit beside the web process. - **Scheduled jobs:** `runperiodic`. - **Source:** [github.com/pretix/pretix](https://github.com/pretix/pretix) at v2026.8.0, commit [`f7863c9f`](https://github.com/pretix/pretix/commit/f7863c9feea1d366acb6e215aee2425582f56656). The pretix log-in page ## What you need - An Ubuntu LTS server where you can run one command as root. The run used the size in the facts above. ox works on any server from 1 GB up and tells you when memory is why an app stopped. - A GitHub account to fork `pretix/pretix`, and an ox account, which you open by signing in with GitHub. - A mail server, if you want pretix to send mail. The run sent its mail to a test catcher, so a real provider was not tested. Selling a ticket, payment providers and the check-in apps were not tested either. ## The steps In the ox dashboard, press Add a server. It shows one install command with a fresh token in it. Run it as root on the server. Fork `pretix/pretix` and check out the tag `v2026.8.0`, the release the run deployed. Add the `ox.toml` at the root and the Python file at `deployment/ox/media.py`, both shown below, then commit and push. Write a file named `pretix.env` on your laptop with the 19 keys from the variables section. The secret key is yours to make: the run used a random hex string, and `openssl rand -hex 32` makes one. With the [ox CLI](https://deploywithox.com/docs/cli) signed in, run: Shell ```bash ox new /pretix ox review pretix --from-file pretix.env --wait ``` The review saves your values and starts the first deploy, and `--wait` prints the run's log until it ends. The browser has the same two steps, which the [quickstart](https://deploywithox.com/docs/quickstart) shows. When the deploy is green, open the address ox shows. The page only says "Hello!" and links to `/control/`, the control panel. Sign in there as `admin@localhost` with the password `admin`. pretix's first migration makes that user, so no variable sets it. Every install starts with this password, and pretix's docs expect you to change it after the first sign-in. Until you do, anyone who reaches the address can sign in with it. Press Admin mode in the top bar, because pretix refuses to create an organizer without it. Open Organizers, choose Create a new organizer and name it, then create an event with a name, a short form and a date. The test agent did this and, after a reload, found the event in the Events list, marked Shop disabled. The run used the preview address only. A domain of your own was not part of it, and the [domains page](https://deploywithox.com/docs/operate/domains) covers how ox adds one. ## The ox.toml, line by line TOML ```toml # pretix on ox, following the Docker image (Dockerfile, deployment/docker/). # Settings come from PRETIX_
_