206 lines
4.6 KiB
Markdown
206 lines
4.6 KiB
Markdown
# 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. |