Files
2026-06-08 22:55:30 +04:00

102 lines
5.2 KiB
Markdown

# 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 | <http://localhost:3000> |
| Фронтенд | <http://localhost:5173> |
| 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 обычно пересобирает сам).