403 lines
9.9 KiB
Markdown
403 lines
9.9 KiB
Markdown
# Phase 1: Docker Compose Simplification
|
|
|
|
## Agent Assignment
|
|
**Primary Agent:** infra-agent
|
|
**Collaborators:** None
|
|
**Estimated Duration:** 25-30 minutes
|
|
|
|
## Prerequisites
|
|
- **Phases that must complete first:** Phase 4 (Config Cleanup)
|
|
- **Files that must not be locked:** docker-compose.yml
|
|
- **System state:** All containers stopped or ready for restart
|
|
|
|
## Objectives
|
|
|
|
1. Rename all services from `admin-*` to `mvp-*` naming convention
|
|
2. Rename `mvp-platform-vehicles-api` to `mvp-platform`
|
|
3. Remove 8 unnecessary platform service containers
|
|
4. Add filesystem volume mount for document storage
|
|
5. Update all Traefik labels for new service names
|
|
6. Ensure 6 containers total in final configuration
|
|
|
|
## Files to Modify
|
|
|
|
### docker-compose.yml
|
|
**Action:** Major restructure
|
|
**Location:** `/docker-compose.yml`
|
|
|
|
## Step-by-Step Instructions
|
|
|
|
### Step 1: Stop All Running Containers
|
|
```bash
|
|
# Stop all services
|
|
docker compose down
|
|
|
|
# Verify all stopped
|
|
docker compose ps
|
|
# Expected: No containers listed
|
|
```
|
|
|
|
### Step 2: Backup Current docker-compose.yml
|
|
```bash
|
|
# Create backup
|
|
cp docker-compose.yml docker-compose.yml.backup-phase1-$(date +%Y%m%d)
|
|
|
|
# Verify backup
|
|
ls -la docker-compose.yml*
|
|
```
|
|
|
|
### Step 3: Rename Services
|
|
|
|
**Services to Rename:**
|
|
|
|
```yaml
|
|
# OLD → NEW
|
|
traefik → mvp-traefik
|
|
admin-frontend → mvp-frontend
|
|
admin-backend → mvp-backend
|
|
admin-postgres → mvp-postgres
|
|
admin-redis → mvp-redis
|
|
mvp-platform-vehicles-api → mvp-platform
|
|
```
|
|
|
|
**Find and Replace:**
|
|
```bash
|
|
# In docker-compose.yml, replace:
|
|
sed -i.bak 's/admin-frontend/mvp-frontend/g' docker-compose.yml
|
|
sed -i.bak 's/admin-backend/mvp-backend/g' docker-compose.yml
|
|
sed -i.bak 's/admin-postgres/mvp-postgres/g' docker-compose.yml
|
|
sed -i.bak 's/admin-redis/mvp-redis/g' docker-compose.yml
|
|
sed -i.bak 's/mvp-platform-vehicles-api/mvp-platform/g' docker-compose.yml
|
|
|
|
# Note: traefik already has correct name
|
|
```
|
|
|
|
### Step 4: Remove Platform Services
|
|
|
|
**Delete these entire service definitions from docker-compose.yml:**
|
|
|
|
```yaml
|
|
admin-minio: # DELETE entire block
|
|
mvp-platform-landing: # DELETE entire block
|
|
mvp-platform-tenants: # DELETE entire block
|
|
platform-postgres: # DELETE entire block
|
|
platform-redis: # DELETE entire block
|
|
mvp-platform-vehicles-db: # DELETE entire block
|
|
mvp-platform-vehicles-redis: # DELETE entire block
|
|
mvp-platform-vehicles-etl: # DELETE entire block
|
|
```
|
|
|
|
### Step 5: Add Filesystem Volume Mount
|
|
|
|
**Add to mvp-backend service:**
|
|
|
|
```yaml
|
|
mvp-backend:
|
|
# ... existing config ...
|
|
volumes:
|
|
- ./config/app/production.yml:/app/config/production.yml:ro
|
|
- ./secrets/app/postgres-password.txt:/run/secrets/postgres-password:ro
|
|
- ./data/documents:/app/data/documents # ADD THIS LINE
|
|
# ... rest of config ...
|
|
```
|
|
|
|
**Create directory on host:**
|
|
```bash
|
|
mkdir -p ./data/documents
|
|
chmod 755 ./data/documents
|
|
```
|
|
|
|
### Step 6: Update Volume Names
|
|
|
|
**Find and replace volume names:**
|
|
|
|
```yaml
|
|
# OLD volumes:
|
|
admin_postgres_data
|
|
admin_redis_data
|
|
admin_minio_data # DELETE
|
|
|
|
# NEW volumes:
|
|
mvp_postgres_data
|
|
mvp_redis_data
|
|
```
|
|
|
|
**At bottom of docker-compose.yml:**
|
|
```yaml
|
|
volumes:
|
|
mvp_postgres_data:
|
|
name: mvp_postgres_data
|
|
mvp_redis_data:
|
|
name: mvp_redis_data
|
|
# Remove admin_minio_data
|
|
```
|
|
|
|
### Step 7: Update Traefik Labels
|
|
|
|
**For mvp-frontend:**
|
|
```yaml
|
|
mvp-frontend:
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mvp-frontend.rule=Host(`admin.motovaultpro.com`)" # Updated
|
|
- "traefik.http.routers.mvp-frontend.entrypoints=websecure"
|
|
- "traefik.http.routers.mvp-frontend.tls=true"
|
|
- "traefik.http.services.mvp-frontend.loadbalancer.server.port=80" # Updated service name
|
|
```
|
|
|
|
**For mvp-backend:**
|
|
```yaml
|
|
mvp-backend:
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mvp-backend.rule=Host(`admin.motovaultpro.com`) && PathPrefix(`/api`)"
|
|
- "traefik.http.routers.mvp-backend.entrypoints=websecure"
|
|
- "traefik.http.routers.mvp-backend.tls=true"
|
|
- "traefik.http.services.mvp-backend.loadbalancer.server.port=3001" # Updated service name
|
|
```
|
|
|
|
**For mvp-platform:**
|
|
```yaml
|
|
mvp-platform:
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mvp-platform.rule=Host(`admin.motovaultpro.com`) && PathPrefix(`/platform`)"
|
|
- "traefik.http.routers.mvp-platform.entrypoints=websecure"
|
|
- "traefik.http.routers.mvp-platform.tls=true"
|
|
- "traefik.http.services.mvp-platform.loadbalancer.server.port=8000" # Updated service name
|
|
```
|
|
|
|
### Step 8: Update Internal Service References
|
|
|
|
**In mvp-backend environment variables or config:**
|
|
```yaml
|
|
mvp-backend:
|
|
environment:
|
|
- DATABASE_HOST=mvp-postgres # Updated from admin-postgres
|
|
- REDIS_HOST=mvp-redis # Updated from admin-redis
|
|
- PLATFORM_VEHICLES_API_URL=http://mvp-platform:8000 # Updated
|
|
```
|
|
|
|
**In mvp-platform:**
|
|
```yaml
|
|
mvp-platform:
|
|
environment:
|
|
- DATABASE_HOST=mvp-postgres # Will use same postgres as backend
|
|
- REDIS_HOST=mvp-redis # Will use same redis as backend
|
|
```
|
|
|
|
### Step 9: Validate docker-compose.yml
|
|
|
|
```bash
|
|
# Validate syntax
|
|
docker compose config
|
|
|
|
# Expected: No errors, valid YAML output
|
|
|
|
# Check service count
|
|
docker compose config --services | wc -l
|
|
# Expected: 6
|
|
```
|
|
|
|
### Step 10: Update .env if Needed
|
|
|
|
**Ensure .env references new service names:**
|
|
```bash
|
|
# .env should have:
|
|
DATABASE_URL=postgresql://postgres:password@mvp-postgres:5432/motovaultpro
|
|
REDIS_URL=redis://mvp-redis:6379
|
|
PLATFORM_VEHICLES_API_URL=http://mvp-platform:8000
|
|
```
|
|
|
|
### Step 11: Start Services
|
|
|
|
```bash
|
|
# Build and start all containers
|
|
docker compose up -d --build
|
|
|
|
# Check status
|
|
docker compose ps
|
|
# Expected: 6 services running
|
|
|
|
# Expected services:
|
|
# - mvp-traefik
|
|
# - mvp-frontend
|
|
# - mvp-backend
|
|
# - mvp-postgres
|
|
# - mvp-redis
|
|
# - mvp-platform
|
|
```
|
|
|
|
### Step 12: Verify Traefik Dashboard
|
|
|
|
```bash
|
|
# Access Traefik dashboard
|
|
open http://localhost:8080
|
|
|
|
# Check discovered services
|
|
curl -s http://localhost:8080/api/http/services | jq -r '.[].name'
|
|
# Expected to see: mvp-frontend, mvp-backend, mvp-platform
|
|
|
|
# Check routers
|
|
curl -s http://localhost:8080/api/http/routers | jq -r '.[].name'
|
|
# Expected to see: mvp-frontend, mvp-backend, mvp-platform routers
|
|
```
|
|
|
|
## Validation Criteria
|
|
|
|
### Container Validation
|
|
- [ ] Exactly 6 containers running
|
|
- [ ] All containers have "healthy" or "running" status
|
|
- [ ] No "admin-*" named containers (except in volumes)
|
|
- [ ] mvp-platform exists (not mvp-platform-vehicles-api)
|
|
|
|
**Validation Command:**
|
|
```bash
|
|
docker compose ps --format "table {{.Service}}\t{{.Status}}"
|
|
```
|
|
|
|
### Service Validation
|
|
- [ ] mvp-traefik accessible at localhost:8080
|
|
- [ ] mvp-frontend accessible at https://admin.motovaultpro.com
|
|
- [ ] mvp-backend accessible at https://admin.motovaultpro.com/api/health
|
|
- [ ] mvp-postgres accepting connections
|
|
- [ ] mvp-redis accepting connections
|
|
- [ ] mvp-platform accessible (internal)
|
|
|
|
**Validation Commands:**
|
|
```bash
|
|
# Test Traefik
|
|
curl -s http://localhost:8080/api/version | jq
|
|
|
|
# Test backend health
|
|
curl -s -k https://admin.motovaultpro.com/api/health
|
|
|
|
# Test postgres
|
|
docker compose exec mvp-postgres pg_isready -U postgres
|
|
|
|
# Test redis
|
|
docker compose exec mvp-redis redis-cli ping
|
|
# Expected: PONG
|
|
|
|
# Test platform service (internal)
|
|
docker compose exec mvp-backend curl http://mvp-platform:8000/health
|
|
```
|
|
|
|
### Volume Validation
|
|
- [ ] mvp_postgres_data volume exists
|
|
- [ ] mvp_redis_data volume exists
|
|
- [ ] ./data/documents directory exists and is writable
|
|
- [ ] No admin_minio_data volume
|
|
|
|
**Validation Commands:**
|
|
```bash
|
|
# Check volumes
|
|
docker volume ls | grep mvp
|
|
# Expected: mvp_postgres_data, mvp_redis_data
|
|
|
|
# Check filesystem mount
|
|
docker compose exec mvp-backend ls -la /app/data/documents
|
|
# Expected: Directory exists, writable
|
|
|
|
# Verify no MinIO volume
|
|
docker volume ls | grep minio
|
|
# Expected: Empty (no results)
|
|
```
|
|
|
|
### Network Validation (Phase 5 will simplify further)
|
|
- [ ] Services can communicate internally
|
|
- [ ] Traefik can route to all services
|
|
- [ ] No network errors in logs
|
|
|
|
**Validation Commands:**
|
|
```bash
|
|
# Test internal communication
|
|
docker compose exec mvp-backend ping -c 1 mvp-postgres
|
|
docker compose exec mvp-backend ping -c 1 mvp-redis
|
|
docker compose exec mvp-backend ping -c 1 mvp-platform
|
|
|
|
# Check logs for network errors
|
|
docker compose logs mvp-backend | grep -i "network\|connection"
|
|
# Expected: No critical errors
|
|
```
|
|
|
|
## Rollback Procedure
|
|
|
|
If validation fails:
|
|
|
|
```bash
|
|
# 1. Stop containers
|
|
docker compose down
|
|
|
|
# 2. Restore backup
|
|
cp docker-compose.yml.backup-phase1-YYYYMMDD docker-compose.yml
|
|
|
|
# 3. Restart with original config
|
|
docker compose up -d
|
|
|
|
# 4. Verify rollback
|
|
docker compose ps
|
|
# Expected: 14 containers (original state)
|
|
```
|
|
|
|
See ROLLBACK-STRATEGY.md Phase 1 section for detailed procedure.
|
|
|
|
## Dependencies on Other Phases
|
|
|
|
### Blocks These Phases:
|
|
- Phase 5 (Network Simplification) - needs new service names
|
|
- Phase 7 (Database Updates) - needs new container names
|
|
- Phase 8 (Platform Service) - needs new mvp-platform name
|
|
|
|
### Blocked By:
|
|
- Phase 4 (Config Cleanup) - needs clean configuration first
|
|
|
|
## Estimated Duration
|
|
**25-30 minutes**
|
|
- Backup and preparation: 5 minutes
|
|
- Service renaming: 10 minutes
|
|
- Validation: 10 minutes
|
|
- Troubleshooting buffer: 5 minutes
|
|
|
|
## Conflict Zones
|
|
**None** - This phase exclusively owns docker-compose.yml during execution.
|
|
|
|
## Success Indicators
|
|
1. `docker compose config` validates successfully
|
|
2. All 6 containers start and reach healthy status
|
|
3. Traefik dashboard shows 3 services
|
|
4. Application accessible via browser
|
|
5. No errors in container logs
|
|
|
|
## Update EXECUTION-STATE.json
|
|
|
|
```json
|
|
{
|
|
"phases": {
|
|
"1": {
|
|
"status": "in_progress",
|
|
"started_at": "[timestamp]",
|
|
"agent": "infra-agent"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**On completion:**
|
|
```json
|
|
{
|
|
"phases": {
|
|
"1": {
|
|
"status": "completed",
|
|
"started_at": "[timestamp]",
|
|
"completed_at": "[timestamp]",
|
|
"duration_minutes": 28,
|
|
"validation_passed": true
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Next Phase
|
|
After successful completion, infra-agent can proceed to Phase 5 (Network Simplification), and platform-agent can start Phase 8 (Platform Service Simplification).
|