GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So hosten Sie Ihre eigene Platform-as-a-Service (PaaS) mit Dokku

Dokku ist eine Platform-as-a-Service (PaaS)-Implementierung, die Sie selbst auf Ihrer eigenen Hardware hosten können. Dokku verwendet Docker, um Ihren Code automatisch bereitzustellen, wenn Sie git push von Ihrem Terminal.

Durch die Einrichtung eines Dokku-Servers können Sie schnell neue Anwendungen mithilfe des vertrauten Git-Workflows bereitstellen. Die Hosting-Kosten können viel niedriger sein als bei kommerziellen PaaS-Lösungen und verwalteten Kubernetes-Angeboten. Sobald Ihr Dokku-Server betriebsbereit ist, sollte das Starten einer neuen Anwendung nur wenige Augenblicke dauern.

Erste Schritte

Dokku unterstützt mehrere Installationsmethoden. Verwenden Sie bei der Installation auf Bare-Metal-Hardware das offizielle Bootstrap-Skript, um die neueste Version herunterzuladen.

wget https://raw.githubusercontent.com/dokku/dokku/v0.24.7/bootstrap.sh
sudo DOKKU_TAG=v0.24.7 bash bootstrap.sh

Das Bootstrap-Skript verwandelt eine frische Linux-Installation in einen funktionierenden Dokku-Server. Softwareabhängigkeiten, einschließlich Docker, werden automatisch heruntergeladen und installiert. Der Vorgang kann je nach Internetverbindung bis zu 10 Minuten dauern.

Sie können Dokku als Docker-Container ausführen. Dies ist ideal, wenn Sie eine Umgebung verwenden, in der Docker bereits verfügbar ist.

docker run 
    --env DOKKU_HOSTNAME=example.com 
    --name doku
    -p 3022:22 
    -p 8080:80 
    -p 8443:443 
    -v /var/lib/dokku:/mnt/dokku 
    -v /var/run/docker.sock:/var/run/docker.sock 
    dokku/dokku:0.24.7

Ersetzen Sie example.com mit dem Hostnamen, den Sie für den Zugriff auf Ihren Server verwenden. In diesem Beispiel werden die Ports 80 und 443 an Ihre Host-Ports 8080 bzw. 8443 gebunden. Port 3022 auf Ihrem Host wird Port 22 innerhalb des Containers zugeordnet. Dieser Port wird für Git+SSH-Verbindungen verwendet.

Ein Volume wird unter /mnt/dokku erstellt . Hier werden Dokku-Anwendungsdaten gespeichert. Der Docker-Socket des Hosts wird ebenfalls in den Container gemountet, sodass Dokku mit dem Docker-Daemon interagieren kann, um neue Container zu erstellen.

Dokku konfigurieren

Besuchen Sie nach Abschluss der Installation die IP-Adresse Ihres Hosts in Ihrem Browser. Wenn Sie Dokku einen Hostnamen zugewiesen haben, können Sie diesen hier ebenfalls verwenden. Der Web-Installer wird angezeigt, um Sie durch den Rest der Einrichtung zu führen.

Kopieren Sie einen SSH-Schlüssel und fügen Sie ihn in das Feld „Öffentlicher Schlüssel“ ein. Dokku akzeptiert alle SSH-Verbindungen, die mit diesem Schlüssel hergestellt werden. Sie können später mit der Dokku-CLI weitere Schlüssel hinzufügen.

Sie müssen auch den Hostnamen Ihrer Dokku-Installation konfigurieren, falls er noch nicht eingerichtet wurde. Wenn Sie Ihrem Computer eine Domain zugeordnet haben, geben Sie diese hier ein. Andernfalls können Sie localhost verwenden oder eine IP-Adresse.

Wenn ein Hostname eingerichtet wurde, kann Dokku Ihre Apps automatisch mit individuellen Subdomains bereitstellen. Wenn Sie keine Domain zur Verfügung haben, deaktivieren Sie das Kontrollkästchen „Virtualhost-Benennung verwenden“. Dokku stellt stattdessen jede Ihrer Apps auf einem dedizierten Port bereit.

Wenn Sie Dokku mit Docker installiert haben, wird die Webeinrichtung nicht unterstützt. Sie können beim Erstellen des Containers einen Hostnamen hinzufügen, indem Sie DOKKU_HOSTNAME festlegen Umgebungsvariable. Um SSH-Schlüssel hinzuzufügen, müssen Sie sich mit dem Container verbinden und die Dokku-CLI verwenden:

