Postgresql Tabellen

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

Mittwoch 15. Mai 2019, 07:18

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: 2726
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 15. Mai 2019, 07:27

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: 175
Registriert: Mittwoch 1. August 2018, 16:11

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
DasIch
User
Beiträge: 2510
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 15. Mai 2019, 18:00

noisefloor hat geschrieben:
Mittwoch 15. Mai 2019, 07:27
Oder 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: 708
Registriert: Samstag 16. April 2011, 12:47

Mittwoch 15. Mai 2019, 20:54

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: 175
Registriert: Mittwoch 1. August 2018, 16:11

Donnerstag 16. Mai 2019, 15:30

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

Donnerstag 16. Mai 2019, 15:57

Es gibt eine Anleitung wie man sich PostgreSQL aus den Quellen selbst kompiliert.
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
nezzcarth
User
Beiträge: 708
Registriert: Samstag 16. April 2011, 12:47

Donnerstag 16. Mai 2019, 17:57

__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: 2726
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Freitag 17. Mai 2019, 06:02

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: 175
Registriert: Mittwoch 1. August 2018, 16:11

Sonntag 19. Mai 2019, 19:29

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

Sonntag 19. Mai 2019, 22:06

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: 175
Registriert: Mittwoch 1. August 2018, 16:11

Montag 20. Mai 2019, 16:49

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: 708
Registriert: Samstag 16. April 2011, 12:47

Montag 20. Mai 2019, 20:26

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: 175
Registriert: Mittwoch 1. August 2018, 16:11

Montag 20. Mai 2019, 22:15

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: 3882
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 20. Mai 2019, 23:16

@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.
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
Antworten