# ------------------------------------------------------------------------------ # Пути # ------------------------------------------------------------------------------ API_DIR := api FRONTEND_DIR := frontend # Секунды ожидания для `docker compose up --wait` (healthcheck Postgres + API). WAIT_TIMEOUT ?= 300 DOCKER_UP := docker compose up -d --wait --wait-timeout $(WAIT_TIMEOUT) # После `make prepare` / `make dev`: вызвать `rails db:seed` в backend (0 — не вызывать). SEED_ON_PREPARE ?= 1 # ------------------------------------------------------------------------------ # Локальная разработка: Postgres + Rails на хосте (без Docker) # ------------------------------------------------------------------------------ LOCAL_PG_HOST ?= localhost LOCAL_PG_PORT ?= 5432 LOCAL_PG_USER ?= postgres LOCAL_PG_PASSWORD ?= postgres LOCAL_PG_DB ?= app_development LOCAL_PG_ENV := PGPASSWORD=$(LOCAL_PG_PASSWORD) PGHOST=$(LOCAL_PG_HOST) PGPORT=$(LOCAL_PG_PORT) PGUSER=$(LOCAL_PG_USER) LOCAL_RAILS_ENV := DATABASE_HOSTNAME=$(LOCAL_PG_HOST) DATABASE_PORT=$(LOCAL_PG_PORT) DATABASE_USERNAME=$(LOCAL_PG_USER) DATABASE_PASSWORD=$(LOCAL_PG_PASSWORD) # Команда для local-rails: make local-rails RAILS_CMD="db:migrate" RAILS_CMD ?= console .DEFAULT_GOAL := help .PHONY: help prepare setup dev \ restart build start stop logs bash \ rails bundle yarn npm \ up \ db db-console db-migrate db-rollback db-reset db-seed db-prepare \ db-create db-drop db-docker-recreate \ db-create-user db-grant-user \ local-bundle local-rails local-console local-server \ local-db-create local-db-drop local-db-migrate local-db-rollback \ local-db-reset local-db-seed local-db-prepare local-db-console help: @echo "Быстрый старт (Docker: БД + API + фронтенд)" @echo " make prepare # сборка, up, затем db:seed (если SEED_ON_PREPARE=1; то же: make setup)" @echo " make dev # prepare, затем логи всех сервисов (Ctrl+C — только выход из просмотра логов)" @echo " make up # поднять стек (ждёт готовности Postgres и API)" @echo " make stop # docker compose down" @echo "" @echo "Прочие команды Docker" @echo " make restart|build|logs" @echo " make bash # оболочка в контейнере backend" @echo " make rails CMD=... # например: make rails CMD=db:migrate" @echo " make bundle CMD=... # bundle в контейнере backend" @echo " make yarn CMD=... # yarn в контейнере frontend" @echo " make db-console # psql в контейнере БД (синоним: make db)" @echo " make db-migrate|db-rollback|db-reset|db-seed|db-prepare" @echo " make db-create|db-drop # rails db:create / db:drop в backend" @echo " make db-docker-recreate # пустая БД в контейнере Postgres (dropdb + createdb)" @echo "" @echo "Локально на хосте (Postgres + Rails без Docker)" @echo " make local-bundle && make local-db-prepare && make local-server" @echo " Параметры БД: переменные LOCAL_PG_* в начале этого Makefile" # ------------------------------------------------------------------------------ # Docker Compose — подготовка и жизненный цикл # ------------------------------------------------------------------------------ prepare setup: docker compose build $(DOCKER_UP) ifneq ($(SEED_ON_PREPARE),0) docker compose exec -T backend ./bin/rails db:seed endif @echo "" @echo "Готово:" @echo " API http://localhost:3000" @echo " Фронтенд http://localhost:5173" @echo " Postgres localhost:5432, БД app_development, пользователь postgres" dev: prepare docker compose logs -f restart: docker compose down docker compose up -d --build --wait --wait-timeout $(WAIT_TIMEOUT) build: docker compose build start up: $(DOCKER_UP) stop: docker compose down logs: docker compose logs -f bash: docker compose exec backend bash rails: docker compose exec backend ./bin/rails $(CMD) bundle: docker compose exec backend bundle $(CMD) yarn: docker compose exec frontend yarn $(CMD) npm: docker compose exec frontend npm $(CMD) db-console db: docker compose exec database psql -U postgres -d app_development db-migrate: docker compose exec backend ./bin/rails db:migrate db-rollback: docker compose exec backend ./bin/rails db:rollback db-reset: docker compose exec backend ./bin/rails db:reset db-seed: docker compose exec -T backend ./bin/rails db:seed db-prepare: docker compose exec backend ./bin/rails db:prepare db-create: docker compose exec backend ./bin/rails db:create db-drop: docker compose exec backend ./bin/rails db:drop db-docker-recreate: docker compose exec database dropdb --if-exists -U postgres app_development docker compose exec database createdb -U postgres app_development db-create-user: docker compose exec database psql -U postgres -c "CREATE USER app_development WITH PASSWORD 'app_development';" db-grant-user: docker compose exec database psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE app_development TO app_development;" # ------------------------------------------------------------------------------ # Локально: Bundler + Rails + psql к Postgres на хосте # ------------------------------------------------------------------------------ local-bundle: cd $(API_DIR) && bundle install local-rails: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails $(RAILS_CMD) local-console: $(MAKE) local-rails RAILS_CMD=console local-server: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails server -b 0.0.0.0 -p 3000 local-db-create: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:create local-db-drop: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:drop local-db-migrate: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:migrate local-db-rollback: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:rollback local-db-reset: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:reset local-db-seed: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:seed local-db-prepare: cd $(API_DIR) && $(LOCAL_RAILS_ENV) bin/rails db:prepare local-db-console: $(LOCAL_PG_ENV) psql -d $(LOCAL_PG_DB)