ご自身の開発環境で開発した Python アプリをマネージドクラウドで公開する方法です。
Python コンテナは git コマンドを利用して、アプリケーションをデプロイすることが可能です。
※ 予め作業環境に python3
及び pipenv
のインストールをお願いします。
手順
1. Python のプロジェクトを作成
プロジェクト作成ページ から Python のアプリケーションを選んで、プロジェクトを作成します。
2. SSH の公開鍵を登録
SSHの公開鍵が未登録の場合は SSH公開鍵ページ で登録します。
3. Git リポジトリの作成
まずアプリケーションの元となる、ソースコードを作成します。ソースコードは Git リポジトリという仕組みで管理する必要があります。お手元のPCで以下のコマンドを実行してください。
(※ 以下MacOS/Linux 環境のコマンドラインでの操作方法となりますので、別途GUIツールをご利用の場合は適宜読み替えをお願いします。)
# リポジトリとなるディレクトリを作成する
mkdir my-project
cd my-project
# リポジトリとして初期化
git init
以上で Gitリポジトリの作成ができました。
4. 最初のソースコードを作成
引き続きお手元のPCでの作業となります。今回は Flask を使用します。
まずはアプリケーションの起動に必要なパッケージを取得します。
# pipenv を使用して必要になるパッケージ (gunicorn, flask) を取得します
pipenv install gunicorn flask
# 依存関係 を requirements.txt に記録する
pipenv lock -r > requirements.txt
次に下記内容を含むファイルを server.py
として作成します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello World!"
if __name__ == '__main__':
app.run()
最後に変更をリポジトリに記録します。
# 変更のあったファイルをすべて登録する
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」>「リポジトリ」に記載されている下記のようなコマンドをコピーしてお手元のPCで実行します。
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 する必要があります。
今回のサンプルにおいては Flask の前段のWebサーバーアプリケーションとして gunicorn を使用します。 作成したプロジェクトのプロジェクト詳細画面において、起動コマンドを下記のように設定してください。
/var/app/shared/bin/gunicorn --bind=0.0.0.0:8080 --chdir=/var/app/current server:app
入力を終えましたら、「変更を適用」ボタンを押します。
コンテナ再起動の確認のダイアログが表示されますので、注意事項をご確認いただき、「実行」を押してください。
8. 表示確認
プロジェクトのURLへアクセスを行い実際に表示ができるかご確認ください。 すべて正常に完了しておりましたら下記のような表示になります。
以降は、ソースコードの変更を行いましたら、リポジトリの commit と push を行うことで、 自動でコンテナが再起動し、アプリケーションの更新が反映されていきます。
応用編 (静的コンテンツの配信)
JavaScript、スタイルシート、画像などの静的コンテンツを Flask を使ったWebアプリケーションから配信する場合のサンプルです。
Python製 ドキュメントジェネレータ Sphinx の生成結果をアプリケーションから配信する場合などにご参考ください。
下記のコードでは static
ディレクトリに格納されたファイルを https://<プロジェクトのURL>/docs/...
のようなURLで配信する機能が追加されます。
# import に send_from_directory を追加してください
from flask import Flask, send_from_directory
app = Flask('server')
@app.route('/')
def root():
return "Hello, World!"
# -- 追記: ここから --
@app.route('/docs/')
@app.route('/docs/<path>')
def serve(path = 'index.html'):
return send_from_directory('static', path)
# -- 追記: ここまで --
if __name__ == '__main__':
app.run()