Код на салфетке
06.06
Переменные окружения позволят прописать значения, такие, как логин и пароль базы данных, секретный ключ или данные от почтового сервера, в специальном файле .env (dotenv). Таким образом можно собрать все важные данные в одном файле без необходимости прописывать их непосредственно в коде (хардкодить).
Для того чтобы всё продолжало работать локально, установим библиотеку python-dotenv, выполнив команду:
``` pip install python-dotenv
```
Не забудьте добавить установленную библиотеку в файл requirements.txt!
В корне проекта создадим файл .env и откроем файл settings.py в директории проекта.
В самом начале файла settings.py после импортов добавим вызов функции load_dotenv(). Это необходимо, чтобы данные из .env-файла подтягивались при локальном запуске. На сервере это не нужно.
``` from dotenv import load_dotenv
load_dotenv()
```
Для получения данных из переменных окружения мы воспользуемся методом .get('ключ') из функции environ() в пакете os – os.environ.get('ключ'), где ключ – это переменная в .env-файле.
Нам необходимо заменить значения следующих переменных на указанную выше строку, сделав ключом имя переменной, а её текущее содержимое прописать в .env-файле:
- SECRET_KEY.
- NAME.
- USER.
- PASSWORD.
- HOST.
- PORT.
- EMAIL_HOST.
- EMAIL_HOST_USER.
- EMAIL_HOST_PASSWORD.
Пример замены в settings.py:
``` SECRET_KEY = os.environ.get('SECRET_KEY')
DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": os.environ.get('DB_NAME'), "USER": os.environ.get('DB_USER'), "PASSWORD": os.environ.get('DB_PASSWORD'), "HOST": os.environ.get('DB_HOST'), "PORT": int(os.environ.get('DB_PORT')), } }
```
Обратите внимание на параметр PORT. Он приведён к типу int, поскольку по умолчанию все данные из переменных окружения – строки.
Пример .env-файла:
``` SECRET_KEY=abcde... DB_NAME=db_name DB_USER=db_user DB_PASSWORD=db_password DB_HOST=postgres DB_PORT=5432
```
Обратите внимание на формат имя_переменной=значение_переменной, без кавычек.
Кроме того, необходимо изменить параметр ALLOWED_HOSTS, прописав в него IP-адрес VPS, локальный адрес (127.0.0.1) и адрес домена, если он подключен к VPS. Должно быть примерно так:
``` ALLOWED_HOSTS = ["127.0.0.1", "pressanybutton.ru", "0.0.0.0"]
#Вместо 0.0.0.0 пропишите IP-адрес вашего VPS.```
После того, как вынесли все важные данные из settings.py в .env, можете проверить, что всё работает как прежде, запустив проект локально.
Dockerfile. Следующим шагом будет создание Dockerfile. Это специальный файл с набором инструкции по сборке Docker-образа.
Создайте файл Dockerfile без расширения со следующим содержимым:
``` FROM python:3.11.4-buster
ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1
WORKDIR /code
RUN pip install --upgrade pip COPY requirements.txt /code/ RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
```
Разберём по порядку:
- FROM python:3.11.4-buster - В этой строке указываем на используемый при сборке базовый образ. В нашем случае это Python 3.11.4. Можно взять любую версию, включая 3.12, однако учитывайте совместимости библиотек! В нашем проекте используется Django 4.2.2, поэтому и используется Python 3.11.
еще контент в этом сообществе
еще контент в этом соообществе
Код на салфетке
06.06
войдите, чтобы увидеть
и подписаться на интересных профи