AppServiceにPython(Bottle)アプリを手動デプロイする
Azure App ServiceにはGitからデプロイすると必要なモジュールも入ってくれてるのですが、諸事情でGit経由でのデプロイが行えないので手動デプロイを行いました
若干ハマったので忘れないようにメモを残しておきたいと思います
手動デプロイに関しては公式情報も少なく試行錯誤した結果の手順ですのでもっと簡単な方法があるかもしれませんのであしからず。。。
App Serviceの用意
まずはデプロイ先となるAppServiceを用意します
Azureの指示に従っていけば簡単に作れるので細かい説明は端折ります
- Azureダッシュボード:メニューの
App Service
をクリック 追加
をクリックWeb App
をクリック(今回はSQLは使わないので)作成
をクリック- アプリ名等々を入力して
作成
をクリック
デプロイするアプリ
App Serviceでアプリを動かすにはweb.config
が必要になるので今回はこちらのソースをベースにデプロイを行います(またBottle^^;)
github.com
ただ、残念ながらこのソースのままでは静的ファイルの読み込みが行えないのでcloneしたファイルのapp.py
を修正します
""" This script runs the application using a development server. """ import bottle import os import sys # routes contains the HTTP handlers for our server and must be imported. import routes if '--debug' in sys.argv[1:] or 'SERVER_DEBUG' in os.environ: # Debug mode will enable more verbose output in the console window. # It must be set at the beginning of the script. bottle.debug(True) def wsgi_app(): """Returns the application to make available through wfastcgi. This is used when the site is published to Microsoft Azure.""" return bottle.default_app() @bottle.route('/static/<filepath:path>') def server_static(filepath): """Handler for static files, used with the development server. When running under a production server such as IIS or Apache, the server should be configured to serve the static files.""" return bottle.static_file(filepath, root=STATIC_ROOT) if __name__ == '__main__': PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static').replace('\\', '/') HOST = os.environ.get('SERVER_HOST', 'localhost') try: PORT = int(os.environ.get('SERVER_PORT', '5555')) except ValueError: PORT = 5555 # Starts a local test server. bottle.run(server='wsgiref', host=HOST, port=PORT)
server_static
メソッドを移動しただけです
今回はPython3.4を使うのでweb.3.4.config
をweb.config
にrenameします
ソース一式をAppServiceのrootwww
配下にFTP転送しましょう
Python仮想環境の準備
Pythoneerには当たり前なんでしょうがグローバル環境を汚さないようにするため、仮想環境を作りそこに必要なモジュールをインストールします
(AppServiceのグローバルに入れようとするとPermission denied
がでます)
作ったAppServiceのメニューからコンソール
を開き、コマンドを実行します
$ python -m venv env $ cd env/Scripts $ python -m pip install -r requirements.txt
これで仮想環境を作り、そこに必要なモジュールがインストールされました
以上で、手動デプロイは完了です
AppServiceにアクセスするとアプリが動きます