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

おわり。