server:openeats
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| server:openeats [2017/11/08 11:33] – created sascha | server:openeats [2019/02/16 19:48] (current) – Probleme bei größeren MariaDB-Updates, nicht gefundene library ergänzt sascha | ||
|---|---|---|---|
| Line 163: | Line 163: | ||
| Der Befehl '' | Der Befehl '' | ||
| - | Ist die Installation abgeschlossen, | + | Ist die Installation abgeschlossen, |
| + | const path = require(' | ||
| + | anfügen sowie weiter unten im Teil '' | ||
| + | path: '/ | ||
| + | abändern zu | ||
| + | path: path.resolve(__dirname, | ||
| + | |||
| + | Damit können wir nun den Node-Server starten. Dabei ist das Setzen der Umgebungsvariablen wichtig, da '' | ||
| # NODE_ENV=production NODE_LOCALE=de NODE_API_URL=https:// | # NODE_ENV=production NODE_LOCALE=de NODE_API_URL=https:// | ||
| Nun sollte alles funktionieren und mit dem Aufruf der URL https:// | Nun sollte alles funktionieren und mit dem Aufruf der URL https:// | ||
| + | |||
| + | __Hinweis__: | ||
| + | >ERROR in ./ | ||
| + | >Module not found: Error: Can't resolve ' | ||
| + | muss das '' | ||
| + | # npm install --save history | ||
| + | siehe [[server: | ||
| Line 191: | Line 205: | ||
| ===== Autostart umsetzen ===== | ===== Autostart umsetzen ===== | ||
| - | FIXME TODO | + | Die vorhin gestarteten Server werden nun nicht mehr benötigt, da der Startprozess für die beiden Server nun automatisiert wird. Am besten eine neue Terminal-Session starten, um sicher zu sein, dass keine bereits gesetzten Umgebungsvariablen fehlen und der Start der Server fehlschlägt. |
| + | |||
| + | |||
| + | ==== Django ==== | ||
| + | |||
| + | Über die '' | ||
| + | <code sh api/ | ||
| + | # | ||
| + | |||
| + | NAME=" | ||
| + | DJANGODIR=/ | ||
| + | USER=root | ||
| + | GROUP=root | ||
| + | NUM_WORKERS=4 | ||
| + | DJANGO_SETTINGS_MODULE=base.settings | ||
| + | DJANGO_WSGI_MODULE=base.wsgi | ||
| + | API_URL=localhost: | ||
| + | |||
| + | echo " | ||
| + | |||
| + | # Activate the virtual environment | ||
| + | source / | ||
| + | cd $DJANGODIR | ||
| + | export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE | ||
| + | export PYTHONPATH=$DJANGODIR: | ||
| + | |||
| + | # Start your Django Unicorn | ||
| + | # Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon) | ||
| + | exec gunicorn ${DJANGO_WSGI_MODULE}: | ||
| + | --name $NAME \ | ||
| + | --workers $NUM_WORKERS \ | ||
| + | --user=$USER --group=$GROUP \ | ||
| + | --bind=$API_URL | ||
| + | </ | ||
| + | |||
| + | Zum Testen am besten ausprobieren, | ||
| + | # ./ | ||
| + | Funktioniert alles, kümmern wir uns als nächstes darum, dass der Startprozess automatisch von '' | ||
| + | <code - / | ||
| + | [Unit] | ||
| + | Description=OpenEats gunicorn daemon | ||
| + | |||
| + | [Service] | ||
| + | Type=simple | ||
| + | User=root | ||
| + | Group=root | ||
| + | ExecStart=/ | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | Das ganze wird mit | ||
| + | # systemctl enable openeats_gunicorn | ||
| + | aktiviert. Noch ein | ||
| + | # systemctl start openeats_gunicorn | ||
| + | und der Service ist gestartet und sollte nun unter https:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Quelle mit Infos zu gunicorn als Daemon: http:// | ||
| + | |||
| + | |||
| + | ==== Node ==== | ||
| + | |||
| + | Als nächstes erstellen wir die Datei ''/ | ||
| + | <code - / | ||
| + | [Unit] | ||
| + | Description=OpenEats node daemon | ||
| + | After=syslog.target network.target openeats_gunicorn.service | ||
| + | Requires=openeats_gunicorn.service | ||
| + | |||
| + | [Service] | ||
| + | Restart=always | ||
| + | User=root | ||
| + | Group=root | ||
| + | Environment=PATH=/ | ||
| + | Environment=NODE_ENV=production | ||
| + | Environment=NODE_LOCALE=de | ||
| + | Environment=NODE_API_URL=https:// | ||
| + | WorkingDirectory=/ | ||
| + | ExecStart=/ | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | </ | ||
| + | |||
| + | Wie vorhin den Serive mit | ||
| + | # systemctl enable openeats_node | ||
| + | aktivieren und zum Testen mit '' | ||
| + | |||
| + | Nun sollte alles nach einem Neustart automatisch gestartet werden, wobei die entsprechende Startzeit für den Node-Server beachtet werden sollte. | ||
| + | |||
| + | |||
| + | ===== Troubleshooting ===== | ||
| + | |||
| + | ==== Inkompatibles / nicht vorhandenes npm-Modul ==== | ||
| + | |||
| + | Sollte es, aus welchen Gründen auch immer, ein Problem mit einem Modul geben, da es beispielsweise für die Architektur nicht angeboten wird, kann es auch einfach selbst aus den Quellen gebaut werden. Dies kann sich unter anderem beim Starten des npm-Servers in einem Fehlerstring wie beispielsweise | ||
| + | > ERROR in Node Sass does not yet support your current environment: | ||
| + | äußern. In einem solchen Fall kann das Modul, in diesem Falle '' | ||
| + | # npm rebuild node-sass | ||
| + | selbst für die aktuell verwendete Plattform kompiliert werden. | ||
| + | |||
| + | ==== Update node.js ==== | ||
| + | |||
| + | Wurde '' | ||
| + | # cd / | ||
| + | # rm -rf node_modules | ||
| + | # npm install | ||
| + | |||
| + | ==== history-Modul nicht gefunden ==== | ||
| + | |||
| + | Speziell nach dem Update von '' | ||
| + | > ERROR in ./ | ||
| + | > Module not found: Error: Can't resolve ' | ||
| + | |||
| + | Scheinbar wurde das '' | ||
| + | # npm install --save history | ||
| + | der Installation hinzugefügt werden. | ||
| + | |||
| + | ==== Update Python, Upgrade der virtuellen Umgebung ==== | ||
| + | |||
| + | Die angelegte virtuelle Umgebung unter '' | ||
| + | > python: error while loading shared libraries: libpython3.6m.so.1.0: | ||
| + | erscheint. Grund ist hier das Upgrade von Python 3.6 auf 3.7. | ||
| + | |||
| + | Um ein Update durchführen zu können, ermitteln wir der Einfachheit halber alle installierten Module, um sie nachher einfach wieder zu installieren. Dazu muss die Python-Version mittels Downgrade auf die letzte funktionierende Version gesetzt werden. Am besten wurde der Cache der '' | ||
| + | # pacman -U / | ||
| + | |||
| + | Nun kann die virtuelle Umgebung aktiviert werden, um die verwendeten Module zu ermitteln: | ||
| + | # source virt_env/ | ||
| + | # pip freeze > requirements.txt | ||
| + | # deactivate | ||
| + | # mv virt_env virt_env_bak | ||
| + | Bei dem letzten Schritt wird die Umgebung als Backup in einen neuen Ordner verschoben. | ||
| + | |||
| + | Anschließend kann Python wieder aktualisiert werden: | ||
| + | # pacman -S python | ||
| + | |||
| + | Bei mir ist in der Liste der Module in '' | ||
| + | |||
| + | Die neue Umgebung kann nun eingerichtet werden: | ||
| + | # mkdir virt_env | ||
| + | # virtualenv virt_env/ | ||
| + | # source virt_env/ | ||
| + | # pip install --upgrade -r requirements.txt | ||
| + | |||
| + | Wird nun versucht, den Server manuell mit '' | ||
| + | |||
| + | ==== Update MariaDB, Django-Server startet nicht ==== | ||
| + | |||
| + | Es kann passieren, dass es nach einem größeren Update von MariaDB, welches MySQL zur Verfügung stellt, Probleme beim Start des Django-Servers gibt. Dies zeigt sich darin, dass keine Bilder oder Rezepte geladen/ | ||
| + | > django.core.exceptions.ImproperlyConfigured: | ||
| + | |||
| + | In diesem Fall reicht es, das Python-Paket '' | ||
| + | # source virt_env/ | ||
| + | # pip uninstall mysqlclient | ||
| + | # pip install mysqlclient | ||
| + | # deactivate | ||
| + | |||
| + | Mit dem letzten Befehl wird die virtuelle Umgebung wieder verlassen. Hat alles geklappt, sollte der Aufruf von '' | ||
| + | |||
server/openeats.1510140828.txt.gz · Last modified: by sascha
