【ConoHa VPS】Flask + NginxでWebアプリを公開する方法

ConoHa VPS + Flask + NginxでWebアプリを公開する方法について入門者向けにまとめました。

【Flask】画像分類するWebアプリの作成

● PythonとFlask をインストールします。

sudo yum install python36
pip install Flask

●Flaskのテストアプリを作成します。

/var/www/test_app/app.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def main():
  return "TEST APP"

if __name__ == "__main__":
  app.run(host="0.0.0.0" ,port=5000)

● 以下のコマンドを実行し、「TEST APP」と返ってきたらテスト成功です。

python run.py
curl localhost:5000

● 以下のファイルを作成します。

/etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

● 以下コマンドでnginxをインストールします。

sudo yum install nginx

● 以下ファイルを作成します。test_appを公開するための設定を行います。
/var/www/test_app/にtest_app_nginx.confとしてファイルを作成して、次のように記述します。

server {
  listen      80;
  server_name XXX.XXX.XXX.XXX);
  charset     utf-8;
  client_max_body_size 75M;

  location / { try_files $uri @test_app; }
  location @test_app {
    include uwsgi_params;
    uwsgi_pass unix:/var/www/test_app/test_app_uwsgi.sock;
  }
}

※「XXX.XXX.XXX.XXX」にはVPSサーバーのIPアドレスを挿入します。

● 以下のコマンドを実行します。

sudo ln -s /var/www/test_app/test_app_nginx.conf /etc/nginx/conf.d/

● 以下のコマンドを実行します(Nginxを起動)。

sudo systemctl start nginx

ブラウザでhttp://(サーバーのipアドレス)/にアクセスすると502 Bat Gatewayと表示されると思います。
(uwsgiがまだ準備できていないため)

● 以下のコマンドを実行します(uwsgiのインストール)。

pip install uwsgi

● 以下のファイルを作成します。

/var/www/test_app/test_app_uwsgi.ini

[uwsgi]
base = /var/www/test_app
app = run
module = %(app)
pythonpath = %(base)
socket = /var/www/test_app/%n.sock
chmod-socket    = 666
callable = app
logto = /var/log/uwsgi/%n.log

● 以下コマンドを実行し、「/etc/uwsgi/vassals/」に「test_app_uwsgi.ini」を配置します。

sudo ln -s /var/www/test_app/test_app_uwsgi.ini /etc/uwsgi/vassals

● 以下コマンドを実行し、VPSサーバーの起動時から実行させるよう設定します。

/etc/systemd/system/uwsgi.service

[Unit]
Description=uWSGI
After=syslog.target
[Service]
ExecStart=/opt/venv/bin/uwsgi --master --emperor /etc/uwsgi/vassals --die-on-term --uid username --gid username --logto /var/log/uwsgi/emperor.log
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target

● 以下のコマンドでWebアプリを起動します。

sudo systemctl daemon-reload
sudo systemctl start uwsgi

● ブラウザでhttp://(サーバーのipアドレス)にアクセスし、「TEST APP」と表示されれば成功です。

Job for uwsgi.service failed because the control process exited with error code. See "systemctl status uwsgi.service" and "journalctl -xe" for details.
【TensorFlow版Keras入門】ディープラーニングを簡単に学ぶ方法
Pythonモジュール「TensorFlow/Keras」で深層学習(ディープラーニング)を行う方法について入門者向けに使い方を解説します。
【Flask超入門】簡単かつ効率的にWebアプリを作ろう
PythonモジュールFlaskの使い方、Webアプリケーションを作る方法について入門者向けにまとめました。

コメント