wide and deep

作成したDashアプリをコアサーバーにデプロイした

今回したこと

作成した日本の降水量を可視化するpython製アプリをレンタルサーバ上にデプロイした.
前回の記事では作成したアプリをHerokuにデプロイしたことを書いた.
catdance124.hatenablog.jp

Herokuはローカルにファイルを保存できないこともあって動作に無理やり感があったので,サーバを借りてそこにアプリをデプロイしようと考えた.
そのURLはこちら
http://catdance124.m24.coreserver.jp/dash/weather-app/
ソースはこちら
github.com

レンタルサーバ選び

pythonが動いて安ければどこでも良いかなと思ったのでコアサーバを借りた.
特にスペックを求めなかったのでCORE-MINIを選択した.
12ヶ月契約なら 月200円程度なので良心的.
www.coreserver.jp

レンタルサーバは初めてなので普通のことかもしれないが,

  • cronが最短1時間間隔(個数制限あり)
  • 実行時間が長いプロセスはkillされる

あたりが使って気になった点
定期的にデータをダウンロードしようと思っていたのでcronをあてにしていたが,
うまいこと使えなさそうだったためアプリ側で定期ダウンロードするように対処した.

環境構築

前回はHrokuに挙げたので特有の書き方をしていたが,レンタルサーバレンタルサーバで特有の書き方があるらしい.
まずは環境構築から
python3.7を入れるのはここを参考にした
qiita.com

普通にpythonファイルをあげるだけではアクセスできないらしく,CGIとして動かす設定をしないといけないようだ.
ここを参考に
kumahiyo.com
blowup-bbs.com

下記のように設定し,Dashアプリを動かすようにした.
下記ファイルはアプリのディレクトリにまとめて配置.
コアサーバーは~/public_htmlが公開範囲なのでその配下にアプリは設置する.

AddHandler cgi-script .py

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.py/$1 [QSA,L]
  • index.py

shebangはwhich pythonなどで適切に設定する.

#!/virtual/catdance124/.pyenv/shims/python
# coding: utf-8

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from app import server
CGIHandler().run(server)
  • app.py

メインのDashソースコード.サーバを構築するためにflaskオブジェクトを生成する.server = app.serverapp.config.updateが大切

import dash
import dash_core_components as dcc
import dash_html_components as html
import ~~~~~~~~~~~~~~~~~~

app = dash.Dash(__name__)  #dash obj
server = app.server  #flask obj
app.config.update({
    'routes_pathname_prefix': '',
    'requests_pathname_prefix': ''
})

app.layout = serve_layout(hogehoge)

if __name__=='__main__':
    app.run_server(debug=False)

index.pyの権限を705に編集する
.htaccessとindex.pyはこれ以上編集する必要はない.
この後app.pyをローカルで開発していく.
app.pyは単体で起動できる.

 python app.py

ローカルで開発・動作確認した後,サーバへ送り,動作確認をする.
アプリで使うファイルについては適切に権限を設定し,URL指定アクセスで覗き見られないようにすること.

chmod 600 token.conf

終に

今回はレンタルサーバーを借りてアプリをデプロイした.
レンタルサーバー特有の設定に戸惑ったが,ネット上に情報が豊富にあるので対処することができた.
次回はソース内の工夫点をまとめることにする.