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をインストールし、関連するイメージをプルします。
-
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. ...
-
ブラウザでLinodeの公開IPアドレスに移動し、公開鍵を入力します:
注意 インストールスクリプトを実行した直後に公開鍵を追加して、他の誰かが公開鍵をDokkuに追加しないようにします。無人インストールについては、高度なインストール手順を参照してください。 -
SSHキーを追加するには、SSH経由で出力を
dokku
にパイプします ユーザー。example.com
を置き換えます LinodeのIPアドレスを使用します。cat ~/.ssh/id_rsa.pub | ssh [email protected] ssh-keys:add new-key
フラスコアプリケーションを作成する
-
ローカルコンピュータで、新しいプロジェクトディレクトリを作成します:
mkdir flask-example && cd flask-example
-
hello_world.py
という名前の新しいファイルを作成します インデックスページで「HelloWorld!」を提供します。- ファイル:hello_world .py
-
requirements.txt
を追加します Flaskアプリケーションの依存関係のバージョンを追跡するためのファイル。 Gunicornは、FlaskがNGINXと適切にインターフェースできるようにするために使用されるWSGIサーバーです。- ファイル:要件.txt
-
仮想環境を使用する多くの依存関係を持つより複雑なプロジェクトの場合、
pip freeze
の出力をリダイレクトしますrequirements.txt
に 。pip freeze > requirements.txt
gitignoreを追加する
必要に応じて、.gitignore
を追加します Gitにバージョン管理からキャッシュと仮想環境ファイルを省略させるファイル。
- ファイル:。 gitignore
Procfile
Procfileは、Gunicornサーバーにアプリの起動時に使用するコマンドを指示します。
- ファイル:Procfile
注 Linodeで実行されているWebアプリのデフォルトは4人です。特定のアプリの正しいワーカー数を決定する方法の詳細については、Gunicornのドキュメントをご覧ください。
Git Remote
-
Gitリポジトリを初期化します:
git init git add . git commit -m "Deploy Flask with Dokku"
-
dokku
という名前のリモートを追加します ユーザー名dokku
example.com
に置き換えます LinodeのパブリックIPアドレスを使用:git remote add dokku [email protected]:flask-example
-
リモートが追加されていることを確認します:
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ホストでプロジェクトを作成
-
LinodeにSSHで接続し、アプリケーションを作成します:
dokku apps:create flask-example
-
VHOSTが有効になっていることを確認してください。
dokku domains:enable flask-example
フラスコアプリケーションをデプロイする
-
ローカルコンピューターで、ブランチを
dokku
にプッシュして、Flaskアプリケーションをデプロイします。 リモート。これにより、NGINXが舞台裏で処理され、ポート80
が公開されます。 :git push dokku master
他のローカルブランチもデプロイできますが、すべてのブランチを
dokku
のマスターブランチにプッシュする必要があります リモート:git push dokku branch-name:master
-
curl
アプリが正常にデプロイされたことをテストするためのLinodeのIPアドレス:curl example.com
Hello World!
DokkuとLet’sEncryptを使用したSSL証明書
このガイドの残りの手順は、Linodeから実行する必要があります。
-
Dokku用のLet’s Encryptプラグインをインストールします:
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
-
DOKKU_LETSENCRYPT_EMAIL
を設定します Let’s Encryptのメールの環境変数:dokku config:set flask-example [email protected]
-
アプリケーションとドメインを追加します:
dokku domains:add flask-example example.com
-
SSL証明書を作成します。 NGINXは、ポート443でHTTPS経由でアプリケーションの提供を自動的に開始します:
dokku letsencrypt flask-example
-
これを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コンテナを介してアプリケーションログを表示します。
-
Dokkuでログを表示するには:
dokku logs flask-example
-
実行中のすべてのDockerコンテナを一覧表示します:
sudo docker ps -a
-
コンテナIDを見つけて実行します:
sudo docker logs container_id
スケールアプリケーション
Dokkuはアプリケーションを自動的にスケーリングせず、デフォルトでは単一のweb
のみを実行します 処理する。アプリケーションを実行するコンテナーの数を増やすには、ps:scale
を使用できます。 コマンド。
-
アプリケーションに現在存在するワーカーの数を確認します:
dokku ps:scale flask-example
-----> Scaling for flask-example -----> proctype qty -----> -------- --- -----> web 1
-
最大4つの
web
にスケールアップ プロセス:dokku ps:scale flask-example web=4
-
新しいプロセスが実行されていることを確認します:
-----> Scaling for flask-example -----> proctype qty -----> -------- --- -----> web 4
Dokkuは、小規模なアプリケーション向けのHerokuのオープンソース代替手段です。アプリケーションのデプロイは、Gitを使用してリモートにプッシュするのと同じくらい簡単です。 DockerやNGINXなどの要素は、デプロイまでの時間を最小限に抑えるために抽象化されています。このガイドには示されていない、展開前のフックやデータベースのリンクなどの追加機能があります。
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- Dokku PaaS
- フラスコ