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

Stellen Sie eine Flask-Anwendung mit Dokku bereit

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.

  1. 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.
    ...
  2. 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.
  3. Um zusätzliche SSH-Schlüssel hinzuzufügen, leiten Sie die Ausgabe über SSH an dokku weiter Benutzer. Ersetzen Sie example.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

  1. Erstellen Sie auf Ihrem lokalen Computer ein neues Projektverzeichnis:

    mkdir flask-example && cd flask-example
    
  2. 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)
  3. 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
  4. Leiten Sie bei komplexeren Projekten mit vielen Abhängigkeiten, die eine virtuelle Umgebung verwenden, die Ausgabe von pip freeze um in requirements.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

  1. Initialisieren Sie ein Git-Repository:

    git init
    git add .
    git commit -m "Deploy Flask with Dokku"
    
  2. Fügen Sie eine Fernbedienung namens dokku hinzu mit dem Benutzernamen dokku und ersetzen Sie example.com mit der öffentlichen IP-Adresse Ihres Linode:

    git remote add dokku [email protected]:flask-example
    
  3. 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

  1. SSH in Ihr Linode und erstellen Sie die Anwendung:

    dokku apps:create flask-example
    
  2. Stellen Sie sicher, dass VHOST aktiviert ist.

    dokku domains:enable flask-example
    

Stellen Sie eine Flask-Anwendung bereit

  1. 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 Port 80 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
    
  2. 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.

  1. Installieren Sie das Let’s Encrypt-Plugin für Dokku:

    sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
    
  2. Legen Sie DOKKU_LETSENCRYPT_EMAIL fest Umgebungsvariable an die E-Mail für Let’s Encrypt:

    dokku config:set flask-example [email protected]
    
  3. Fügen Sie die Anwendung und die Domäne hinzu:

    dokku domains:add flask-example example.com
    
  4. Erstellen Sie das SSL-Zertifikat. NGINX beginnt automatisch mit der Bereitstellung der Anwendung über HTTPS auf Port 443:

     dokku letsencrypt flask-example
    
  5. 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.

  1. So zeigen Sie Protokolle über Dokku an:

    dokku logs flask-example
    
  2. Alle laufenden Docker-Container auflisten:

    sudo docker ps -a
    
  3. 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.

  1. Überprüfen Sie, wie viele Mitarbeiter Ihre Anwendung derzeit hat:

    dokku ps:scale flask-example
    
    -----> Scaling for flask-example
    -----> proctype           qty
    -----> --------           ---
    -----> web                1
  2. Skalieren Sie bis zu 4 web Prozesse:

    dokku ps:scale flask-example web=4
    
  3. 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

Docker
  1. So stellen Sie Node.js-Anwendungen mit pm2 und Nginx auf Ubuntu bereit

  2. Stellen Sie Modsecurity mit Nginx auf Ubuntu 20.04 LTS bereit

  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 stellen Sie Docker Compose Stacks mit Kompose in Kubernetes bereit

So stellen Sie eine Python Flask-API-Anwendung auf Docker bereit

So stellen Sie CouchDB als Cluster mit Docker bereit

Schnelle Bereitstellung von Full-Stack-Anwendungen mit Portainer-Anwendungsvorlagen

Node.js cPanel:So stellen Sie eine App bereit

Wie stellt man die Laravel-Anwendung mit Nginx auf Ubuntu bereit?