Локальная разработка базируется на docker контейнерах. Это удобнее чем локальная установка python и Postgres, так как не засоряет операционную систему и позволяет гибко управлять зависимостями.
Приложение зависит от следующих компонентов
- Python 3.8
- Django 3.0+
- GeoDjango
- Gdal 3.0+
- Postgres 12+ (нужно Postgis расширение)
- WSGI compatible webserver, like Gunicorn (optional for dev)
NOTE: Для разработки не нужно устанавливать компоненты локально, все зависимости будут установлены в Docker контейнеры.
Docker — это оснастка, позволяющая изолировать приложение и его зависимости в контейнер и гибко управлять ими. Docker работает во всех популярных операционных системах. Воспользуйтесь официальным гайдом чтобы установить docker на своем рабочем окружении.
Если вы не настраивали git для работы с github, пройдите соотвествующий гайд. Затем склонируйте репозиторий в папку для разработки.
git clone [email protected]:dtpstat/dtp-stat.git
После установки docker, мы можем собрать контейнер приложения и связанных сервисов и развернуть их локально.
docker run hello-world
Для управления локальными сервисами приложения (БД, веб сервер и тп) мы будем использовать расширение оснастки докера Docker compose. Если вы раньше не работали с этим инструментом, пройдите короткий гайд
Конфигурация находится docker-compose.yml
docker-compose build web
Это самая долгая и хрупкая часть, если что-то пошло не так, скопируйте вывод консоли и спросите в чате. (предварительно попуглив)
docker-compose up -d
Загрузка и старт образов может занимать некоторое время. При успешной сборке всех образов, приложение станет доступно по адресу http://127.0.0.1:5000, но без залитых в DB данных приложение будет выдавать ошибку.
Note. Для docker под MacOS при первом старте может возникать ситуация,
когда web контейнер никак не видит db контейнер. Лечится через docker-compose restart
Особенности локального развертывания:
- Корень проекта смонтирован в дирикторию
/code
docker-контейнера web. Все изменения кода применяются автоматически, перезагружать или пересобирать не нужно. - Зависимости установлены в контейнере в общий скоуп образа, без venv (???нужен ли venv)
- База данных на старте пустая, миграции и заливку справочников нужно выполнить отдельно
- База данных по умолчанию не доступна с локального порта
Так как при первом развертывании база пустая, нужно залить структуру таблиц и данные. Этот шаг можно пропускать, если вы просто повторно запустили ранее развернутые контейнеры.
docker-compose exec web /bin/bash
./manage.py migrate --noinput
(это вообще нужно?)
./manage.py createcachetable
./manage.py start
./manage.py dtp
Приложение развернуто
Админка пригодится, чтобы работать со справочниками и данными приложения через визуальный интерфейс.
docker-compose exec web /bin/bash
Нужно будет указать пароль
./manage.py createsuperuser --email admin@localhost --username admin
http://localhost:5000/admin/login/ Логин и пароль из команды выше.
Окружение развернуто. См гайд по разработке.