# Установка Основной способ запуска — Docker Compose. Виртуальное окружение поддерживается через `soniks.sh` и нужно в основном для линтеров и тестов. ## Требования * Docker и Docker Compose v2 (`docker compose`, не `docker-compose`). * Git. * Для сборки статики вне контейнера — Node.js и `npm`. Внутри контейнера используется Python 3.12 — та же версия, что в CI. На неё же ориентированы пины в `requirements.txt`. ## Запуск в Docker ```bash git clone --recurse-submodules https://gitlab.com/space-education-development/soniks/network/soniks-network.git cd soniks-network cp env-dist .env mkdir -p media && echo 'MEDIA_VOLUME_PATH=./media' >> .env make build make start ``` Портал поднимется на `http://localhost:8000`. `--recurse-submodules` обязателен: декодеры телеметрии лежат в submodule `soniks-decoders`, без него образ не соберётся. В уже существующем клоне — `git submodule update --init`. `env-dist` — шаблон с закомментированными переменными. Обязателен только `SECRET_KEY`: без него Django не стартует. С остальными значениями по умолчанию портал стартует, но без токенов часть функций будет недоступна (карты, загрузка TLE со Space-Track, отправка почты). Полный разбор — в [](configuration.md). ## Что поднимается `docker-compose.yml` описывает шесть основных сервисов и три опциональных (профили `registry` и `mqtt`, см. [](dev/deploy.md)): | Сервис | Роль | |---|---| | `db` | PostgreSQL 15 | | `redis` | Redis — брокер и backend результатов Celery, кэш | | `web` | Gunicorn с Django-приложением, порт `8000` | | `celery` | Воркер Celery | | `celery-beat` | Планировщик периодических задач | | `docker-proxy` | Доступ к Docker API только на чтение для страницы «Система» | | `registry`, `mosquitto`, `mqtt-bridge` | Опциональные: registry-прокси для станций, MQTT-брокер и мост | `web` и `celery` запускают пакет, установленный в образ: правка исходников доходит до них только после `make build`. Из репозитория в них монтируется лишь `.env` — в `/workdir/.env` (настройки читаются через `AutoConfig(search_path="/workdir")`). Секреты в образ не копируются. При старте `web` выполняет `djangoctl.sh run`, который перед запуском gunicorn делает `collectstatic --clear`, `compress --force` и `migrate` — миграции применяются автоматически. ## Первичное наполнение Начальные фикстуры (типы антенн, режимы и т. п.) загружаются отдельной командой: ```bash docker compose run --rm web django-admin initialize ``` Суперпользователь создаётся обычным способом: ```bash docker compose run --rm web django-admin createsuperuser ``` ## Полезные команды ```bash make build # docker compose build --pull make start # docker compose up --remove-orphans make shell # bash внутри контейнера web make djshell # django-admin shell внутри контейнера web make clean # docker system prune -a -f --volumes ``` ```{warning} `make clean` вызывает `docker system prune --volumes` и удаляет тома, включая данные PostgreSQL. Это не «очистка кэша сборки». ``` ## Разработка без Docker `soniks.sh` умеет вести virtualenv-сценарий и обслуживающие задачи: ```bash ./soniks.sh develop # runserver в virtualenv ./soniks.sh develop_celery # celery worker + beat ./soniks.sh tox [ARGS] # запуск tox ./soniks.sh refresh # перегенерировать requirements-файлы ./soniks.sh update # обновить фронтенд-зависимости ./soniks.sh remove # удалить virtualenv ``` Полный список — `./soniks.sh --help`. Дальше: [](configuration.md) — что положить в `.env`, [](operations.md) — как обслуживать запущенный портал.