Postgresql Tabellen
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Da wo Du jetzt gerade `localhost` stehen hast.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Vielen Dank. An der ganzen sache gibt es nur ein großes Problem. Um zu funktionieren muss die Website im Verzeichnis html liegen welches den Pfad '/var/www/virtual/hypec/html' hat, das liegt glaube ich aber auserhalb des Geltungsbereich der gunicorn.ini. Zumindestens bekomme ich sobald dort meine Seite liegt und ich den die Pfade in der Datei geändert habe einen Fehler beim "supervisorctl status". gibt es da eine Lösung?
@Hypec: Ich hätte gestern abend noch den restlichen Weg dazu schreiben sollen, hatte aber keine Lust mehr
'/var/www/virtual/hypec/html' ist hier irrelevant, das brauchst du nur, wenn du mit konkreten Dateien arbeiten willst. Die Idee ist hier aber, dass man den Webserver dazu anweist, komplette Pfade (also z.B. /, was bedeutet: den gesamten Webspace) an interne Interfaces durchzuschleusen. Jedes Mal, wenn du dann https://dein_name.uber.space/ aufrufst, wird der Request an den internen Gunicorn, der auf Port 8000 lauscht, durchgereicht. Dafür muss Gunicorn, wie __blackjack__ schon sagte, an das Interface 0.0.0.0 gebunden werden.
Das geht so:
Leg eine Datei '/home/<BENUTZER>/my_app/my_app_config.py' mit folgendem Inhalt an:
Dann änderst du die entsprechende Zeile in /home/<BENUTZER>/etc/services.d/gunicorn.my_app.ini zu:
Anschließend folgendes in der Shell eingeben:
Fertig.

Das geht so:
Leg eine Datei '/home/<BENUTZER>/my_app/my_app_config.py' mit folgendem Inhalt an:
Code: Alles auswählen
bind = "0.0.0.0:8000"
Code: Alles auswählen
command=/home/<BENUTZER>/my_app/venv/bin/gunicorn test:app -c /home/<BENUTZER>/my_app/my_app_config.py
Code: Alles auswählen
$ supervisorctl reread
$ supervisorctl update
$ uberspace web backend set / --http --port 8000
$ uberspace web backend list
/ http:8000 => OK, listening: PID 12847, /home/<BENUTZER>/my_app/venv/bin/python3 /home/<BENUTZER>/my_app/venv/bin/gunicorn test:app -c /home/<BENUTZER>/my_app/my_app_config.py
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Hypec: Die Frage ist wofür besser. Wenn Du viele zeitgleiche Schreibzugriffe erwartest ist SQLite nicht geeignet. Ansonsten kommt es darauf an was sonst noch gefordert wird.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
@Hypec: Vielleicht ist folgende Seite hilfreich: https://www.sqlite.org/whentouse.html
Die sqlite-Macher sind der Auffassung, dass sich sqlite auch für viele Webseiten eignet. Da gibt es aber durchaus auch abweichende Meinungen. Oft nimmt man sqlite, weil die Hürde sehr niedrig ist. Python bringt von sich aus schon eine einfache Anbindung für sqlite mit und man kann ohne weitere Vorarbeiten loslegen. Mariadb (Mysql) und Postgresql sind eigenständige, recht komplexe Programme, die eingerichtet und gewartet werden müssen. Da Mariadb aber bei Uberspace eh schon vorhanden ist, einfach benutzt werden kann, und man sich um nichts kümmern muss, ist die Hürde deutlich niedriger als sonst. Für Mariadb braucht man eine externe Bibliothek, das sollte aber in dem Fall kein Problem sein (unter anderem dafür betreibt man ja den Aufwand mit der virtuellen Umgebung).
Die sqlite-Macher sind der Auffassung, dass sich sqlite auch für viele Webseiten eignet. Da gibt es aber durchaus auch abweichende Meinungen. Oft nimmt man sqlite, weil die Hürde sehr niedrig ist. Python bringt von sich aus schon eine einfache Anbindung für sqlite mit und man kann ohne weitere Vorarbeiten loslegen. Mariadb (Mysql) und Postgresql sind eigenständige, recht komplexe Programme, die eingerichtet und gewartet werden müssen. Da Mariadb aber bei Uberspace eh schon vorhanden ist, einfach benutzt werden kann, und man sich um nichts kümmern muss, ist die Hürde deutlich niedriger als sonst. Für Mariadb braucht man eine externe Bibliothek, das sollte aber in dem Fall kein Problem sein (unter anderem dafür betreibt man ja den Aufwand mit der virtuellen Umgebung).
Vielen dank ich probiere das ganze mit SQLite aus das sollte eigentlich für meine anforderungen reichen.
Kann ich irgendwie in der gunicorn Datei noch einstellen das Python print Befehle in den Logs mit angezeigt werden? Da dies Leider momentan nicht der Fall ist.
Kann ich irgendwie in der gunicorn Datei noch einstellen das Python print Befehle in den Logs mit angezeigt werden? Da dies Leider momentan nicht der Fall ist.
Ja, das geht. Aber print Statements sind eigentlich nicht für Logging/Debugging im Produktivbetrieb gedacht. Dafür nimmt man z.B. das 'logging'-Modul aus der Standardbibliothek.
Wie auch immer, zunächst müssen die Logfiles konfiguriert werden (in my_app/my_app/my_app_config.py):
Code: Alles auswählen
accesslog = '/home/<BENUTZER>/logs/gunicorn.my_app.log'
errorlog = '/home/<BENUTZER>/logs/gunicorn.my_app.err'
capture_output = True
Code: Alles auswählen
environment=PYTHONUNBUFFERED=True
Code: Alles auswählen
supervisorctl reread
supervisorctl update
supervisorctl restart gunicorn