GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dokkuを使用してFlaskアプリケーションをデプロイする

Dokkuは、Gitを使用してアプリケーションを簡単にデプロイできる自己ホスト型のPlatform-as-a-Service(PaaS)です。 Dokkuの実装はHerokuに似ていますが、自動スケーリングなどの特定の主要な機能がありません。 Dokkuは、Docker内でアプリケーションを自動的に実行し、Webサーバーの最小限の構成を必要とする非常に強力なツールです。

このガイドでは、次の方法について説明します。

  • インデックスページに「HelloWorld!」を返すFlaskアプリケーションを作成します
  • LinodeにDokkuをインストールする
  • Dockerコンテナ内にWSGIサーバーを備えたFlaskアプリケーションをデプロイします
  • Let’sEncryptプラグインを使用してDokkuからSSL証明書を追加する

始める前に

ローカルコンピューター上

注 Dokku v0.12.5は、Ubuntu 16.04 x64、Ubuntu 14.04 x64、およびDebian8.2x64と互換性があります。 CentOS 7 x64は実験的にのみサポートされているため、SSHキーや仮想ホストの構成などの一部の手順は、dokkuコマンドラインインターフェイスを使用して手動で実行する必要があります。詳細については、公式ドキュメントを参照してください。

公開鍵は使用可能であると想定されています。通常、これは~/home/username/.ssh/id_rsa.pubにあります。 。

必要に応じてGitをインストールします:

sudo apt install git

あなたのLinodeについて

Dokkuインストールスクリプトはdokkuを作成します システム上のユーザー、Dockerをインストールし、関連するイメージをプルします。

  1. Dokkuからインストールスクリプトをダウンロードして、スクリプトを実行します。

    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. ブラウザでLinodeの公開IPアドレスに移動し、公開鍵を入力します:

    注意 インストールスクリプトを実行した直後に公開鍵を追加して、他の誰かが公開鍵をDokkuに追加しないようにします。無人インストールについては、高度なインストール手順を参照してください。
  3. SSHキーを追加するには、SSH経由で出力をdokkuにパイプします ユーザー。 example.comを置き換えます LinodeのIPアドレスを使用します。

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

フラスコアプリケーションを作成する

  1. ローカルコンピュータで、新しいプロジェクトディレクトリを作成します:

    mkdir flask-example && cd flask-example
    
  2. hello_world.pyという名前の新しいファイルを作成します インデックスページで「HelloWorld!」を提供します。

    ファイル: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. requirements.txtを追加します Flaskアプリケーションの依存関係のバージョンを追跡するためのファイル。 Gunicornは、FlaskがNGINXと適切にインターフェースできるようにするために使用されるWSGIサーバーです。

    ファイル:要件.txt
    1
    2
    
    Flask==0.12.1
    gunicorn==19.7.1
  4. 仮想環境を使用する多くの依存関係を持つより複雑なプロジェクトの場合、pip freezeの出力をリダイレクトします requirements.txtに 。

    pip freeze > requirements.txt
    

gitignoreを追加する

必要に応じて、.gitignoreを追加します Gitにバージョン管理からキャッシュと仮想環境ファイルを省略させるファイル。

ファイル:。 gitignore
1
2
3
4
__pycache__/
*.pyc

venv/

Procfile

Procfileは、Gunicornサーバーにアプリの起動時に使用するコマンドを指示します。

ファイル:Procfile
1
web: gunicorn hello_world:app --workers=4
注 Linodeで実行されているWebアプリのデフォルトは4人です。特定のアプリの正しいワーカー数を決定する方法の詳細については、Gunicornのドキュメントをご覧ください。

Git Remote

  1. Gitリポジトリを初期化します:

    git init
    git add .
    git commit -m "Deploy Flask with Dokku"
    
  2. dokkuという名前のリモートを追加します ユーザー名dokku example.comに置き換えます LinodeのパブリックIPアドレスを使用:

    git remote add dokku [email protected]:flask-example
    
  3. リモートが追加されていることを確認します:

    git remote -v
    

    これにより、リモートが一覧表示されます。

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

    要約すると、プロジェクトのレイアウトは次のようになります。

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

