【uWSGI】socket(ソケット)がPermission Denied【CentOS7】
238, 2019-11-08
Django のプロジェクトを CentOS7 に uWSGI と Nginx を使ってデプロイしようとしたが、ソケットを参照しようとしてパーミッションエラーになった。
最初に試したのは以下のコマンド。
$ uwsgi --socket /home/vagrant/shared/myprj.sock --wsgi-file test.py
ソケットをプロジェクト内に配置し、そのプロジェクト内の test.py を指定している。
ちなみに /home/vagrant/shared というのは Vagrant 内に同期したホスト側のディレクトリ。Django のプロジェクトのルートにあたる。
上記のコマンドを実行するとブラウザに 502 Bad Gateway
が表示される。
ログには Permission Denied
というエラー。
色々試した結果、↓のようにコマンドを変更した。
uwsgi --socket /run/myprj.sock --wsgi-file test.py --chmod-socket=666
最初、ソケットを /tmp に配置したが、それだとエラーになった。CentOS7 ではこういったファイルは /run に配置するのが普通らしい。そのため↑のコマンドでは /run にソケットを配置している。もちろん Nginx の設定も同様のソケットを指定する。
# /etc/nginx/conf.d/myprj.com.conf upstream django { server unix:///run/myprj.sock; # <- ここね #server 127.0.0.1:8001; } server { listen 80 default_server; server_name myprj.com; charset utf-8; client_max_body_size 75M; location /media { alias /home/vagrant/shared/media; } location /static { alias /home/vagrant/shared/static; } location / { uwsgi_pass django; include /home/vagrant/shared/uwsgi_params; } }
上記のコマンドを実行するとエラーは出なくなった。ちなみに --chmod-socket=664
にすると再び 502 Bad Gateway
になって Permission Denied
になる。