bullshit

pretix auf einem Uberspace

Im Oktober 2015 schrieb ich eine Anleitung, wie man pretix auf einem Uberspace in­stal­liert. Nun ist heute nicht mehr Oktober 2015 und die alte Anleitung ent­spre­chend nicht mehr aktuell. Mich haben mehrere Leute darauf hin­ge­wie­sen. Ausserdem brauche ich aus Gründen selbst ab und an mal eine pretix-Instanz und habe mich ent­schlos­sen, die Anleitung mal zu über­ar­bei­ten und in diesem Blogpost auf einen neueren Stand zu bringen.

Einleitung

pretix ist ein Stück freie Software, mit dem man Tickets für Konzerte, Messen, Barcamps und sonstige Ver­an­stal­tun­gen verkaufen kann. Das Tool setzt auf Django und benötigt Python 3.

Es lässt sich unter Linux in­stal­lie­ren, die Anleitung dafür kann man aber nicht eins zu eins auf die Ubernauten übertragen. Im Folgenden möchte ich be­schrei­ben, was ich tun musste, um pretix auf einem Uberspace zumindest zum Laufen zu bringen. Der Be­nut­zer­na­me für den Uberspace ist barcamp, der Uberspace selbst 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)

Die Datenbank ist dieser Anleitung egal. Ausserdem fehlen noch ein, zwei andere Klei­nig­kei­ten (siehe unten), um so Sachen wie SSL musst du dich ebenfalls selbst kümmern. Im Großen und Ganzen habe ich mich an die Anleitung der Ubernauten für Django gehalten und sie mit besagter In­stal­la­ti­ons­an­lei­tung für Linux gekreuzt.

Trotzdem gilt: Du wirst diese Anleitung nicht in dieser Form übernehmen können. Lies sie aufmerksam und benutze deinen eigenen Kopf, um An­pas­sun­gen zu machen Wenn du irgendwo nicht wei­ter­kommst oder eine Anregung hast, dann freue ich mich natürlich über Fragen und Feedback.

Wenn du — warum auch immer — keine eigene pretix-Instanz betreiben möchtest, kannst du ja mal darüber nachdenken, die gehostete Version zu nutzen. Raphael bietet die Software auch as a Service an — zu sehr er­schwing­li­chen Kon­di­tio­nen.

Anleitung

pretix-In­stal­la­ti­on an sich

In einem erste Schritt lege ich einen Ordner für die ei­gent­li­che pretix-In­stal­la­ti­on, die Virtual En­vi­ron­ment und das Ver­zeich­nis für die pretix-Daten an:

[barcamp@kaus ~]$ mkdir pretix_installation
[barcamp@kaus ~]$ cd pretix_installation

An­schlie­ßend richte ich die virtuelle Umgebung mit Python 3.6 ein und aktiviere sie:

[barcamp@kaus pretix_installation]$ python3.6 -m venv env
[barcamp@kaus pretix_installation]$ source env/bin/activate

Zwar gibt es pretix auch im Python Package Index, aber weil ich ein paar Uberspace-spe­zi­fi­sche An­pas­sun­gen in der settings.py vornehmen muss, bringt das — zumindest nach meinem Kennt­nis­stand, vielleicht weißt du es besser, dann lass mich bitte an deinem Wissen teilhaben — wenig. Zeit, das ent­spre­chen­de Repository auf Github zu klonen und in den Ordner zu wechseln:

(env) [barcamp@kaus pretix_installation]$ git clone https://github.com/pretix/pretix.git
(env) [barcamp@kaus pretix_installation]$ cd pretix

Wenn du ein spezielles Release möchtest, wäre jetzt der richtige Zeitpunkt, den ent­spre­chen­den Branch oder Tag aus­zuch­ecken. Ich gehe davon aus, dass das Repository in einem Ordner namens ~/pretix_installation/pretix liegt. Nun geht es daran, die Ab­hän­gig­kei­ten von pretix zu in­stal­lie­ren:

(env) [barcamp@kaus pretix]$ pip install -U gunicorn
(env) [barcamp@kaus pretix]$ pip install -U -r src/requirements.txt

Danach muss ich — wie bereits erwähnt — die settings.py erweitern, wie bei den Ubernauten be­schrie­ben:

(env) [barcamp@kaus pretix]$ cat << __EOF__ >> src/pretix/settings.py

USE_X_FORWARDED_HOST = True

__EOF__

Wie ebenfalls oben bereits erwähnt, braucht pretix ein Ordner, in dem es alle möglichen Daten ablegen kann. In diesem Beispiel ist es unter anderem die SQLite-Datenbank.

(env) [barcamp@kaus pretix]$ mkdir ../data_dir

pretix schaut an einigen Stellen nach der benötigten Kon­fi­gu­ra­ti­ons­da­tei, unter anderem im Home-Ver­zeich­nis. Aus Be­quem­lich­keits­grün­den lege ich sie deshalb einfach mal da an:

(env) [barcamp@kaus pretix]$ cat << __EOF__ > ~/.pretix.cfg

