Dokku ist ein selbst gehosteter Platform-as-a-Service (PaaS), der die Bereitstellung von Anwendungen mit Git vereinfacht. Obwohl die Implementierung von Dokku Heroku ähnlich ist, fehlen bestimmte Schlüsselfunktionen wie die automatische Skalierung. Dokku ist ein äußerst leistungsstarkes Tool, das Ihre Anwendung automatisch in Docker ausführt und eine minimale Konfiguration von Webservern erfordert.
Diese Anleitung zeigt, wie man:
- Erstellen Sie eine Flask-Anwendung, die „Hello World!“ auf der Indexseite zurückgibt
- Installieren Sie Dokku auf einem Linode
- Stellen Sie eine Flask-Anwendung mit einem WSGI-Server in einem Docker-Container bereit
- Fügen Sie ein SSL-Zertifikat über Dokku mit dem Plug-in „Let’s Encrypt“ hinzu
Bevor Sie beginnen
Auf Ihrem lokalen Computer
Hinweis Dokku v0.12.5 ist mit Ubuntu 16.04 x64, Ubuntu 14.04 x64 und Debian 8.2 x64 kompatibel. CentOS 7 x64 wird nur experimentell unterstützt, und daher müssen einige Schritte wie das Konfigurieren von SSH-Schlüsseln und virtuellen Hosts manuell über die dokku-Befehlszeilenschnittstelle durchgeführt werden. Weitere Informationen finden Sie in der offiziellen Dokumentation.
Es wird davon ausgegangen, dass ein öffentlicher Schlüssel verfügbar ist. Normalerweise befindet sich diese in ~/home/username/.ssh/id_rsa.pub
.
Installieren Sie bei Bedarf Git:
sudo apt install git
Auf Ihrem Linode
Das Dokku-Installationsskript erstellt ein dokku
Benutzer auf dem System, installiert Docker und ruft das relevante Image ab.
-
Laden Sie das Installationsskript von Dokku herunter und führen Sie das Skript aus:
wget https://raw.githubusercontent.com/dokku/dokku/v0.12.5/bootstrap.sh sudo DOKKU_TAG=v0.12.5 bash bootstrap.sh
Preparing to install v0.11.6 from https://github.com/dokku/dokku.git... For dokku to build containers, it is strongly suggested that you have 1024 megabytes or more of free memory If necessary, please consult this document to setup swap: http://dokku.viewdocs.io/dokku/advanced-installation/#vms-with-less-than-1gb-of-memory --> Ensuring we have the proper dependencies --> Initial apt-get update --> Installing docker --> NOTE: Using Linode? Docker may complain about missing AUFS support. You can safely ignore this warning. Installation will continue in 10 seconds. ...
-
Navigieren Sie in einem Browser zur öffentlichen IP-Adresse Ihres Linode und geben Sie den öffentlichen Schlüssel ein:
Achtung Fügen Sie den öffentlichen Schlüssel unmittelbar nach dem Ausführen des Installationsskripts hinzu, um zu verhindern, dass jemand anderes einen öffentlichen Schlüssel zu Dokku hinzufügt. Informationen zur unbeaufsichtigten Installation finden Sie in den erweiterten Installationsanweisungen.
-
Um zusätzliche SSH-Schlüssel hinzuzufügen, leiten Sie die Ausgabe über SSH an
dokku
weiter Benutzer. Ersetzen Sieexample.com
mit der IP-Adresse Ihres Linode.cat ~/.ssh/id_rsa.pub | ssh [email protected] ssh-keys:add new-key
Erstellen Sie eine Flask-Anwendung
-
Erstellen Sie auf Ihrem lokalen Computer ein neues Projektverzeichnis:
mkdir flask-example && cd flask-example
-
Erstellen Sie eine neue Datei namens
hello_world.py
die „Hello World!“ auf der Indexseite bereitstellt.- Datei:hello_world .py
1 2 3 4 5 6 7 8 9 10 11 12 13 14
import os from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello World!' if __name__ == '__main__': # Bind to PORT if defined, otherwise default to 5000. port = int(os.environ.get('PORT', 5000)) app.run(host='127.0.0.1', port=port)
-
Fügen Sie eine
requirements.txt
hinzu -Datei, um Versionen aller Abhängigkeiten der Flask-Anwendung nachzuverfolgen. Gunicorn ist der WSGI-Server, der verwendet wird, damit Flask ordnungsgemäß mit NGINX kommunizieren kann.- Datei:Anforderungen .txt
1 2
Flask==0.12.1 gunicorn==19.7.1
-
Leiten Sie bei komplexeren Projekten mit vielen Abhängigkeiten, die eine virtuelle Umgebung verwenden, die Ausgabe von
pip freeze
um inrequirements.txt
.pip freeze > requirements.txt
Gitignore hinzufügen
Fügen Sie optional eine .gitignore
hinzu Datei, damit Git das Caching und virtuelle Umgebungsdateien von der Versionskontrolle ausschließt.
- Datei:. gitignore
1 2 3 4
__pycache__/ *.pyc venv/
Procfile
Die Procfile teilt dem Gunicorn-Server mit, welcher Befehl beim Starten der App verwendet werden soll:
- File:Procfile
1
web: gunicorn hello_world:app --workers=4
Hinweis 4 Worker ist ein guter Standard für eine Web-App, die auf einem Linode läuft. Weitere Informationen zum Bestimmen der korrekten Anzahl von Workern für Ihre spezielle App finden Sie in der Gunicorn-Dokumentation.
Git-Remote
-
Initialisieren Sie ein Git-Repository:
git init git add . git commit -m "Deploy Flask with Dokku"
-
Fügen Sie eine Fernbedienung namens
dokku
hinzu mit dem Benutzernamendokku
und ersetzen Sieexample.com
mit der öffentlichen IP-Adresse Ihres Linode:git remote add dokku [email protected]:flask-example
-
Vergewissern Sie sich, dass die Fernbedienung hinzugefügt wurde:
git remote -v
Dies listet die Fernbedienungen auf.
dokku [email protected]:flask-example (fetch) dokku [email protected]:flask-example (push)
Zusammengefasst sieht das Projektlayout so aus:
flask-example ├── .gitignore ├── Procfile ├── hello_world.py └── requirements.txt
Projekt auf einem Dokku-Host erstellen
-
SSH in Ihr Linode und erstellen Sie die Anwendung:
dokku apps:create flask-example
-
Stellen Sie sicher, dass VHOST aktiviert ist.
dokku domains:enable flask-example
Stellen Sie eine Flask-Anwendung bereit
-
Stellen Sie auf Ihrem lokalen Computer die Flask-Anwendung bereit, indem Sie die Verzweigung zum
dokku
verschieben Fernbedienung. Dies kümmert sich hinter den Kulissen um NGINX und zeigt Port80
an :git push dokku master
Andere lokale Verzweigungen können ebenfalls bereitgestellt werden, aber alle Verzweigungen müssen an die Hauptverzweigung des
dokku
gepusht werden Fernbedienung:git push dokku branch-name:master
-
curl
die IP-Adresse Ihres Linode, um zu testen, ob die App erfolgreich bereitgestellt wurde:curl example.com
Hello World!
SSL-Zertifikat mit Dokku und Let’s Encrypt
Die verbleibenden Schritte in dieser Anleitung sollten von Ihrem Linode aus durchgeführt werden.
-
Installieren Sie das Let’s Encrypt-Plugin für Dokku:
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
-
Legen Sie
DOKKU_LETSENCRYPT_EMAIL
fest Umgebungsvariable an die E-Mail für Let’s Encrypt:dokku config:set flask-example [email protected]
-
Fügen Sie die Anwendung und die Domäne hinzu:
dokku domains:add flask-example example.com
-
Erstellen Sie das SSL-Zertifikat. NGINX beginnt automatisch mit der Bereitstellung der Anwendung über HTTPS auf Port 443:
dokku letsencrypt flask-example
-
Führen Sie dies als Cron-Job aus, damit das Zertifikat automatisch erneuert wird:.
dokku letsencrypt:cron-job --add
Hinweis Dies erfordert Dokku-Version 0.5 oder höher. Überprüfen Sie dies, indem Sie
dokku version
ausführen .
Anwendungen starten, stoppen und neu starten
-
Alle laufenden Dokku-Anwendungen auflisten:
dokku apps
-
Anwendung neu starten:
dokku ps:restart flask-example
-
Beenden Sie eine Anwendung:
dokku ps:stop flask-example
-
Alle Anwendungen nach einem Neustart wiederherstellen:
dokku ps:restore
Anwendungsprotokolle anzeigen
Zeigen Sie die Anwendungsprotokolle über Dokku oder den Docker-Container an.
-
So zeigen Sie Protokolle über Dokku an:
dokku logs flask-example
-
Alle laufenden Docker-Container auflisten:
sudo docker ps -a
-
Suchen Sie die Container-ID und führen Sie dann Folgendes aus:
sudo docker logs container_id
Anwendungen skalieren
Dokku skaliert Anwendungen nicht automatisch und führt standardmäßig nur ein einziges web
aus Prozess. Um die Anzahl der Container zu erhöhen, auf denen Ihre Anwendung ausgeführt wird, können Sie ps:scale
verwenden Befehl.
-
Überprüfen Sie, wie viele Mitarbeiter Ihre Anwendung derzeit hat:
dokku ps:scale flask-example
-----> Scaling for flask-example -----> proctype qty -----> -------- --- -----> web 1
-
Skalieren Sie bis zu 4
web
Prozesse:dokku ps:scale flask-example web=4
-
Bestätigen Sie, dass die neuen Prozesse ausgeführt werden:
-----> Scaling for flask-example -----> proctype qty -----> -------- --- -----> web 4
Dokku ist eine Open-Source-Alternative zu Heroku für kleine Anwendungen. Das Bereitstellen von Anwendungen ist so einfach wie das Pushen auf eine Remote mit Git. Elemente wie Docker und NGINX werden abstrahiert, um die Bereitstellungszeit zu minimieren. Es gibt zusätzliche Funktionen wie Pre-Deploy-Hooks und Verknüpfungsdatenbanken, die in diesem Handbuch nicht gezeigt werden.
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Dokku-PaaS
- Kolben