やりたいこと
前回の記事でResponderを使って作成したAPIをherokuにアップしたい
野望としてはDockerに乗せてアップしたかったのだが、時間的な都合もあり
とりあえずはDocker無しで動くものを一旦デプロイした
公式のサンプルが当てにならなかったのでまとめておく
herokuへのデプロイ
以前、作成したコードを一部抜粋
import responder api = responder.API() @api.route("/") def first_api(req, resp): resp.text = "first success!!" if __name__ == '__main__': api.run(address="0.0.0.0")
localhostを呼び出すと「"first success!!"」が返ってくるのみ
まずはheroku にappを作成する
> heroku create
git経由でherokuにupしたいので
> git init > git remote add heroku (herokuのappのpath)
をセット
次にheroku用にファイルを変更 & ファイルを追加
#api.runのaddressに0.0.0.0を追記 if __name__ == '__main__': api.run(address="0.0.0.0")
Procfileを作成して以下を追加
web: python server.py
このままpushするとこんなようなエラーが出ることがある
error: failed to push some refs to .....
こいつはPipfile.lockが原因で発生していたようだ
Pipfile.lockを先に削除しておく
あとはいつも通り、herokuにpushする
> git add . > git commit -m "first commit" > git push heroku master
pipenvを使っているのでインストールに少し時間がかかる
無事にデプロイされたかを確認してみる
> curl https://pacific-temple-90936.herokuapp.com/
first success!!%
あ、いいですね
デプロイに関しては以上です。以下自己満足
docker-composeでのResponder環境の作成
公式ドキュメントに記述があるが
僕の手元ではこのDockerfileは上手くrunできなかった(COPYが上手くいってないっぽい)
他のDocker構成を探してこちらの方のものを参考にした
pythonをベースにpipenvをinstall
FROM python:3.6.4 RUN mkdir /api WORKDIR /api ADD Pipfile /api/ RUN pip install --upgrade pip \ && pip install pipenv \ && pipenv install ADD . /api/
次にdocker-compose.ymlを作成
pipenvを使ってpythonファイルを実行する
responder: build: . command: sh -c "pipenv install && pipenv run python server.py" ports: - "5042:5042" volumes: - .:/api
buildしてupして動作を確認してみる
> docker-compose up -build
無事にbuildが完了してサーバーが立ち上がる
Building responder Step 1/6 : FROM python:3.6.4 ---> 07d72c0beb99 Step 2/6 : RUN mkdir /api ---> Using cache ---> 7b7862fffcbf : : Successfully built __________ : : responder_1 | INFO: Uvicorn running on http://0.0.0.0:5042 (Press CTRL+C to quit)
お馴染みに試す
> curl http://0.0.0.0:5042/ first success!!
環境を用意することは出来たが...
悩みの種
こいつをherokuにデプロイするところで詰まっている
今回は仕事の関係で時間制限があったため、止む無く上記の方法を選択した
herokuの方ではH=10やらメモリーオーバーのerrorになる
原因が分からず切磋琢磨中....また進展ありましたらブログを更新します