Хранение SECRET_KEY вне файла settings.py

Хранение секретного ключа (SECRET_KEY) вне файла settings.py — это хорошая практика для обеспечения безопасности вашего проекта. Один из способов сделать это — использовать переменные окружения. Вот пошаговая инструкция, как это реализовать:

Шаги:

  1. Создание переменной окружения:Переменную окружения можно установить разными способами в зависимости от операционной системы и среды, в которой вы работаете. Например, на Linux или macOS вы можете добавить переменную в файл .bashrc или .bash_profile:

    export DJANGO_SECRET_KEY='your_secret_key_here'

    На Windows вы можете установить переменную через командную строку:

    setx DJANGO_SECRET_KEY "your_secret_key_here"
  2. Чтение переменной окружения в settings.py:После того как вы установили переменную окружения, вы можете прочитать её в вашем settings.py следующим образом:

    import os
    
    SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')

    Таким образом, ваш SECRET_KEY будет считываться из переменной окружения при запуске приложения.

  3. Проверка наличия переменной:Чтобы избежать ошибок в случае отсутствия переменной окружения, вы можете добавить проверку:

    import os
    
    try:
        SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
    except KeyError:
        raise Exception("Please set the environment variable DJANGO_SECRET_KEY")

    Это позволит убедиться, что переменная установлена до запуска приложения.

  4. Использование утилиты python-decouple (опционально):Библиотека python-decouple предоставляет удобный способ работы с переменными окружения и конфигурационными файлами. Её можно установить через pip:

    pip install python-decouple

    Затем вы можете использовать её в своем settings.py:

    from decouple import config
    
    SECRET_KEY = config('DJANGO_SECRET_KEY')

    python-decouple автоматически обработает отсутствие переменной и выдаст исключение, если она не найдена.

Пример settings.py с использованием python-decouple:

from decouple import config

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

SECRET_KEY = config('DJANGO_SECRET_KEY')

DEBUG = False

ALLOWED_HOSTS = ['yourdomain.com']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'dbuser',
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': 'localhost',
        'PORT': '',
    }
}

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
X_FRAME_OPTIONS = 'DENY'

Заключение

Хранение чувствительных данных, таких как SECRET_KEY, вне файла settings.py — это важная мера безопасности. Использование переменных окружения или библиотек, таких как python-decouple, помогает защитить вашу систему от потенциальных угроз.

Категория: Администрирование | автор: root

Опубликовано: 29-01-2025 11:09 | Обновлено: 25-02-2025 10:55