# Unified Docker Compose Setup This project now includes a unified Docker Compose configuration that allows all services (mineru, backend, frontend) to run together and communicate using service names. ## Architecture The unified setup includes the following services: - **mineru-api**: Document processing service (port 8001) - **backend-api**: Main API service (port 8000) - **celery-worker**: Background task processor - **redis**: Message broker for Celery - **frontend**: React frontend application (port 3000) ## Network Configuration All services are connected through a custom bridge network called `app-network`, allowing them to communicate using service names: - Backend → Mineru: `http://mineru-api:8000` - Frontend → Backend: `http://localhost:8000/api/v1` (external access) - Backend → Redis: `redis://redis:6379/0` ## Usage ### Starting all services ```bash # From the root directory docker-compose up -d ``` ### Starting specific services ```bash # Start only backend and mineru docker-compose up -d backend-api mineru-api redis # Start only frontend and backend docker-compose up -d frontend backend-api redis ``` ### Stopping services ```bash # Stop all services docker-compose down # Stop and remove volumes docker-compose down -v ``` ### Viewing logs ```bash # View all logs docker-compose logs -f # View specific service logs docker-compose logs -f backend-api docker-compose logs -f mineru-api docker-compose logs -f frontend ``` ## Building Services ### Building all services ```bash # Build all services docker-compose build # Build and start all services docker-compose up -d --build ``` ### Building individual services ```bash # Build only backend docker-compose build backend-api # Build only frontend docker-compose build frontend # Build only mineru docker-compose build mineru-api # Build multiple specific services docker-compose build backend-api frontend celery-worker ``` ### Building and restarting specific services ```bash # Build and restart only backend docker-compose build backend-api docker-compose up -d backend-api # Or combine in one command docker-compose up -d --build backend-api # Build and restart backend and celery worker docker-compose up -d --build backend-api celery-worker ``` ### Force rebuild (no cache) ```bash # Force rebuild all services docker-compose build --no-cache # Force rebuild specific service docker-compose build --no-cache backend-api ``` ## Environment Variables The unified setup uses environment variables from the individual service `.env` files: - `./backend/.env` - Backend configuration - `./frontend/.env` - Frontend configuration - `./mineru/.env` - Mineru configuration (if exists) ### Key Configuration Changes 1. **Backend Configuration** (`backend/app/core/config.py`): ```python MINERU_API_URL: str = "http://mineru-api:8000" ``` 2. **Frontend Configuration**: ```javascript REACT_APP_API_BASE_URL=http://localhost:8000/api/v1 ``` ## Service Dependencies - `backend-api` depends on `redis` and `mineru-api` - `celery-worker` depends on `redis` and `backend-api` - `frontend` depends on `backend-api` ## Port Mapping - **Frontend**: `http://localhost:3000` - **Backend API**: `http://localhost:8000` - **Mineru API**: `http://localhost:8001` - **Redis**: `localhost:6379` ## Health Checks The mineru-api service includes a health check that verifies the service is running properly. ## Development vs Production For development, you can still use the individual docker-compose files in each service directory. The unified setup is ideal for: - Production deployments - End-to-end testing - Simplified development environment ## Troubleshooting ### Service Communication Issues If services can't communicate: 1. Check if all services are running: `docker-compose ps` 2. Verify network connectivity: `docker network ls` 3. Check service logs: `docker-compose logs [service-name]` ### Port Conflicts If you get port conflicts, you can modify the port mappings in the `docker-compose.yml` file: ```yaml ports: - "8002:8000" # Change external port ``` ### Volume Issues Make sure the storage directories exist: ```bash mkdir -p backend/storage mkdir -p mineru/storage/uploads mkdir -p mineru/storage/processed ``` ## Migration from Individual Compose Files If you were previously using individual docker-compose files: 1. Stop all individual services: ```bash cd backend && docker-compose down cd ../frontend && docker-compose down cd ../mineru && docker-compose down ``` 2. Start the unified setup: ```bash cd .. && docker-compose up -d ``` The unified setup maintains the same functionality while providing better service discovery and networking.