2019/06/24SHAREツイートシェアはてブGoogle+PocketLINEこんばんはエンジニアの眠れない夜です。ディープラーニング用のAPIを作成してFlaskで作成した時に「簡単にウェブに公開できたらいいのになー」と思うのですが、なかなかシックリ来るものがなかったので作りました。使い方まずは動作確認をします。作成済みのイメージを起動します。Flask!」と表示されればOKです。この状態でFlaskがuWSGIとNginxを経由して動いていることが確認できました。Flaskを自分のプログラムに書き換えるまずはこちらからcloneします。git@gitlab.com:sleepless-se/flask-uwsgi-nginx.gitapi.pyというファイルがflask-uwsgi-nginxに入っていることが確認できます。これがFlaskの本体です。あとはこのapi.pyを自分好みに書き換えるだけです。無かったのか、見つけられなかったのか、なんなのか...)オリジナルのFlaskをウェブに公開!ここはDockerの使い方なので普通です。flask-uwsgi-nginxでbuildしてイメージを作成します。自分のものに置き換えてください。DockerHubの使い方はこちらの記事が参考になります。作成したイメージをDockerHubにpushします。HUB_USER/REPO_NAME:TAGいよいよサーバーに公開です。DockerHubにログインします。HUB_USER/REPO_NAME:TAGちゃんと公開できているかを確認します。自分のFlaskの内容が確認できれば公開成功です!flask-uwsgi-nginxの詳細設定flask-uwsgi-nginxは最小構成なので自分のFlaskアプリケーションを組み込むには上の説明だけじゃわからないぞ...(-_-;)という方向けにもう少し詳しい設定方法を紹介していきます。モジュール、アプリケーションをインストール一番気になるのはモジュールやアプリケーションのインストールですよね。flask-uwsgi-nginx/Dockerfileを開いてみてください。アプリケーションをインストールしたい場合は4行目に続けてインストールしたいアプリケーションを追加します。正しいDockerfileの書き方的に続けて書くのは少し邪道ですが、後ろに続けて書いたほうがミスしづらいと思います。pipでモジュールをインストールしたい場合も同じです。5行目に続けて欲しいモジュールを追加するだけです。supervisorえ?requirements.txtは使えないのかって?8行目に下記のコードを追加して、flask-uwsgi-nginx/requirements.txtを作成してください。/app/requirements.txtあとは使いたいモジュールをrequirements.txtに書くだけです。foundと怒られます。Flaskアプリのファイル名を変更したい場合デフォルトではapi.pyがuWSGIで起動するようになっています。ファイル名を変更してしまうとうまくアプリが動かなくなる...という方は起動するFlaskアプリのファイル名を変更できます。編集する場所はたった一箇所で、flask-uwsgi-nginx/uwsgi.iniの2行目のwsgi-file=/app/api.pyを自分のFlaskファイルのパスを書き換えるだけです。flask-uwsgi-nginxの中身がコンテナの中のappに全部コピーされます。my_flask.pyというファイルを起動したい場合はflask-uwsgi-nginxにmy_flask.pyを保存して、こんな感じに書き換えるだけです。wsgi-file=/app/my_flask.py後はbuildしなおせばmy_flask.pyが起動します。ファイルをflask-uwsgi-nginxに保存して、uwsgi.iniを編集するだけなのでとても簡単です。Flaskアプリの公開ポートを変更デフォルトではポート80番を使っているので他のポートに変更したい!そういうこともありますよね。ホストのポート:コンテナのポートのホストのポートを変更するだけです。registry.gitlab.com/sleepless-se/flask-uwsgi-nginxポート5000番で起動するならこう書き換えるだけです。Flask!」と表示されればOKです。ローカル環境で起動した想定です。サーバーの場合はlocalhostをサーバーのIPアドレスに置き換えてください。Pythonのバージョンを変えたり、機械学習用に使う場合デフォルトではubuntu:19.04を利用しています。python:3.7.3に変更します。これでビルドし直すだけでpython:3.7.3をデフォルトで利用できるようになります。tensorflow/tensorflowをベースにイメージにします。tensorflow/tensorflowのタグはいろいろあるのでお好みで選んでください。tensorflow/tensorflowをベースイメージにすると機械学習に使いそうなモジュールがいろいろインストールされているので便利です。後はPythonと機械学習のライブラリとの互換性の心配も少なくて済みます。latest-py3-jupyterにはこれらのモジュールがインストールされています。́∀`)Kerasはデフォルトだとこれだけなので、pipで追加してください。Keras-Applications==1.0.7Keras-Preprocessing==1.0.9GPU環境を使ってtensorflow/tensorflow:latest-gpu-py3から動かす方法はまだよく分かっていないので理解できたらまた書きます。GPUEaterというサービスがあって、ここならGPU搭載マシンを月7500円〜動かせるのでディープラーニングのAPI公開に使いたいところです。GPU搭載の格安レンタルサーバーを発見!ディスク容量、IOPS、ネットワーク料金コミコミでAWSより最大80%も安く、一番安いマシンは月約7500円で利用できる!ディープラーニングを使った開発やサービス提供の敷居がグッと下がるはず。2019最後に後半少し話しがそれてしまった気もしますが、こんな感じでとっても簡単にFlaskをインターネットに公開することができるようになりました。これでこの先、一生、Flaskの公開で悩まなくて済みそうです。できるってDockerって凄いですよね。この記事を読んでくれている方のお役に立てれば幸いです。最後まで読んでいただきありがとうございました。タイムゾーン選択回避方法(ubuntu)DockerでDjangoのカスタムコマンドを実行すると複数回実行された話。現在は『アイデアをカタチにする』ことが仕事です。コメントデータの処理方法の詳細はこちらをご覧ください。独立(7年目)現在は『アイデアをカタチにする』ことが仕事です。Storeをインストールする方法[Python]MeCabで誰でも簡単に分かち書きをする方法おすすめ便利ツール2行でできる物体検出(YOLOv3)物体検出APIが使えるようになります。初心者でも物体検出の独自モデルを作成できます。flask-uwsgi-nginxで簡単API作成Flaskを使ったAPIを簡単に作成できます。Docker-Django-HTTPSDjangoを無料でHTTPS化でデプロイできます。Nginx,uWSGIも設定済み。Docker-Selenium-GridDockerを使ってSeleniumをすぐに使い始められます。Selenium-with-DjangoSeleniumでスクレイピングした内容をDjangoと簡単に連携させられます。APIGmailAPIをすぐに使い始められます。サイト内検索サイト内の記事に含まれるキーワードで柔軟な検索ができます。