ConoHa VPS(CentOS7)+Flask+Nginx+uWSGIでWEBアプリを作ってみる(2)


ConoHa VPS(CentOS7)+Flask+Nginx+uWSGIでWEBアプリを作ってみる(1)
の続き。

Nginx+uWSGIを使って本番環境で動かしてみます。
以下を参考にしました。

1. ドメイン取得

とりあえずドメインを取得します。

お名前.comとかGoogle Domainsからドメインは取れます。
無料だったらFreenomというサービスがあるようです。

参考
- freenomでドメインの取得
- 無料のドメインを取得する
- freenom で取得した無料ドメインを ConoHa の VPS に登録する

2. uWSGIとは

まず,WSGI(Web Server Gateway Interface; ウィズギーと読むらしい)とは,Pythonで実装されたWebアプリケーションとWebサーバ間のインターフェースを規定した仕様(PEP333)です。uWSGIは,既存のWebサーバ(Nginxなど)にWSGI仕様を付加し,WSGIに対応したWebサーバを作成します。つまり,

[WSGIに対応したWebサーバ] = Nginx + uWSGI

といった関係になっている(と思われます)。

3. uWSGIの設定

uWSGIの設定ファイルを作成します。設定ファイル名は何でもよいですがuwsgi.iniとしておきます。
なお,デーモン化するためにdaemonizeを指定しています。

uwsgi.ini
[uwsgi]
module = app
socket = /home/{ユーザ名}/app/uwsgi.sock
chmod-socket = 666
callable = app
uid = {ユーザ名}
gid = {ユーザ名}
daemonize = /home/{ユーザ名}/uwsgi/uwsgi.log
pidfile = /home/{ユーザ名}/uwsgi/app.pid

socket, daemonize, pidfileのパスはpermissionが問題なければどこでも良いと思います。

4. Nginxの設定

Nginxの設定ファイルは/etc/nginx/conf.d/に拡張子confで置けば勝手に読み込まれるので,名前をapp.confとして次のように作成します。

app.conf
server {
    listen 80;
    server_name {取得したドメイン};
    charset utf-8;
    client_max_body_size 75M;

    location / { try_files $uri @myapp; }
    location @myapp {
            include uwsgi_params;
            uwsgi_pass unix:///home/{ユーザ名}/app/uwsgi.sock;
    }
}

これで,Nginxを再起動すればいけるはずですが,permissionエラーになってしまいました。どうやら,Nginxがユーザnginxで実行されていることが原因のようだったので,以下のように5行目をコメントアウトして{ユーザ名}で実行するように設定を変更しました。

/etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

#user nginx;
user {ユーザ名};
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

参考
Unicorn x Nginx x AWS で、*11 connect() to unix:/home/ec2-user/app/current/tmp/sockets/unicorn.sock failed (13: Permission denied) while connecting to upstream のエラーの回避方法

5. サーバの起動

ここまでくれば,以下の手順でサーバを起動できるはずです。

$ cd /home/{ユーザ名}/app
$ systemctl restart nginx
$ source env/bin/activate
(env) $ uwsgi --ini uwsgi.ini

http://{取得したドメイン}にアクセスできれば成功です。
停止する場合は以下のようにします。

$ cd /home/{ユーザ名}/app
$ source env/bin/activate 
(env) $ uwsgi --stop /home/{ユーザ名}/uwsgi/app.pid
(env) $ deactivate
$ systemctl stop nginx

おわり。