Dokkuホストでプロジェクトを作成

  1. LinodeにSSHで接続し、アプリケーションを作成します:

    dokku apps:create flask-example
    
  2. VHOSTが有効になっていることを確認してください。

    dokku domains:enable flask-example
    

フラスコアプリケーションをデプロイする

  1. ローカルコンピューターで、ブランチをdokkuにプッシュして、Flaskアプリケーションをデプロイします。 リモート。これにより、NGINXが舞台裏で処理され、ポート80が公開されます。 :

    git push dokku master
    

    他のローカルブランチもデプロイできますが、すべてのブランチをdokkuのマスターブランチにプッシュする必要があります リモート:

    git push dokku branch-name:master
    
  2. curl アプリが正常にデプロイされたことをテストするためのLinodeのIPアドレス:

    curl example.com
    
    Hello World!

DokkuとLet’sEncryptを使用したSSL証明書

このガイドの残りの手順は、Linodeから実行する必要があります。

  1. Dokku用のLet’s Encryptプラグインをインストールします:

    sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
    
  2. DOKKU_LETSENCRYPT_EMAILを設定します Let’s Encryptのメールの環境変数:

    dokku config:set flask-example [email protected]
    
  3. アプリケーションとドメインを追加します:

    dokku domains:add flask-example example.com
    
  4. SSL証明書を作成します。 NGINXは、ポート443でHTTPS経由でアプリケーションの提供を自動的に開始します:

     dokku letsencrypt flask-example
    
  5. これをcronジョブとして実行すると、証明書が自動的に更新されます。

    dokku letsencrypt:cron-job --add
    
    注 これには、Dokkuバージョン0.5以降が必要です。 dokku versionを実行して確認してください 。

アプリケーションの開始、停止、および再起動

  • 実行中のすべてのDokkuアプリケーションを一覧表示します:

      dokku apps
    
  • アプリケーションを再起動します:

      dokku ps:restart flask-example
    
  • アプリケーションを停止します:

      dokku ps:stop flask-example
    
  • 再起動後にすべてのアプリケーションを復元します:

      dokku ps:restore
    

アプリケーションログの表示

DokkuまたはDockerコンテナを介してアプリケーションログを表示します。

  1. Dokkuでログを表示するには:

    dokku logs flask-example
    
  2. 実行中のすべてのDockerコンテナを一覧表示します:

    sudo docker ps -a
    
  3. コンテナIDを見つけて実行します:

    sudo docker logs container_id
    

スケールアプリケーション

Dokkuはアプリケーションを自動的にスケーリングせず、デフォルトでは単一のwebのみを実行します 処理する。アプリケーションを実行するコンテナーの数を増やすには、ps:scaleを使用できます。 コマンド。

  1. アプリケーションに現在存在するワーカーの数を確認します:

    dokku ps:scale flask-example
    
    -----> Scaling for flask-example
    -----> proctype           qty
    -----> --------           ---
    -----> web                1
  2. 最大4つのwebにスケールアップ プロセス:

    dokku ps:scale flask-example web=4
    
  3. 新しいプロセスが実行されていることを確認します:

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

Dokkuは、小規模なアプリケーション向けのHerokuのオープンソース代替手段です。アプリケーションのデプロイは、Gitを使用してリモートにプッシュするのと同じくらい簡単です。 DockerやNGINXなどの要素は、デプロイまでの時間を最小限に抑えるために抽象化されています。このガイドには示されていない、展開前のフックやデータベースのリンクなどの追加機能があります。

詳細情報

このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。

  • Dokku PaaS
  • フラスコ

Docker
  1. Ubuntuにpm2とNginxを使用してNode.jsアプリケーションをデプロイする方法

  2. Ubuntu20.04LTSにNginxを使用してModsecurityをデプロイする

  3. Ubuntu20.04にNginxとGunicornを使用してFlaskアプリケーションをデプロイする方法

  1. Dockerを使用してマイクロサービスをデプロイする方法

  2. ランチャーでアプリをデプロイする方法

  3. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  1. RubyでLinuxデスクトップアプリケーションを作成する

  2. Debian10でDockerを使用してFlaskアプリケーションをDocker化する

  3. Ubuntu20.04にNginxを使用してClojureWebアプリケーションをデプロイする方法