GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Nasaďte aplikaci Flask s Dokku

Dokku je samoobslužná platforma jako služba (PaaS), která usnadňuje nasazování aplikací pomocí Git. Přestože je implementace Dokku podobná Heroku, postrádá určité klíčové funkce, jako je automatické škálování. Dokku je extrémně výkonný nástroj, který automaticky spouští vaši aplikaci v Dockeru a vyžaduje minimální konfiguraci webových serverů.

Tato příručka ukazuje, jak:

  • Vytvořte aplikaci Flask, která na stránce indexu vrátí „Hello World!“
  • Nainstalujte Dokku na Linode
  • Nasazení aplikace Flask se serverem WSGI uvnitř kontejneru Docker
  • Přidejte certifikát SSL prostřednictvím Dokku pomocí pluginu Let’s Encrypt

Než začnete

Na vašem místním počítači

Poznámka Dokku v0.12.5 je kompatibilní s Ubuntu 16.04 x64, Ubuntu 14.04 x64 a Debian 8.2 x64. CentOS 7 x64 je podporován pouze experimentálně, a proto je třeba některé kroky, jako je konfigurace klíčů SSH a virtuálních hostitelů, provést ručně pomocí rozhraní příkazového řádku dokku. Další informace naleznete v oficiální dokumentaci.

Předpokládá se, že veřejný klíč je k dispozici. Obvykle se nachází v ~/home/username/.ssh/id_rsa.pub .

V případě potřeby nainstalujte Git:

sudo apt install git

Na vašem Linode

Instalační skript Dokku vytvoří dokku uživatel v systému, nainstaluje Docker a stáhne příslušný obraz.

  1. Stáhněte si instalační skript z Dokku a poté spusťte skript:

    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. Přejděte v prohlížeči na veřejnou IP adresu svého Linode a zadejte veřejný klíč:

    Pozor Veřejný klíč přidejte ihned po spuštění instalačního skriptu, aby do Dokku nepřidal veřejný klíč někdo jiný. Informace o bezobslužné instalaci naleznete v pokynech pro pokročilou instalaci.
  3. Chcete-li přidat další klíče SSH, přesuňte výstup přes SSH do dokku uživatel. Nahraďte example.com s IP adresou vašeho Linode.

    cat ~/.ssh/id_rsa.pub | ssh [email protected] ssh-keys:add new-key
    

Vytvoření aplikace baňky

  1. V místním počítači vytvořte nový adresář projektu:

    mkdir flask-example && cd flask-example
    
  2. Vytvořte nový soubor s názvem hello_world.py která na stránce indexu zobrazuje „Hello World!“.

    Soubor: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. Přidejte requirements.txt soubor ke sledování verzí všech závislostí aplikace Flask. Gunicorn je WSGI server používaný k tomu, aby Flask mohl správně komunikovat s NGINX.

    Soubor:požadavky .txt
    1
    2
    
    Flask==0.12.1
    gunicorn==19.7.1
  4. U složitějších projektů s mnoha závislostmi využívajícími virtuální prostředí přesměrujte výstup pip freeze do requirements.txt .

    pip freeze > requirements.txt
    

Přidat gitignore

Volitelně přidejte .gitignore soubor, aby Git vynechal ukládání do mezipaměti a soubory virtuálního prostředí ze správy verzí.

Soubor:. gitignore
1
2
3
4
__pycache__/
*.pyc

venv/

Procfile

Procfile říká serveru Gunicorn, jaký příkaz má použít při spouštění aplikace:

Soubor:Procfile
1
web: gunicorn hello_world:app --workers=4
Poznámka 4 pracovníci jsou dobrým výchozím nastavením pro webovou aplikaci běžící na Linode. Další informace o určení správného počtu pracovníků pro vaši konkrétní aplikaci naleznete v dokumentech Gunicorn.

Git Remote

  1. Inicializujte úložiště Git:

    git init
    git add .
    git commit -m "Deploy Flask with Dokku"
    
  2. Přidejte dálkový ovladač s názvem dokku s uživatelským jménem dokku a nahraďte example.com s veřejnou IP adresou vašeho Linode:

    git remote add dokku [email protected]:flask-example
    
  3. Ověřte, že je přidán dálkový ovladač:

    git remote -v
    

    Zobrazí se seznam dálkových ovladačů.

    dokku   [email protected]:flask-example (fetch)
    dokku   [email protected]:flask-example (push)

    Stručně řečeno, rozložení projektu vypadá takto:

    flask-example
    ├── .gitignore
    ├── Procfile
    ├── hello_world.py
    └── requirements.txt
    

