はじめに
ある程度Slackbotの機能を追加できたのですが、いちいちコマンドプロンプトで
python run.py
をたたくのがめんどくさくなりました。
そこで常駐化に挑戦。すでに多くの方が実戦れているHerokuを使って常駐化してみました。
環境
- windows10
- python 3.6.4
Herokuとは
一言でいうとPaaSです。
サーバー,OS,データベース,プログラミング言語に必要な環境をボタン一つで構築してくれます。
同じPaaS環境を提供しているものとしてAzureのWebAppsがあったりすると思うのですが、
Azureを使ったbotの常駐化方法がわからなかったため、今回はひとまずHerokuを使ってみました。
実際にやってみた今回の流れとしては、以下のような感じでした。
PG作成 → Heroku Cliを使ってPGをherokuサーバーにPush → サーバを動かしてbotスタート
サーバーにコードをpushしただけでできてしまったという感じでした。
料金とか
以前調べた際にはFreeプランだと様々な制約がありました。
(30分サーバーにアクセスがないとフリーズする、24時間連続稼働はできない etc…)
ですが、現在はFreeプランでもそれらの問題は解消されていました。
私はクレジットカードを登録するのも嫌なのでしていないのですが、
クレジットカード登録なしだと1ヶ月で550時間、登録をすると1000時間の利用が無料で可能です。
1アプリケーションのみでしたら、24時間×31日=744時間なので、常駐化がFreeプランで可能です。
拡張機能
Herokuには拡張機能がたくさんあります。→Heroku Add-ons
この拡張機能を使って稼働するスケジュールの設定ができたりと幅広い機能を拡張することができます。
が、すべてクレジットカード情報が必要なので、私は使ってません。
おいおい使っていきたいところ。
Heroku設定
ログイン
まずはここから会員登録(Sign Up)をしてログインしましょう。
アプリケーション作成
ログインできたら、DashboardのNewボタンから新しいアプリケーションを作成します。
App nameにBotの名前を入力します。
他はデフォルトで大丈夫です。
作成すると、下のような感じでサーバーにプログラムをpushするまでのコマンドを親切に教えてくれます。
が、この説明は後ほど
続いてSettingにて環境変数と、言語の設定をします。
環境変数設定場所
サーバーにpushするので、API_TOKEN等見られたら困る個人情報は、
このように環境変数に設定しておくと便利です。
Heroku設定ファイル作成
各々のファイルの中身は以下の通りです。
Procfileには拡張子をつけない点に注意
pbot: python run.py
Herokuでデプロイ時に実行するプロセスの定義を記入します。
pbot→起動するときに呼びます(プロセス名の定義)。任意の文字でOK。
python run.py→コマンドプロンプトでbotを起動するときにいつもたたいてるやつ。
beautifulsoup4==4.6.0
certifi==2018.4.16
chardet==3.0.4
idna==2.6
Pillow==5.0.0
pyocr==0.5.1
requests==2.18.4
six==1.11.0
slackbot==0.5.1
slacker==0.9.60
urllib3==1.22
websocket-client==0.46.0
wincertstore==0.2
上記のは私の例です。Pythonの依存ライブラリの定義を書きます。
以下のコマンドを打つと自動生成。
pip freeze > requirements.txt
python-3.6.4
自信のpythonのバージョンを記入。
push
まずは、Heroku Cliをインストールします。
インストールできたら、先ほどアプリを作成した際に表示されたDeployページにかかれたコマンドを順番に打っていきます。
Heroku login
↓
自分のメールアドレスとPWを入力
↓
リポジトリの作成
$ cd my-project/
$ git init
$ heroku git:remote -a Bot名
↓
作成したPGをPush
$ git add .
$ git commit -am "make it better"
$ git push heroku master
最後は
heroku ps:scale pbot=1
これで起動します。
常駐化
普段会社にいる時間しか動かしてないので、PM10:00はこれまで稼働してませんでした。
が、夜も動いています。
やってみて
本当は普段Azure使ってるのでAzureでやりたかったのですが、断念しました。
が、Herokuでも拡張機能がたくさんあるのでこちらのPaaSも今後使いたいなと思いました。
コマンドをうつ手間がなくなって本当に楽です。