Postgresql Tabellen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Zur Erklärung, Rechnen in der Cloud mit Containern: man hat eine klare Trennung zwischen Programmcode und der Ausführung mit etwa temporärem Speicher und dauerhafter Datenspeicherung. Den Speicher für den Programmcode bekommt man geschenkt, da kann man aber auch keine Daten speichern, die Umgebung, in der etwas ausgeführt wird, kann jederzeit automatisch platt gemacht werden und an einer anderen Stelle wieder mit dem Programmcode neu erzeugt werden, oder wegen Parallelisierung kann es 100 identische Instanzen geben.

Alles was man dauerhaft speichern will, kann deshalb nicht einfach so geschrieben werden, sondern man muß den Speicherplatz zusätzlich dazubuchen, entweder als Objektstore, oder als Datenbank oder ...
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Hypec: Eine DB mit 10.000 Zeilen Limit ist ja, wie schon festgestellt wurde, relativ perspektivlos für das, was du vorhast.

Du kannst bei Heroku für 9.- USD/Monat die DB größer machen, dann sind 10 Millionen Zeilen erlaubt.
Wenn dir das zu viel ist, musst du halt über einen Providerwechsel nachdenken. Sehr flexibel ist das Hosting Uberspace, da hast du ziemlich viele Möglichkeiten. Oder du rechnest dir mal durch, ob es z.B. bei AWS nicht preiswerter als 9.- USD/Monat ist.

Plan C: alles auf dem Raspi selber hosten. Dann hast du aber zusätzlich die volle Administration deines eigenen Servers an der Backe.

Gruß, noisefloor
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Also ich habe jetzt nochmal nachgelesen und SQLite funktioniert leider nicht zusammen mit Heroku.
https://devcenter.heroku.com/articles/sqlite3
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

noisefloor hat geschrieben: Mittwoch 15. Mai 2019, 07:27Oder du rechnest dir mal durch, ob es z.B. bei AWS nicht preiswerter als 9.- USD/Monat ist.
Der ALB alleine kostet schon ~20 USD / Monat. Traffic, Compute (EC2, ECS, Lambda, ...) und RDS kämen noch drauf. Außerdem ist es wesentlich mehr Aufwand als Heroku.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Hypec hat geschrieben: Mittwoch 15. Mai 2019, 16:14 Also ich habe jetzt nochmal nachgelesen und SQLite funktioniert leider nicht zusammen mit Heroku.
https://devcenter.heroku.com/articles/sqlite3
Ich möchte noisefloors Vorschlag bzgl. Uberspace noch mal unterstreichen. Das ist zwar keine "PaaS" in der Cloud wie Heroku, aber du hast halt einen SSH Zugang auf einen regulären Server und ziemlich viele Möglichkeiten. Bei Uberspace musst du dich dann mit mysql/mariadb begnügen, was zwar normalerweise nicht meine erste Wahl wäre, aber so tragisch ist das auch nicht. Jedenfalls hast du da eine ganze Datenbank für dich alleine und sqlite wäre ansonsten auch kein Problem.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Oke ich probiere das mit Uberspace mal aus. Ich hab gelesen da kann ich auch Postgresql installieren stimmt das?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Es gibt eine Anleitung wie man sich PostgreSQL aus den Quellen selbst kompiliert.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

__blackjack__ hat geschrieben: Donnerstag 16. Mai 2019, 15:57 Es gibt eine Anleitung wie man sich PostgreSQL aus den Quellen selbst kompiliert.
Es spricht zwar für Uberspace, dass das überhaupt möglich ist, aber ich sehe dabei den Nachteil, dass man für jedes Update neu kompilieren muss (es sei denn, Uberspace 7 hat irgendeine Art Management-Tool für sowas; gentoo oder archlinux verwenden sie jedenfalls nicht ;). 'toast' verwenden sie soweit ich weiß nicht mehr). Zumindest mir wäre das regelmäßige Checken nach Updates und ggf. Neu-Kompilieren etwas zu unbequem. Gerade weil die Datenbank aber für eine Webanwendung verwendet werden soll, ist das vielleicht keine gute Voraussetzung, denn die Chance, dass man das schleifen lässt ist sicher nicht so gering. Da ist es doch einfacher, die "mitgelieferte" DB zu verwenden, die von den Uberspace-Admins gewartet wird.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also basierend auf dem, was hier im Thread des TE steht, würde ich auch dazu tendieren, MariaDB / MySQL von Uberspace zu nutzen. Nicht, dass ich die favorisieren würde, aber wenn es wirklich "nur" um das Speichern von ein paar Messwerten geht, sollte das RDBMS relativ Latte sein. Zumal SQLite ja scheinbar auch als Alternative in Frage käme.