docker exec -it dokku dokku ssh-keys add my-key < /path/to/key

Sobald Sie einen Hostnamen festgelegt und einen SSH-Schlüssel hinzugefügt haben, sollte Dokku einsatzbereit sein. Über das Web-UI ist keine weitere Administration möglich. Sie interagieren mit Dokku über Git-Befehle und die CLI.

Bereitstellen von Anwendungen

Jetzt können Sie Ihre erste App starten! Dokku-Bereitstellungen beginnen mit einem git push . Dokku verwendet Buildpacks (entweder Cloud Native oder Herokuish), um die Programmiersprache Ihrer App zu erkennen und automatisch einen Build zu erstellen.

Dokku unterstützt auch das Ausführen von docker build direkt, wenn Ihr Projekt ein Dockerfile enthält . Diese Funktionalität kann nur verwendet werden, wenn die Buildpack-basierten Builder für Ihr Projekt nicht verfügbar sind. Weitere Informationen zu direkten Docker-Builds finden Sie in der Dokku-Dokumentation.

Die Verwendung von Buildpacks bedeutet, dass Dokku der Erstellung Ihres Projekts nur wenige Einschränkungen auferlegt. Wenn Sie eine beliebte Sprache und ein Framework verwenden, sollten Sie in der Lage sein, git push auszuführen um Ihre Bereitstellung zu erstellen. Hier ist ein Beispiel für eine einfache React-App:

mkdir my-app
cd my-app
npx create-react-app .

git remote add dokku [email protected]:my-app
git push dokku master

Die letzten beiden Zeilen sind die wichtigsten. Ihr Dokku-Server wird als Git-Remote hinzugefügt, sodass Sie Code darauf übertragen können. Ersetzen Sie example.com mit der IP oder dem Hostnamen Ihrer Installation. Der Teil nach dem Doppelpunkt gibt das Dokku-Projekt an, zu dem gepusht werden soll. Sie müssen es nicht manuell erstellen.

Nachdem die Fernbedienung eingerichtet wurde, können Sie den Code darauf übertragen. Der Beispielbefehl pusht den master Abzweig nach Dokku. Dokku übernimmt Ihr Projekt, erkennt automatisch ein geeignetes Buildpack, erstellt ein Docker-Image und stellt Ihre App bereit.

Anhängen von App-Domains

Dokku stellt Ihre App in einer Subdomain Ihres Hostnamens bereit. Sie können eine benutzerdefinierte Domäne mit der Dokku-CLI anhängen. Stellen Sie sicher, dass Sie zuerst die entsprechenden DNS-Einträge eingerichtet haben.

dokku domains:add my-app example.com

Besuch von example.com wird nun Ihre my-app bedienen Bereitstellung.

SSL hinzufügen

Dokku macht es einfach, SSL für Ihre Apps zu aktivieren. Sie können ein Plugin hinzufügen, das Dokku mit Let’s Encrypt integriert. Sobald das Plugin installiert wurde, können Sie SSL-Zertifikate mit einem einzigen Befehl erwerben.

Installieren Sie zuerst das Plugin:

dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

Konfigurieren Sie als Nächstes das Let’s Encrypt-Plugin mit Ihrer E-Mail-Adresse. Let’s Encrypt verwendet diese Adresse, um Ihnen Benachrichtigungen zu Ihren Zertifikaten zu senden.

dokku config:set --global no-restart [email protected]

Sie sollten den Cron-Job Let’s Encrypt hinzufügen, um sicherzustellen, dass Dokku Ihre Zertifikate automatisch erneuern kann:

dokku letsencrypt:cron-job --add

Aktivieren Sie abschließend Let’s Encrypt für Ihre Anwendung:

dokku letsencrypt my-app

Das Let’s Encrypt-Plugin erwirbt ein Zertifikat, um die mit Ihrer App verbundenen Domänen abzudecken. Das Zertifikat wird automatisch verlängert, bevor es abläuft.

Aktualisieren Ihrer App

Dokku baut auf dem Git-Workflow auf. Sie können Ihre App aktualisieren, indem Sie Änderungen an der Codebasis vornehmen, Git-Commits erstellen und dann Ihren Branch an Dokku pushen.

