Подробнее
Языки программирования, библиотеки и модули:
Фреймворк, расширения и библиотеки:
Базы данных и инструменты работы с БД:
CI/CD:
Удобно использовать принцип copy-paste - копировать команды из GitHub Readme и вставлять в командную строку Git Bash или IDE (например VSCode).
Предварительные условия
Предполагается, что пользователь:
- создал аккаунт DockerHub, если запуск будет производиться на удаленном сервере.
- установил Docker и Docker Compose на локальной машине или на удаленном сервере, где проект будет запускаться в контейнерах. Проверить наличие можно выполнив команды:
docker --version && docker-compose --version
Локальный запуск
!!! Для пользователей Windows обязательно выполнить команду:
git config --global core.autocrlf false
иначе файл start.sh при клонировании будет бракован.
- Клонируйте репозиторий с GitHub и введите данные для переменных окружения (значения даны для примера, но их можно оставить):
git clone https://github.com/alexpro2022/Django-tree_menu.git && \
cd Django-tree_menu && \
cp env_example .env && \
nano .env
Локальный запуск: Django/SQLite3
-
Создайте и активируйте виртуальное окружение:
- Если у вас Linux/macOS
python -m venv venv && source venv/bin/activate
- Если у вас Windows
python -m venv venv && source venv/Scripts/activate
-
Установите в виртуальное окружение все необходимые зависимости из файла requirements.txt:
python -m pip install --upgrade pip && pip install -r requirements.txt
- Выполните миграции, загрузку данных, создание суперюзера и запустите приложение:
python tree_menu/manage.py makemigrations && \
python tree_menu/manage.py migrate && \
python tree_menu/manage.py load_data && \
python tree_menu/manage.py create_superuser && \
python tree_menu/manage.py runserver
Сервер запустится локально по адресу http://127.0.0.1:8000/
- Остановить приложение можно комбинацией клавиш Ctl-C.
Локальный запуск: Docker Compose/PostgreSQL
- Из корневой директории проекта выполните команду:
docker compose -f infra/local/docker-compose.yml up -d --build
Проект будет развернут в трех docker-контейнерах (db, web, nginx) по адресу http://localhost
.
- Остановить docker и удалить контейнеры можно командой из корневой директории проекта:
docker compose -f infra/local/docker-compose.yml down
Если также необходимо удалить тома базы данных, статики и медиа:
docker compose -f infra/local/docker-compose.yml down -v
Запуск на удаленном сервере
-
Сделайте форк в свой репозиторий.
-
Создайте
Actions.Secrets
согласно списку ниже (значения указаны для примера) + переменные окружения из env_example файла:
PROJECT_NAME
SECRET_KEY
POSTGRES_PASSWORD
DATABASE_URL
CODECOV_TOKEN
DOCKERHUB_USERNAME
DOCKERHUB_PASSWORD
# Данные удаленного сервера и ssh-подключения:
HOST # публичный IP-адрес вашего удаленного сервера
USERNAME
SSH_KEY
PASSPHRASE
# Учетные данные Телеграм-бота для получения сообщения о успешном завершении workflow:
TELEGRAM_USER_ID
TELEGRAM_BOT_TOKEN
- Запустите вручную
workflow
, чтобы автоматически развернуть проект в трех docker-контейнерах (db, web, nginx) на удаленном сервере.
При первом запуске будут автоматически произведены следующие действия:
- выполнены миграции БД
- БД заполнена начальными данными
- собрана статика
- создан суперюзер (пользователь с правами админа) с учетными данными:
- для Django: username = 'adm', password = 'adm' - значения можно изменить в
tree_menu\app\management\commands\create_superuser.py
- для Docker Compose - из переменных окружения
ADMIN_USERNAME
,ADMIN_EMAIL
,ADMIN_PASSWORD
- для Django: username = 'adm', password = 'adm' - значения можно изменить в
Меню представлены по адресу (в зависимости от способа запуска):
- http://127.0.0.1:8000/menu/
- http://localhost/menu/
http://<IP-адрес удаленного сервера>/menu/
Вход в админ-зону осуществляется по адресу (в зависимости от способа запуска):
- http://127.0.0.1:8000/admin/
- http://localhost/admin/
http://<IP-адрес удаленного сервера>/admin/
На странице http://<hostname>/menu/
представлены четыре тестовых меню, при клике на название которых происходит переход на страницу данного меню. Возврат в главное меню происходит при клике В главное меню
.
Принцип работы приложения основан на выборке из БД всех пунктов меню, которые имеют в поле menu
название выбранного меню. Название выбранного меню извлекается из url. Далее происходит отображение этого меню. При клике на пункт меню происходит рекурсивный поиск по извлеченным данным, чтобы построить список пунктов которые должны быть открыты на пути к этому пункту меню. Далее данный список передается в шаблон который выводит пункты меню, рекурсивно вызывая себя при выводе развернутых пунктов меню. Такой алгоритм позволяет обратиться к любому пункту меню указав в url только имя меню и его пункт. Например, при вводе url (в зависимости от типа локального запуска)
- http://127.0.0.1:8000/menu/first%20menu/Menu%20item/
- http://localhost/menu/first%20menu/Menu%20item/
произойдет переход на пункт меню Menu item
с отрисовкой всех уровней вложенности меню first menu
на пути к этому пункту меню.
Для удаления проекта выполните следующие действия:
cd .. && rm -fr Django-tree_menu && deactivate