Gruß, noisefloor
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Oke ich probiere es aus. Dazu müsste ich aber erstmal Flask auf Uberspace zum laufen bekommen.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Ich denke, du kannst dich an der Anleitung für django orientieren: https://lab.uberspace.de/guide_django.html

Grundsätzlich läuft es eben so, dass deine App in uwsgi oder gunicorn läuft und du deinen Webserver so konfigurierst, dass er intern mit diesen kommuniziert und den Traffic "durchschleust" (das ist übliche Praxis und nicht Uberspace spezifisch). Siehe z.B. auch: https://manual.uberspace.de/web-backends.html
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Oke ich habe mich an die Anleitung gehalten. Das einzige was ich jetzt noch wissen will ist entweder was ich hier falsch gemacht habe oder wie ich eine Richtige Debug Meldung bekomme?

Gewaechshauscontroll.ini:

Code: Alles auswählen

[uwsgi]
base = /home/hypec/Gewaechshauscontroll
chdir = /home/hypec/Gewaechshauscontroll

http = :5000
master = true
wsgi-file = %(base)/app.py
touch-reload = %(wsgi-file)

app = wsgi

#virtualenv = %(chdir)/venv

plugin = python

uid = hypec
gid = hypec
app.py:

Code: Alles auswählen

from flask import Flask

app = Flask(__name__)
app.config.update(
    DEBUG=True,
)

@app.route('/')
def hello_world():
    return 'Hello World'

if __name__ == '__main__': 
    app.run(host='0.0.0.0', port=5000, debug=True)
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Ich hatte das Tutorial vorher nur kurz überflogen. Es ist leider nicht ganz vollständig. Ich schlage folgendes vor (zuvor alle Schritte aus dem Tutorial rückgängig machen):

Code: Alles auswählen

$ cd ~
$ mkdir -p my_app/my_app
$ virtualenv -p $(which python3) my_app/venv
$ source my_app/venv/bin/activate
$ pip install gunicorn flask
# unter der Annahme, dass dein Testbeispiel in home liegt und "test.py" heißt
$ cp test.py my_app/my_app
Dann die Datei ~/etc/services/gunicorn.my_app.ini wie folgt befüllen:

Code: Alles auswählen

[program:gunicorn]
command=/home/<BENUTZER>/my_app/venv/bin/gunicorn test:app
directory=/home/<BENUTZER>/my_app/my_app
user=<BENUTZER>
autostart=true
autorestart=true
redirect_stderr=true
Anschließend weiter wie im Tutorial (supervisorctl reread; supervisorctl update; dann das webbackend). Nach den supervisorctl Befehlen sollten mit curl auf Port 8000 schon was kommen. Fehlermeldungen stehen ggf. in logs/supervisord.log. Den Teil mit der gunicorn.conf.py habe ich mal weggelassen. Wenn alles läuft, kannst du die entsprechend der Doku anlegen und anschließend wie hier beschrieben in der oben erstellen ini festlegen:
http://docs.gunicorn.org/en/latest/depl ... supervisor
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Oke ich habe jetzt alles so gemacht bis zu den supervisorctl Befehlen. Curl hat danach geklappt allerdings hat es dann mit dem webbackend wieder aufgehört. Das hier ist mein webbackend das sollte soweit eigentlich passen und diese Fehlermeldung bekomme ich dann, ich vermute ich muss in die gunicorn.ini noch denn richtigen host schreiben, allerdings habe ich im Internet nicht gefunden wo und wie.

Code: Alles auswählen

uberspace web backend set /my_app --http --port 8000

Code: Alles auswählen

/my_app http:8000 => NOT OK, wrong interface (127.0.0.1): PID 25819, /home/hypec/my_app/venv/bin/python3 /home/hypec/my_app/venv/bin/gunicorn test:app -b localhost:8000
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Webbackends müssen einfach auf 0.0.0.0 lauschen. Das ist eine virtuelle Netzwerkkarte von der jeder Uberspacer seine eigene hat und die nur innerhalb von Uberspace erreichbar ist. Das ist also nicht vom Internet aus direkt erreichbar, aber deren nginx der von aussen erreichbar ist, kann da drauf zugreifen und es nach aussen transparent weiterleiten.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
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: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Da wo Du jetzt gerade `localhost` stehen hast.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
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: 1632
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?
Antworten