[pretix]
instance_name=Frische Tickets!
url=https://pretix.barcamp.kaus.uberspace.de
currency=EUR
datadir=/home/barcamp/pretix_installation/data_dir

[database]
; Replace mysql with postgresql_psycopg2 for PostgreSQL
backend=sqlite3

__EOF__

Wahr­schein­lich — hof­fent­lich — wird deine anders aussehen. In der Kon­fi­gu­ra­ti­ons­da­tei stehen alle möglichen In­for­ma­tio­nen, abhängig davon, was du alles nutzen möchtest. Bei­spiels­wei­se steht hier die URL, unter der pretix erreichbar ist oder auch, wo sich das Ver­zeich­nis für die Daten befindet.

Hier sei nochmal ein Blick in die ent­spre­chen­de Do­ku­men­ta­ti­on von pretix empfohlen — sie ist sehr gut. Danach in­itia­li­sie­re ich die Datenbank und lasse die statischen Dateien erstellen. Das hat mir bei etwas gedauert:

(env) [barcamp@kaus pretix]$ python src/manage.py migrate
(env) [barcamp@kaus pretix]$ python src/manage.py rebuild
(env) [barcamp@kaus pretix]$ deactivate

Damit bin ich mit der In­stal­la­ti­on von pretix durch.

Deamon und Er­reich­bar­keit

Ich könnte pretix jetzt wie jede andere Django-Anwendung starten. Es würde jedoch nicht im Hin­ter­grund laufen und wäre noch nicht aus dem Internet erreichbar. Darum kümmere ich mich jetzt. Zuerst brauche ich dafür einen Port. 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 richte ich den ei­gent­li­chen Service ein, der sich darum kümmert, dass pretix im Hin­ter­grund läuft:

[barcamp@kaus ~]$ test -d ~/service || uberspace-setup-svscan 
[barcamp@kaus ~]$ uberspace-setup-service pretix /home/barcamp/pretix_installation/env/bin/gunicorn --error-logfile ~/error-log --reload --chdir /home/barcamp/pretix_installation/pretix/src --bind 127.0.0.1:$DJANGOPORT --workers 4 pretix.wsgi --name pretix --max-requests 1200 --max-requests-jitter 50

Im letzten Schritt muss ich dafür sorgen, dass dieser Service aus dem Internet an­sprech­bar ist:

[barcamp@kaus ~]$ mkdir /var/www/virtual/barcamp/barcamp.kaus.uberspace.de
[barcamp@kaus ~]$ cat << __EOF__ > /var/www/virtual/barcamp/pretix.barcamp.kaus.uberspace.de/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteBase /
RewriteRule ^(.*)$ http://127.0.0.1:$DJANGOPORT/$1 [P]

RequestHeader set X-Forwarded-Proto https env=HTTPS
__EOF__

Das war's.

Läuft bei mir

pretix wäre bei mir jetzt unter https://pretix.barcamp.kaus.uberspace.de erreichbar.

Startbildschirm von pretix

Da sieht man denn natürlich nicht viel, weswegen ich mich unter http://pretix.barcamp.kaus.uberspace.de/control/login?next=/control/ anmelden kann. Als Be­nut­zer­na­me habe ich admin@localhost, als Passwort admin verwendet. Bitte denk daran, die An­mel­de­da­ten zu ändern!

Anmeldebildschirm von pretix

Was noch fehlt

Domain

Wie dir vielleicht auf­ge­fal­len ist, läuft pretix unter einer Subdomain — apropos Domain: pretix.barcamp.kaus.uberspace.de ist wesentlich weniger lesbar als bei­spiels­wei­se pretix.domain.tld, du willst vielleicht also eine Domain haben.

Ich habe es zwi­schen­drin mal hin­be­kom­men, dass pretix auch in einem Un­ter­ord­ner lief, mir aber nicht auf­ge­schrie­ben, wie es geklappt hat und nun kann ich als Django/Python-Amateur das nicht mehr nach­voll­zie­hen. Falls jemand einen Hinweis hat, bin ich dankbar.

Raphael schrieb eben auf Twitter, dass pretix im Un­ter­ord­ner schlicht nicht mehr un­ter­stützt wird und üble Hacks braucht. Ich bin wohl auf so einen üblen Hack gestoßen und eventuell ist es gut, dass ich ihn nicht mehr nach­voll­zie­hen kann.

pretix-worker, Mails, MariaDB, Plugins...

Was ebenfalls nicht läuft, ist der in der pretix-Do­ku­men­ta­ti­on erwähnte pretix-worker, ebenfalls fehlen sämtliche — ­bis­wei­len ob­li­ga­to­ri­sche — Zu­satzssa­chen wie Mail, eine or­dent­li­che Datenbank, redis, HTTPS, Plugins... Kurz: Sieh diese Anleitung bitte als einen ersten Schritt und kümmere dich an­schlies­send selbst darum, dass deine pretix-In­stal­la­ti­on gut und sicher läuft. Danke.

Links

Dein Freund und Rauswerfer » « Von A nach