# Armstrong Vision Монорепозиторий: **Rails API** (`api/`), **React + Vite** (`frontend/`) и **PostgreSQL**, собранные в один стек через **Docker Compose**. Для повседневных команд используется **Makefile** в корне проекта. ## Требования - [Docker](https://docs.docker.com/get-docker/) и [Docker Compose](https://docs.docker.com/compose/) v2 - [GNU Make](https://www.gnu.org/software/make/) На Linux обычно достаточно пакетов `docker` / `docker-compose` (или плагин `docker compose`) и `make`. ## Быстрый старт После клонирования репозитория из корня каталога проекта: ```bash make prepare ``` Команда **`make prepare`** (то же самое, что **`make setup`**) выполняет: 1. сборку образов (`docker compose build`); 2. запуск сервисов в фоне с ожиданием готовности Postgres и API (`docker compose up -d --wait`); 3. при старте backend в entrypoint вызывается **`rails db:prepare`** (БД и схема) — **без** `db:seed` (так устроен Rails); 4. затем **`make prepare`** отдельно выполняет **`rails db:seed`** в контейнере backend (можно отключить: **`make prepare SEED_ON_PREPARE=0`**); 5. во frontend-контейнере при старте выполняется **`npm install`**, затем **`npm run dev`**. Команда **`make dev`** сначала делает то же, что **`make prepare`** (включая сиды при `SEED_ON_PREPARE=1`), затем включает поток логов. После успешного выполнения: | Сервис | Адрес | |----------|--------| | API | | | Фронтенд | | | Postgres | `localhost:5432`, БД `app_development`, пользователь `postgres`, пароль `postgres` | Остановка стека: ```bash make stop ``` ## Полезные команды | Команда | Назначение | |---------|------------| | `make` или `make help` | краткая справка по целям | | `make prepare` / `make setup` | первый запуск: сборка + подъём стека | | `make up` / `make start` | поднять уже собранный стек (с `--wait`) | | `make dev` | как `prepare`, затем поток логов всех сервисов (`Ctrl+C` только выходит из просмотра логов) | | `make restart` | пересборка и перезапуск | | `make logs` | следить за логами | | `make bash` | оболочка в контейнере backend | | `make rails CMD='db:migrate'` | произвольная команда `rails` в backend | | `make db-console` | `psql` в контейнере Postgres | | `make db-seed` | загрузить сиды (`db/seeds.rb`) | Таймаут ожидания healthcheck при `up` / `prepare` (секунды, по умолчанию 300): ```bash make up WAIT_TIMEOUT=600 ``` ## Сиды Демо-данные для таблиц `channels` и `histories` задаются в **`api/db/seeds.rb`**. Загрузка в уже запущенном стеке: ```bash make db-seed ``` Сиды сделаны идемпотентными: если в `channels` уже есть записи, повторный `db:seed` их не дублирует. ## Локальная разработка без Docker (опционально) Если Postgres установлен на машине, API и фронт можно запускать локально. Переменные для подключения к БД см. в **`Makefile`** (`LOCAL_PG_*`). Кратко: ```bash cd api && bundle install make local-db-prepare # из корня репозитория make local-server # Rails на :3000 ``` Подробнее по целям `local-*` выводит `make help`. ## Структура репозитория ``` ├── Makefile # команды для Docker и локального Rails ├── docker-compose.yml # Postgres, backend, frontend ├── api/ # Ruby on Rails 8 (API-only) └── frontend/ # React + Vite ``` Дополнительно в подкаталогах могут быть свои README шаблонов фреймворков (`api/README.md`, `frontend/README.md`). ## Замечания - Порт **5432** на хосте занят контейнером Postgres; если локально уже крутится свой PostgreSQL, измените проброс порта в `docker-compose.yml` или остановите локальный инстанс. - Код API и фронтенда монтируется в контейнеры томами: правки на диске сразу видны внутри сервисов (для Rails при необходимости перезапустите процесс вручную; Vite обычно пересобирает сам).