diff --git a/backend/.env.example b/backend/.env.example index 1b8393b..b2a1207 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -13,6 +13,9 @@ JWT_REFRESH_DURATION=720h PORT=8080 ALLOWED_ORIGINS=http://localhost:3000 +# Kafka (localhost:9093 for local dev, kafka:9092 when running inside Docker) +KAFKA_BROKERS=localhost:9093 + # External APIs OPENAI_API_KEY=your-openai-key PEXELS_API_KEY=your-pexels-key diff --git a/backend/Makefile b/backend/Makefile index f8471ef..82b9326 100644 --- a/backend/Makefile +++ b/backend/Makefile @@ -1,4 +1,4 @@ -.PHONY: run run-worker test test-integration lint migrate-up migrate-down migrate-create migrate-status docker-up docker-down docker-logs docker-logs-worker +.PHONY: run run-worker dev dev-infra-up dev-infra-down test test-integration lint migrate-up migrate-down migrate-create migrate-status docker-up docker-down docker-logs docker-logs-worker ifneq (,$(wildcard .env)) include .env @@ -12,6 +12,19 @@ run: run-worker: go run ./cmd/worker +# Start only infra (postgres, kafka) in Docker, run server + worker locally +dev: dev-infra-up + @trap 'kill 0' INT; \ + go run ./cmd/server & \ + go run ./cmd/worker & \ + wait + +dev-infra-up: + docker compose up -d postgres kafka kafka-init + +dev-infra-down: + docker compose stop postgres kafka kafka-init + # Tests test: go test ./... -v -race -count=1 diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml index e925828..713e9d1 100644 --- a/backend/docker-compose.yml +++ b/backend/docker-compose.yml @@ -4,17 +4,19 @@ services: environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller - KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 - KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 + KAFKA_LISTENERS: PLAINTEXT://:9092,EXTERNAL://:9093,CONTROLLER://:9094 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,EXTERNAL://localhost:9093 + KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9094 KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qg" ports: - "9092:9092" + - "9093:9093" healthcheck: test: ["CMD-SHELL", "kafka-topics --bootstrap-server localhost:9092 --list || exit 1"] interval: 10s