Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

おわり。

shikao_yuzu
土木工学(学部)→気象・気候学(修士)→土木系CAEエンジニア(2013.4〜2020.2)→気象系SE(2020.4~).日立(茨城)→東京→札幌→横浜→川崎→大阪.気象予報士(第51回).鹿島アントラーズサポーター.
http://shikao-yuzu.tk
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away