Postgresql Tabellen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Das habe ich soweit verstanden ich will jetzt nur wissen wo ich sagen kann dass das webbackend auf 0.0.0.0 lauschen soll?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Da wo Du jetzt gerade `localhost` stehen hast.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

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?
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

@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:

Code: Alles auswählen

bind = "0.0.0.0:8000"
Dann änderst du die entsprechende Zeile in /home/<BENUTZER>/etc/services.d/gunicorn.my_app.ini zu:

Code: Alles auswählen

command=/home/<BENUTZER>/my_app/venv/bin/gunicorn test:app -c /home/<BENUTZER>/my_app/my_app_config.py
Anschließend folgendes in der Shell eingeben:

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
Fertig.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Danke das du dir die mühe gemacht hast mir das zu Erklären.
Jetzt aber nochmal zurück zu der frage ob SQLite oder MYSQL besser ist?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

@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).
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

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.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Hypec hat geschrieben: Samstag 25. Mai 2019, 17:29 Kann ich irgendwie in der gunicorn Datei noch einstellen das Python print Befehle in den Logs mit angezeigt werden?
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
'capture_output = True' macht das, wonach du gefragt hast. Ich würde aber darauf verzichten und wie gesagt das Logging-Modul verwenden. Da der Standardoutput von Python gebuffered wird, landen die Nachrichten nicht sofort im Log. Das ist auch sinnvoll, wenn man es aber trotzdem abstellen möchte, muss man in 'etc/services.d/gunicorn.my_app.ini' folgende Zeile hinzufügen:

Code: Alles auswählen

environment=PYTHONUNBUFFERED=True
Anschließend muss alles neugestartet werden:

Code: Alles auswählen

supervisorctl reread
supervisorctl update
supervisorctl restart gunicorn
Du solltest dir wirklich mal die Doku von gunicorn durchlesen, da wird das eigentlich alles ganz gut erklärt. Ich habe nur die absolut notwendigen Basiseinstellungen gezeigt, aber es gibt, wie du siehst, noch diverse weitere, die du selbst durchführen solltest.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Vielen dank für deine Hilfe.
Ja ich glaube auch das es sehr hilfreich wäre wenn ich mich mal intensiver mit gunicorn beschäftige.
Antworten