Configurando o Django + nginx + uwsgi + supervisord: Diferença entre sockets em / run vs / tmp

1

Estou tentando configurar dois aplicativos da web do Django na mesma máquina usando o emperor e nginx do uWSGI e ter o supervisord para gerenciar o início e o reinício do processo do emperor. Eu finalmente depois de muita pesquisa na internet consegui obter uma implantação de trabalho. No entanto, durante todo o puxão de cabelo, eu encontrei algo estranho e gostaria que alguém me explicasse por que isso está acontecendo.

Então eu executo meu processo uWSGI no modo imperador como root. Os arquivos vassal ini config tomam o privilégio de remover os privilégios do meu uid e criar um arquivo de soquete pertencente ao meu usuário com o grupo www-data (para que nginx possa gravar nele) e permissões 660. Aqui está um exemplo de configuração vassal: / p>

[uwsgi]
uid = xxxx

chdir = %(project_dir)/%(project)
home = %(venv_base)/%(venv)
module = %(project).wsgi:application

master = true
processes = 4

socket = /tmp/%(project).sock
chown-socket = %(uid):www-data
chmod-socket = 660
stats = /tmp/%(project)_stat.sock
logto = %(project_dir)/logs/uwsgi.log
# Cleans up when the process is killed (includes deleting the socket file)
vacuum = true

Isso funciona muito bem, mas se eu tentar criar o soquete em / run em vez de / tmp, eu começo a obter permissão de erros negados para a chamada do socket bind (). O soquete é criado muito bem com a posse e as permissões apropriadas, mas o vassalo é incapaz de chamar bind () ou unlink () nele. Por que isso acontece? Qual é a diferença entre / tmp e / run e quando devo usá-los? Qualquer ajuda ou ponteiros serão apreciados.

EDIT : Eu tentei configurar as permissões do socket para 777 e o uwsgi ainda me dá uma permissão negada error: (

    
por krypto07 07.12.2016 / 15:41

1 resposta

0

Eu não tenho reputação suficiente no serverfault para comentar, então eu tenho que dar uma "resposta":

A chamada bind () liga o socket a um nó no sistema de arquivos, então provavelmente seu usuário não tem permissões de escrita em / run !? No meu sistema / tmp tem og+w enquanto / run tem og-w . Tente criar o soquete em uma subpasta de / run que tenha permissões de gravação.

O que você quer dizer com "o soquete foi criado muito bem"? Você pode se conectar a ele com outro processo? Parece que a tomada está lá. Mas, de acordo com o que escrevi acima, não espero que apareça no sistema de arquivos.

    
por 07.12.2016 / 18:53