【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 になる。

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク