Тренировочный проект на Django.
Сайт-блог, позволяющий публиковать и редактировать посты, добавлять комментарии к постам, подписываться на авторов и сообщества.
Для просмотра примера готового проекта, можно перейти по адресу: https://dmitrybudaev.ru
P.S. Если сайте не работает, значит сервер был отключен.
- Docker
- Django
- django-debug-toolbar
- djangorestframework
- PostgreSQL
- Pillow
- Gunicorn c Nginx
- Sentry
Полный список вы можете посмотреть в
requirements.txt
(yatube/requirements.txt)
- В проекте используется переменные в виртуальном окружении и библиотека dotenv для их загрузки. В директории
yatube
, где расположен файлsettings.py
, создайте новый файл.env
и пропишите:
GLOBAL_BUILD=False # Если вам нужен Sentry, установите True
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=<Пароль PostgreSQL>
DB_HOST=127.0.0.1 # Если загружаете на сервер, введите django (имя образа в docker-compose)
DB_PORT=5432
SC_KEY=<Любой сгенерированный пароль для Django>
SENTRY_DNS=<Ваш API ключ в Sentry> # Если нужен мониторинг проекта.
ALLOWED_HOSTS=django 127.0.0.1 0.0.0.0 <ваш.IP.хостинга> <ваше-доменное-имя>
В
ALLOWED_HOSTS
не указываете*
(разрешить запрос с любых адресов) - это большая проблема для безопасности сайта
- Пароль для
SC_KEY
можно сгенерировать и скопировать из терминала, введя команду:
openssl rand -hex 32
Прежде, чем начать, установите Docker: Как установить Docker
В корневой директории лежат два Docker файла: docker-compose.local.yml
и docker-compose.prod.yml
.
Из названия понятно, что prod - для сервера, а local - для локального разворачивания.
В директории nginx
лежит Docker файл и конфигурационные файлы для выбранного типа разворачивания.
Для prod, в nginx/prod.conf
не забудьте поменять настройки IP и домена на свои в файле!
Чтобы приступать к сборке - удалите
prod
илиlocal
в название файла. Должно получится: docker-compose.yml.
После, введите команду для сборки:
docker-compose up --build
Сборка должна пройти без проблем
Для начала нужно узнать ID контейнера django:
docker container ls
Скопируйте нужный ID. Затем введите комманду:
docker exec -it <ID_container> bash # зайдёт в терминал в самом контейнере
Следующей командой создадим суперпользователя в самом контейнере:
python manage.py createsuperuser
Перед первым запуском обязательно закомментируйте указанные блоки в
prod.conf
конфигурации Nginx
Если возникли проблемы с получением сертификата, введите команду при запущенном докере и дождитесь успешного ответа.
docker-compose run --rm --entrypoint "\
certbot certonly --webroot -w /var/www/certbot \
# укажите свой email
--email [email protected] \
# укажите свой домен
-d dmitrybudaev.ru \
-d www.dmitrybudaev.ru \
--rsa-key-size 2048 \
--agree-tos \
--force-renewal" certbot
После получения успешного ответа, можно раскомментировать блоки listen 443 ssl;
в prod.conf
конфигурации Nginx.
-
Скопируйте файлы проекта в нужную директорию
-
Активируйте виртуальное окружение venv в нужной директории
python -m venv venv
- Установите все необходимые зависимости проекта
python -m pip install -r requirements.txt
Для запуска проекта потребуется настроенный PostgreSQL!
sudo -u postgres psql
CREATE DATABASE yatube;
CREATE USER yatube_user WITH ENCRYPTED PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE yatube TO yatube_user;
- Приложение подготовлено к работе с сервисом мониторинга ошибок
Sentry
, если не планируете его использовать - закомментируйте следующий фрагмент кода в yatube/settings.py:
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn=os.getenv('SENTRY_DNS'),
integrations=[
DjangoIntegration(),
],
traces_sample_rate=1.0,
send_default_pii=True
)
- Запускаем миграции для настройки полей в базе данных
python manage.py migrate
- Для входа в админку (http://127.0.0.1:8000/admin), необходимо создать суперпользователя:
python manage.py createsuperuser
Не забудьте поменять IP сервера на свой в настройках
settings.py
ALLOWED_HOSTS = [
'ваш домен',
'ваш IP хостинга',
...
]
- Для верности, можно перегрузить настроенный
nginx
иgunicorn
:
sudo systemctl reload nginx
sudo systemctl restart gunicorn
Всё! Проект должен быть готов к запуску.