Files
managing-apps/docs/TASK_ENVIRONMENTS_SETUP.md
2026-01-05 17:36:19 +07:00

181 lines
4.6 KiB
Markdown

# Task Environments Setup with Docker Compose
This document explains how to use Docker Compose to create isolated test environments for each development task.
## Overview
Each task gets its own isolated Docker Compose environment with:
- ✅ Isolated PostgreSQL database (copy of main database)
- ✅ Isolated Redis instance
- ✅ API and Workers containers
- ✅ Uses main InfluxDB instance (shared)
- ✅ Unique ports per task to avoid conflicts
## Quick Start
### Start a Test Environment
```bash
# Simple way (auto-generates task ID)
bash scripts/start-dev-env.sh
# With specific task ID
bash scripts/start-dev-env.sh TASK-123
# With specific task ID and port offset
bash scripts/start-dev-env.sh TASK-123 10
```
### Stop a Test Environment
```bash
bash scripts/stop-task-docker.sh TASK-123
```
## Scripts
### `scripts/start-task-docker.sh`
Main script that:
1. Creates task-specific Docker Compose file
2. Starts PostgreSQL and Redis
3. Copies database from main repo
4. Starts API and Workers
**Usage:**
```bash
bash scripts/start-task-docker.sh <TASK_ID> <PORT_OFFSET>
```
### `scripts/stop-task-docker.sh`
Stops and cleans up a task environment.
**Usage:**
```bash
bash scripts/stop-task-docker.sh <TASK_ID>
```
### `scripts/copy-database-for-task.sh`
Copies database from main repo to task-specific PostgreSQL instance.
**Usage:**
```bash
bash scripts/copy-database-for-task.sh <TASK_ID> <SOURCE_HOST> <SOURCE_PORT> <TARGET_HOST> <TARGET_PORT>
```
### `scripts/create-task-compose.sh`
Generates a Docker Compose file for a specific task.
**Usage:**
```bash
bash scripts/create-task-compose.sh <TASK_ID> <PORT_OFFSET>
```
### `scripts/start-dev-env.sh`
Simple wrapper for dev agents to start environments.
**Usage:**
```bash
bash scripts/start-dev-env.sh [TASK_ID] [PORT_OFFSET]
```
## Port Allocation
Default ports (offset 0):
- PostgreSQL: 5433
- API: 5000
- Redis: 6379
- InfluxDB: 8086 (uses main instance)
With offset 10:
- PostgreSQL: 5442
- API: 5010
- Redis: 6389
- InfluxDB: 8086 (uses main instance)
## Database Setup
Each task environment:
- Gets a fresh copy of the main database
- Has isolated databases: `managing_{task_id}` and `orleans_{task_id}`
- Changes don't affect the main database
- Can be reset by stopping and restarting
## Integration with Vibe Kanban
When a task moves to "Ready for QA":
1. Vibe Kanban calls `scripts/start-task-docker.sh`
2. Environment is created with database copy
3. Test URLs are provided
4. When done, Vibe Kanban calls `scripts/stop-task-docker.sh`
## Integration with dev-manager-mcp
dev-manager-mcp can manage multiple environments:
- Start: `npx dev-manager-mcp start --command "bash scripts/start-task-docker.sh TASK-123 0"`
- Status: `npx dev-manager-mcp status`
- Stop: `npx dev-manager-mcp stop --session-key <KEY>`
## Troubleshooting
### Port Conflicts
Use a different port offset:
```bash
bash scripts/start-task-docker.sh TASK-123 10
```
### Database Copy Fails
1. Verify main database is running: `docker ps | grep postgres`
2. Check connection: `PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d managing -c '\q'`
3. Ensure PostgreSQL client is installed: `which psql`
### Services Don't Start
Check logs:
```bash
docker logs managing-api-TASK-123
docker logs managing-workers-TASK-123
```
### Clean Up All Task Environments
```bash
# List all task containers
docker ps -a | grep -E "postgres-|managing-api-|managing-workers-|redis-"
# Stop and remove all task containers
docker ps -a | grep -E "postgres-|managing-api-|managing-workers-|redis-" | awk '{print $1}' | xargs docker rm -f
# Remove all task volumes
docker volume ls | grep -E "postgresdata_|redis_data_" | awk '{print $2}' | xargs docker volume rm
```
## Best Practices
1. **Use descriptive task IDs**: `TASK-123`, `FEATURE-456`, `BUGFIX-789`
2. **Stop environments when done**: Frees up resources
3. **Use port offsets for parallel testing**: Test multiple tasks simultaneously
4. **Check port availability**: Before starting, verify ports aren't in use
5. **Monitor resource usage**: Each environment uses memory and CPU
## Architecture
```
Main Environment (localhost:5432)
├── PostgreSQL (main database)
└── InfluxDB (shared)
Task Environment (offset ports)
├── PostgreSQL (isolated, copied from main)
├── Redis (isolated)
├── API Container (connects to task PostgreSQL, main InfluxDB)
└── Workers Container (connects to task PostgreSQL, main InfluxDB)
```
## Next Steps
1. Install Vibe Kanban: See `docs/INSTALL_VIBE_KANBAN_AND_DEV_MANAGER.md`
2. Install dev-manager-mcp: See `docs/INSTALL_VIBE_KANBAN_AND_DEV_MANAGER.md`
3. Configure agent command: See `.cursor/commands/start-dev-env.md`