ConoHa VPS(CentOS7)+Flask+Nginx+uWSGIでWEBアプリを作ってみる(1)
の続き。
Nginx+uWSGIを使って本番環境で動かしてみます。
以下を参考にしました。
- Flask + uWSGI + Nginx でハローワールドするまで @ さくらのVPS (CentOS 6.6)
- Flask+Nginx+uWSGI+CentOS7でアプリケーションを作る際にやったこと+日記::12/9
- 便利で超強力なWSGIサーバー uWSGI を使ってみよう
1. ドメイン取得
とりあえずドメインを取得します。
お名前.comとかGoogle Domainsからドメインは取れます。
無料だったらFreenomというサービスがあるようです。
参考
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]
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として次のように作成します。
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行目をコメントアウトして{ユーザ名}で実行するように設定を変更しました。
# 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;
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
おわり。