bullshit

pretix auf einem Uberspace installieren

Diese Anleitung ist nicht mehr aktuell. Eine neue Version findest du hier

Nach dem #bcrn15 gab es Kritik, dass wir die Tickets über Eventbrite ab­ge­wi­ckelt haben. Eventbrite nutzt Server in den Staaten und überhaupt: Da­ten­schutz. Also haben wir uns auf die Suche nach Al­ter­na­ti­ven gemacht.

Eine davon ist pretix, auf das uns Leah Oswald brachte. pretix erfindet Ti­cket­vor­ver­käu­fe neu und wird von Raphael Michel als Open-Source-Projekt entwickelt.

pretix setzt auf Django, es benötigt Python 3. Es gibt zwar eine Do­ku­men­ta­ti­on von pretix, die befindet sich aber noch im Aufbau, ebenso wie pretix selbst. Um testen zu können, ob pretix für das #bcrn16 taugt, habe ich versucht, es auf einem Uberspace zum laufen zu bringen. Dabei sind mir ein, zwei Stol­per­stei­ne auf­ge­fal­len. Im folgenden möchte ich be­schrei­ben, was ich tun musste, damit pretix auf einem Uberspace funk­tio­niert. Der Be­nut­zer­na­me ist barcamp, der Uberspace heisst kaul. Ich möchte noch darauf hinweisen, dass diese In­stal­la­ti­on eine SQLite-Datenbank nutzt. Die Do­ku­men­ta­ti­on sagt dazu:

If you have real users on your system you’ll really want to use

A database (MySQL or PostgreSQL)

A reverse proxy web server (nginx or Apache)

Tut diese Anleitung (noch) nicht.

Im Prinzip habe ich mich an die Anleitung der Ubernauten für Django gehalten. Raphael riet mir außerdem, doch mal einen Blick auf das Dockerfile zu werfen. Auch die Do­ku­men­ta­ti­on von pretix war stel­len­wei­se eine kleine Hilfe.

In einem erste Schritt in­stal­lierst du Django und gunicorn mit:

[barcamp@kaus ~]$ easy_install-3.4 django gunicorn

An­schlies­send lädst du pretix von Github mit einem beherzten

[barcamp@kaus ~]$ git clone https://github.com/pretix/pretix.git

Ich gehe im folgenden davon aus, dass du das Repo in einen Ordner namens pretix geklont hast, der in deinem Home-Ver­zeich­nis liegt. Als nächstes in­stal­lierst du die Ab­hän­gig­kei­ten von pretix mit:

[barcamp@kaus ~]$ npm install less
[b­ar­cam­p@­k­aus ~]$ pip3.4 install -r pretix/src/re­qui­re­ments.txt

Dann musst du in der Datei ~/pretix/src/pretix/settings.py folgendes ergänzen:

USE_X_FORWARDED_HOST = True

Danach kümmerst du dich um die Submodules:

[barcamp@kaus ~]$ cd pretix/
[b­ar­cam­p@­k­aus pretix]$ git submodule init
[b­ar­cam­p@­k­aus pretix]$ git submodule update

Danach kannst du die Datenbank in­itia­li­sie­ren und ein Ad­mi­nis­tra­tor­kon­to erstellen. Das Ad­mi­nis­tra­tor­kon­to brauchst du später, wenn du dich bei deiner pretix-Instanz anmelden möchtest.

[barcamp@kaus pretix]$ cd src/
[b­ar­cam­p@­k­aus src]$ python3.4 manage.py syncdb

An­schlies­send erstellst du die statischen Dateien. Das hat mir bei etwas gedauert:

[barcamp@kaus src]$ python3.4 manage.py collectstatic --noinput
[b­ar­cam­p@­k­aus src]$ python3.4 manage.py compress

Jetzt geht es an daran, pretix aus dem Netz an­sprech­bar zu machen. Dafür brauchst du zuerst einen Port, unter dem die Anwendung erreichbar ist. Die Ubernauten empfehlen folgenden Weg, den ich einfach mal gut­ten­ber­ge:

[barcamp@kaus ~]$ DJANGOPORT=$(( $RANDOM % 4535 + 61000)); netstat -tulpen | grep $DJANGOPORT && echo "versuch's nochmal"

wenn hier keine Ausgabe versuch's nochmal erscheint, passt alles. Wenn versuch's nochmal kommt - versuchs noch mal :)

Danach richtest du den ei­gent­li­chen Deamon ein:

[barcamp@kaus ~]$ test -d ~/service || uberspace-setup-svscan
[b­ar­cam­p@­k­aus ~]$ uberspace-setup-service gunicorn gunicorn --error-logfile ~/error-log --reload --chdir ~/pretix/src --bind 127.0.0.1:$D­JAN­GO­PORT --workers 4 pretix.wsgi --name pretix --max-requests 1200 --max-requests-jitter 50

An­schlies­send überlegst du dir, unter welcher URL du pretix ansprechen willst und speicherst sie in der Variable PRETIXURL. Meine Tes­t­in­stal­la­ti­on läuft bei­spiels­wei­se unter pretix.barcamp.kaus.uberspace.de:

[barcamp@kaus ~]$ PRETIXURL=pretix.barcamp.kaus.uberspace.de

Dann erstellst du eine Datei ~/.pretix.cfg und befüllst sie:

[barcamp@kaus ~]$ cat << __EOF__> ~/.pretix.cfg
[pretix]
url=http://$PRETIXURL

[django]
hosts=127.0.0.1:$D­JAN­GO­PORT
__EOF__

Hier sei nochmal auf die Do­ku­men­ta­ti­on von pretix verwiesen, die den Aufbau und die Mög­lich­kei­ten der Kon­fi­gu­ra­ti­ons­da­tei schon recht gut beschreibt.

An­schlies­send sorgst du dafür, dass gunicorn und pretix aus dem Internet an­sprech­bar sind:

[barcamp@kaus ~]$ mkdir /var/www/virtual/$USER/$PRETIXURL
[b­ar­cam­p@­k­aus ~]$ cat <<__EOF__> /var/www/virtual/$USER/$PRETIXURL/.htaccess
Re­wri­teEn­gi­ne On
Re­wri­te­Cond %{­RE­QUES­T_­FI­LE­NA­ME} !-f
Re­wri­te­Ba­se /
Re­wri­te­Ru­le ^(.*)$ http://127.0.0.1:$D­JAN­GO­PORT/\$1 [P]
Re­ques­tHea­der set X-Forwarded-Proto https env=HTTPS
__EOF__

Herzlichen Glück­wunsch, du hast es geschafft! Du kannst pretix unter der URL, die du angegeben hast, im Browser aufrufen. Bei mir wäre das die URL http://pretix.barcamp.kaus.uberspace.de/control/login?next=/control/. Dann solltest den An­mel­de­bild­schirm sehen. Dort kannst du dich bei­spiels­wei­se mit den Ad­mi­nis­tra­tor­da­ten, die du vorhin eingegeben hast, anmelden.

Anmeldebildschirm von pretix

Eventuell sollte ich diese Anleitung mal ak­tua­li­sie­ren.

Das kannst Du bisher mit dem Einkaufszettl machen » « Das soll in den Einkaufszettl 0.3