Vytvořit projekt na hostiteli Dokku

  1. SSH do vašeho Linode a vytvořte aplikaci:

    dokku apps:create flask-example
    
  2. Ujistěte se, že je povolen VHOST.

    dokku domains:enable flask-example
    

Nasazení aplikace Flask

  1. Na místním počítači nasaďte aplikaci Flask posunutím větve do dokku dálkový. To se postará o NGINX v zákulisí a odhalí port 80 :

    git push dokku master
    

    Lze nasadit i další místní pobočky, ale všechny pobočky musí být přeneseny do hlavní větve dokku dálkové ovládání:

    git push dokku branch-name:master
    
  2. curl IP adresu vašeho Linode, abyste otestovali, zda byla aplikace úspěšně nasazena:

    curl example.com
    
    Hello World!

Certifikát SSL s Dokku a Let’s Encrypt

Zbývající kroky v této příručce by měly být provedeny z vašeho Linode.

  1. Nainstalujte si plugin Let’s Encrypt pro Dokku:

    sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
    
  2. Nastavte DOKKU_LETSENCRYPT_EMAIL proměnná prostředí do e-mailu pro Let’s Encrypt:

    dokku config:set flask-example [email protected]
    
  3. Přidejte aplikaci a doménu:

    dokku domains:add flask-example example.com
    
  4. Vytvořte certifikát SSL. NGINX automaticky začne obsluhovat aplikaci přes HTTPS na portu 443:

     dokku letsencrypt flask-example
    
  5. Spusťte to jako cron úlohu, takže certifikát se automaticky obnoví:.

    dokku letsencrypt:cron-job --add
    
    Poznámka To vyžaduje Dokku verze 0.5 nebo vyšší. Zkontrolujte spuštěním dokku version .

Spuštění, zastavení a restartování aplikací

  • Seznam všech spuštěných aplikací Dokku:

      dokku apps
    
  • Restartujte aplikaci:

      dokku ps:restart flask-example
    
  • Zastavení aplikace:

      dokku ps:stop flask-example
    
  • Obnovení všech aplikací po restartu:

      dokku ps:restore
    

Zobrazit protokoly aplikací

Prohlédněte si protokoly aplikací prostřednictvím Dokku nebo kontejneru Docker.

  1. Chcete-li zobrazit protokoly prostřednictvím Dokku:

    dokku logs flask-example
    
  2. Seznam všech spuštěných kontejnerů Docker:

    sudo docker ps -a
    
  3. Najděte ID kontejneru a poté spusťte:

    sudo docker logs container_id
    

Škálování aplikací

Dokku neškáluje aplikace automaticky a ve výchozím nastavení poběží pouze jeden web proces. Chcete-li zvýšit počet kontejnerů, ve kterých vaše aplikace běží, můžete použít ps:scale příkaz.

  1. Zkontrolujte, kolik pracovníků má vaše aplikace aktuálně:

    dokku ps:scale flask-example
    
    -----> Scaling for flask-example
    -----> proctype           qty
    -----> --------           ---
    -----> web                1
  2. Měřítko až 4 web procesy:

    dokku ps:scale flask-example web=4
    
  3. Potvrďte, že nové procesy běží:

    -----> Scaling for flask-example
    -----> proctype           qty
    -----> --------           ---
    -----> web                4

Dokku je open source alternativa k Heroku pro malé aplikace. Nasazení aplikací je stejně jednoduché jako přesunutí na dálkové ovládání pomocí Gitu. Prvky jako Docker a NGINX jsou odstraněny, aby se minimalizovala doba potřebná k nasazení. K dispozici jsou další funkce, jako jsou háčky před nasazením a propojování databází, které nejsou uvedeny v této příručce.

Další informace

Další informace o tomto tématu můžete získat v následujících zdrojích. Přestože jsou poskytovány v naději, že budou užitečné, vezměte prosím na vědomí, že nemůžeme ručit za přesnost nebo aktuálnost externě hostovaných materiálů.

  • Dokku PaaS
  • Baňka

Docker
  1. Jak nasadit aplikace Node.js s pm2 a Nginx na Ubuntu

  2. Jak nasadit mikroslužby s Dockerem

  3. Jak nasadit aplikace s Rancherem

  1. Nasaďte Modsecurity s Nginx na Ubuntu 20.04 LTS

  2. Jak nasadit kontejner nginx s Dockerem na Linode

  3. Jak nasadit aplikaci Flask s Nginx a Gunicorn na Ubuntu 20.04

  1. Vytvořte linuxovou desktopovou aplikaci s Ruby

  2. Dockerizing aplikace Flask pomocí Dockeru na Debianu 10

  3. Jak nasadit webovou aplikaci Clojure s Nginx na Ubuntu 20.04