【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
というエラー。
色々試した結果、↓のようにコマンドを変更した。
:::bash
uwsgi --socket /run/myprj.sock --wsgi-file test.py --chmod-socket=666
最初、ソケットを /tmp に配置したが、それだとエラーになった。CentOS7 ではこういったファイルは /run に配置するのが普通らしい。そのため↑のコマンドでは /run にソケットを配置している。もちろん Nginx の設定も同様のソケットを指定する。
:::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
になる。