Ошибка разрешения при работе с журналами Django в продакшене

При попытке применить конфигурацию логирования к моему Django проекту на рабочем сервере, сайт возвращает ошибку шлюза 502 и sudo journalctl -u gunicorn показывает следующее Permission denied: '/home/logs/MySite.log' error. Тот же самый конфиг работает на сервере staging и работает (используя тот же debug=false, gunicorn/nginx setup, не используя никаких настроек разработки, таких как ./manage.py runserver или debug=true). Единственная разница, о которой я знаю, заключается в том, что сервер staging обслуживается через http, а не https. Может ли кто-нибудь помочь исправить ошибку с разрешениями и запустить логирование на продакшене? Заранее спасибо!

Ошибка

Конфигурация протоколирования, отладка установлена на false

DEBUG = False

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            'level': 'WARNING',
            'class': 'logging.FileHandler',
            'filename': '/home/logs/MySite.log',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'WARNING',
        },
        'mapApp': {
            'handlers': ['file'],
            'level': 'DEBUG'
        }
    },
}

Служебный файл Gunicorn:

[Unit] Description=Gunicorn daemon Requires=gunicorn.socket After=network.target

[Service] User=my_username Group=my_username WorkingDirectory=/home/MySite

ExecStart=/home/my_username/.virtualenvs/mySitePython3/bin/gunicorn --access-logfile - --workers 3 --bind unix:gunicorn.sock VicMySite.wsgi

[Install] WantedBy=multi-user.target 

Файл сокета Gunicorn

[Install] WantedBy=sockets.target

[Unit] Description=Gunicorn WSGI socket

[Socket] ListenStream=/run/gunicorn.sock

[Install] WantedBy=sockets.target

Nginx config

user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events { worker_connections 1024; }

http { log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;
keepalive_timeout   65;
types_hash_max_size 2048;

include             /etc/nginx/mime.types;
default_type        application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server { listen 80; server_name mysite.org; return 301 https://$host$request_uri; }

# Ignore requests for incorrect hosts instead of forwarding to Django
# https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/#debug

server { listen 80 default_server; return 444; }

# Settings for a TLS enabled server.
server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  mysite.org;

    ssl_certificate "/home/my_username/ssl/mysite_org_chain.crt";
    ssl_certificate_key "/home/my_username/ssl/mysite.key";

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
      root /home/MySite;
    }
location /media/ {
      root /home/MySite;
    }
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/run/gunicorn.sock;
      }
  }
}

Перезапуск сервера после внесения изменений:

. /home/my_username/.virtualenvs/mySitePython3/bin/activate
./manage.py migrate --settings=VicMySite.settings.prod
./manage.py collectstatic --settings=VicMySite.settings.prod
./manage.py clearcache --settings=VicMySite.settings.prod
sudo systemctl restart gunicorn

То, что я пробовал до сих пор:

  • подтверждение того, что gunicorn запущен от имени пользователя my_username (1. он есть в файле сокета, 2. когда я разрешил Django создать файл журнала, владелец и группа - оба my_username, 3. ps aux | grep gunicorn показывает процесс, запущенный от имени my_username)

    >
  • подтверждение того, что каталог 'logs' и файл 'MySite.log' имеют пользователя my_username как владельца, так и группу. установил для обоих chmod 777 временно, чтобы посмотреть, помогло ли это с ошибкой разрешений (не помогло)

    .
  • временно отключил selinux с помощью sudo setenforce 0

    .
Вернуться на верх