ご自身の開発環境で開発した Python アプリをマネージドクラウドで公開する方法です。
Python コンテナは git コマンドを利用して、アプリケーションをデプロイすることが可能です。
※ 予め作業環境に python3
及び pipenv
のインストールをお願いします。
手順
1. Python のプロジェクトを作成
プロジェクト作成ページ から Python のアプリケーションを選んで、プロジェクトを作成します。
2. SSH の公開鍵を登録
SSHの公開鍵が未登録の場合は SSH公開鍵ページ で登録します。
3. Git リポジトリの作成
まずアプリケーションの元となる、ソースコードを作成します。ソースコードは Git リポジトリという仕組みで管理する必要があります。お手元のPCで以下のコマンドを実行してください。
(※ 以下MacOS/Linux 環境のコマンドラインでの操作方法となりますので、別途GUIツールをご利用の場合は適宜読み替えをお願いします。)
# リポジトリとなるディレクトリを作成する
mkdir app
cd app
# リポジトリとして初期化
git init
4. 最初のソースコードを作成
引き続きお手元のPCでの作業となります。今回は Django を使用します。
まずはアプリケーションの起動に必要な django パッケージを取得します。
# pip を使用して Django のコマンドラインツールをインストール (インストール済みの場合はスキップ)
pip install django
つぎに django-admin を使ってソースコードを自動生成します。
先程リポジトリとして初期化したディレクトリ内部で作業を行います。
# app という名前のアプリケーションをカレントディレクトリ配下に作成する
django-admin startproject app .
このあとサーバーにアップロードしたときに正常に動作するよう、作成したディレクトリ内部の app/settings.py
の設定の内、ALLOWED_HOSTS
を下記のように変更します。
サンプルではすべてのドメインを許可していますが、アプリケーションに対して使用するドメインがわかっている場合は、セキュリティのため個別にドメインを指定することをおすすめします。
ALLOWED_HOSTS = ['*']
最後に pipenv
を使用してサーバー上で必要になるパッケージを設定します
# gunicorn, django をインストールする
pipenv install gunicorn django
# 依存関係 を requirements.txt に記録する
pipenv lock -r > requirements.txt
正常に完了した場合は Pipfile および Pipfile.lock が生成されます。
最後に変更をリポジトリに記録します。
# 変更のあったファイルをすべて登録する
git add .
# 登録された変更を確認する
git status
# コミット
git commit -m "ここにコミットメッセージを記載します (例: ファーストコミット)"
5. Git によるデプロイの準備
ココはマネージドクラウドのSSHを利用した作業となります。
Pythonプロジェクトで リポジトリの push を行った際に依存するパッケージの取得を自動化する処理を設定します。SSHの接続情報はプロジェクトの詳細ページ を表示し、「SSH / SFTP」の項目を参照ください。
SSHログインができましたら下記の内容を含むファイルを /var/app/user_command.sh
として配置します。
#!/bin/sh
pip install --user -r requirements.txt
6. アプリケーションをデプロイ
再びお手元のPCでの作業となります。3で作成したディレクトリに移動してください。
アプリケーションの公開(デプロイ)を行うためには、マネージドクラウドに対してリポジトリを push する必要があります。 プロジェクトの詳細ページ を表示し、「SSH / SFTP」>「リポジトリ」に記載されている下記のようなコマンドをコピーして実行します。
git remote add lolipop ssh://<ユーザー名>@<ホスト名>:<ポート>/
次のコマンドを実行して、 Python コンテナへデプロイします。
git push lolipop master
コンソール中に下記のような表示があればデプロイは正常に終了しています。
remote: Run python build process...
... (中略)...
remote: Syncing...
remote: Deploy :ok:
remote: Build success! Thanks for using Lolipop! Managed Cloud.
remote: Restarting app...
この時点ではまだアプリケーションは起動しないため、次の処理で起動コマンドの設定を行います。
7. 起動コマンドの変更
Python プロジェクトでは必要に応じて起動時のコマンドを設定できます。 仕様として、アプリケーションは 0.0.0.0:8080
を Listen する必要があります。
今回のサンプルにおいては Django の前段のWebサーバーアプリケーションとして gunicorn を使用します。 作成したプロジェクトのプロジェクト詳細画面において、起動コマンドを下記のように設定してください。
/var/app/shared/bin/gunicorn --bind=0.0.0.0:8080 --chdir=/var/app/current app.wsgi:application
入力を終えましたら、「変更を適用」ボタンを押します。
コンテナ再起動の確認のダイアログが表示されますので、注意事項をご確認いただき、「実行」を押してください。
8. 表示確認
プロジェクトのURLへアクセスを行い実際に表示ができるかご確認ください。 すべて正常に完了しておりましたら下記のような表示になります。
以降は、ソースコードの変更を行いましたら、リポジトリの commit と push を行うことで、 自動でコンテナが再起動し、アプリケーションの更新が反映されていきます。