Wenn Dokku einen neuen Push erhält, verwendet es seine Buildpacks, um einen aktualisierten Docker-Container zu erstellen. Der derzeit ausgeführte Container wird nach Abschluss des Builds durch den neuen ersetzt. Updates sind ohne Ausfallzeiten und vollständig automatisiert.

Die Dauer des Erstellungsprozesses hängt von der Größe Ihrer App und den verwendeten Technologien ab. Dokku wartet nach Abschluss des Builds weitere 10 Sekunden, bevor der Datenverkehr an neue Container geleitet wird. Dies gibt allen Bootstrap-Skripten die Möglichkeit, abgeschlossen zu werden.

Dokku lässt sich problemlos in Continuous Integration (CI)-Systeme integrieren. Die letzte Stufe in einer CI-Pipeline könnte ein git push dokku sein um Ihre Live-Bereitstellung zu aktualisieren.

Zweige verwalten

Dokku stellt normalerweise Änderungen bereit, die am master vorgenommen wurden Zweig. Sie können wählen, ob Sie einen anderen Zweig verwenden möchten, indem Sie eine globale oder anwendungsbezogene Einstellung verwenden:

dokku git:set --global deploy-branch dokku-deploy

dokku git:set my-app deploy-branch production

Mit dieser Konfiguration wird Dokku standardmäßig über dokku-deploy bereitstellen Zweig. Bereitstellungen für my-app App wird aus der production erstellt stattdessen.

Hinzufügen zusätzlicher Funktionen

Dokku bietet viel mehr als die grundlegende Bereitstellung, auf die wir uns hier konzentriert haben. Die Standardverteilung ist absichtlich gestrafft. Offizielle und Community-Plug-ins können verwendet werden, um Dienste wie Datenbanken und Authentifizierung bereitzustellen. Dadurch können Sie Dokku sowohl für zustandsbehaftete Backends als auch für Ihre statischen Frontends verwenden.

Das Einrichten eines Dienstes ist im Allgemeinen ein zweistufiger Prozess. Sie erstellen eine Instanz des Dienstes und verknüpfen ihn dann mit Ihren Apps. Mit jeder Dienstinstanz können mehrere Apps verbunden werden.

So können Sie einer App eine MySQL-Datenbank hinzufügen:

dokku plugin:install https://github.com/dokku/dokku-mysql.git

dokku mysql:create demo-db

dokku mysql:link demo-db my-app

Dokku setzt die DATABASE_URL Umgebungsvariable in Ihrem App-Container. Sie können auf diese Variable zugreifen, um die MySQL-Verbindungszeichenfolge abzurufen. Durch die Verwendung von Dokku-Plugins für Datenbanken entfällt die Notwendigkeit, einen weiteren externen Datenbankserver zu verwalten.

Schlussfolgerung

Docker ist eine PaaS-Lösung, mit der Sie Ihre eigene Anwendungsplattform hosten können. Sobald Dokku eingerichtet ist und läuft, ist das Starten einer neuen App so einfach wie ein git push .

Dokku schneidet im Vergleich zu Diensten wie Heroku, Amazon Elastic Beanstalk und Google Firebase gut ab. Es unterstützt eine Vielzahl von Entwicklungstechnologien und macht Sie nicht an einen bestimmten Cloud-Anbieter gebunden. Sie können Dokku auf einer günstigen Cloud-basierten VM ausführen oder auf Ihrer eigenen physischen Hardware behalten.


Docker
  1. So installieren und hosten Sie einen OpenVPN-Server mit Docker

  2. So installieren Sie Jenkins mit Docker

  3. So stellen Sie Microservices mit Docker bereit

  4. So stellen Sie Apps mit Rancher bereit

  5. So stellen Sie einen Nginx-Container mit Docker auf Linode bereit

So ersetzen Sie Docker durch Podman auf einem Mac

So hosten Sie Ihre eigene Platform-as-a-Service (PaaS) mit Dokku

So stellen Sie eine Verbindung zu Localhost in einem Docker-Container her

So indizieren Sie die Abhängigkeiten Ihres Docker-Images mit Syft

So kopieren Sie Dateien mit Docker cp in Ihren Docker-Container

So betreiben Sie Ihren eigenen Git-Server mit GitlabHQ unter Ubuntu 14.04