Files
Goa-gel-fullstack/docs/development/DOCKER_SETUP.md

375 lines
7.6 KiB
Markdown
Raw Normal View History

# 🐳 Docker Setup Guide - Goa-GEL Platform
Complete guide to run all Goa-GEL services in Docker.
---
## 🚀 Quick Start
```bash
# From the root directory
docker-compose up -d
# Wait for all services to be healthy (2-3 minutes)
docker-compose ps
# Access the services
open http://localhost:4200 # Frontend
open http://localhost:8080 # Documentation
open http://localhost:3001 # API
open http://localhost:4000 # Blockscout Explorer
open http://localhost:9001 # MinIO Console
```
---
## 📦 Services Included
### 1. **Frontend** (Angular)
- **Port**: 4200
- **URL**: http://localhost:4200
- **Description**: Main user interface for citizens, department officers, and admins
### 2. **API Backend** (NestJS)
- **Port**: 3001
- **URL**: http://localhost:3001
- **Health**: http://localhost:3001/health
- **Swagger**: http://localhost:3001/api
- **Description**: RESTful API backend with business logic
### 3. **Documentation Service**
- **Port**: 8080
- **URL**: http://localhost:8080
- **Description**: Static documentation site with user guides and technical docs
### 4. **PostgreSQL Database**
- **Port**: 5432
- **Database**: goa_gel_platform
- **User**: postgres
- **Password**: postgres_secure_password
### 5. **Redis Cache**
- **Port**: 6379
- **Description**: In-memory cache and job queue
### 6. **MinIO Object Storage**
- **API Port**: 9000
- **Console Port**: 9001
- **Console URL**: http://localhost:9001
- **Credentials**: minioadmin / minioadmin_secure
- **Description**: S3-compatible object storage for documents
### 7. **Hyperledger Besu Blockchain**
- **RPC Port**: 8545
- **WebSocket Port**: 8546
- **P2P Port**: 30303
- **Description**: Private Ethereum blockchain for license verification
### 8. **Blockscout Explorer**
- **Port**: 4000
- **URL**: http://localhost:4000
- **Description**: Blockchain explorer to view transactions and contracts
### 9. **Blockscout Database**
- **Port**: Internal only
- **Description**: PostgreSQL database for Blockscout
---
## 📋 Prerequisites
- **Docker** 20.10+ or Docker Desktop
- **Docker Compose** 1.29+
- **Minimum Resources**:
- 8GB RAM
- 20GB free disk space
- 4 CPU cores
---
## 🔧 Configuration
### Environment Variables
Create a `.env` file in the root directory:
```bash
# Copy example file
cp .env.example .env
# Edit the file
nano .env
```
**Required Variables** (will be populated after contract deployment):
- `CONTRACT_ADDRESS_LICENSE_NFT`
- `CONTRACT_ADDRESS_APPROVAL_MANAGER`
- `CONTRACT_ADDRESS_DEPARTMENT_REGISTRY`
- `CONTRACT_ADDRESS_WORKFLOW_REGISTRY`
- `PLATFORM_WALLET_PRIVATE_KEY`
---
## 🚀 Running Services
### Start All Services
```bash
docker-compose up -d
```
### View Logs
```bash
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f api
docker-compose logs -f frontend
docker-compose logs -f documentation
```
### Check Service Status
```bash
docker-compose ps
```
Expected output:
```
NAME STATUS PORTS
goa-gel-api Up (healthy) 0.0.0.0:3001->3001/tcp
goa-gel-frontend Up (healthy) 0.0.0.0:4200->80/tcp
goa-gel-documentation Up (healthy) 0.0.0.0:8080->80/tcp
goa-gel-postgres Up (healthy) 0.0.0.0:5432->5432/tcp
goa-gel-redis Up (healthy) 0.0.0.0:6379->6379/tcp
goa-gel-minio Up (healthy) 0.0.0.0:9000-9001->9000-9001/tcp
goa-gel-besu-1 Up (healthy) 0.0.0.0:8545-8546->8545-8546/tcp
goa-gel-blockscout Up 0.0.0.0:4000->4000/tcp
goa-gel-blockscout-db Up (healthy) 5432/tcp
```
### Stop Services
```bash
docker-compose stop
```
### Restart Services
```bash
docker-compose restart
```
### Stop and Remove Everything
```bash
docker-compose down
```
### Stop and Remove with Volumes (⚠️ Deletes data)
```bash
docker-compose down -v
```
---
## 🔄 Updating Services
### Rebuild After Code Changes
```bash
# Rebuild all services
docker-compose up -d --build
# Rebuild specific service
docker-compose up -d --build frontend
docker-compose up -d --build api
```
### Update Docker Images
```bash
# Pull latest base images
docker-compose pull
# Restart services
docker-compose up -d
```
---
## 🐛 Troubleshooting
### Port Already in Use
Check what's using the port:
```bash
lsof -i :4200 # Frontend
lsof -i :3001 # API
lsof -i :8080 # Documentation
```
Change ports in `docker-compose.yml`:
```yaml
ports:
- "4201:80" # Change 4200 to 4201
```
### Service Not Starting
View detailed logs:
```bash
docker-compose logs service-name
```
Check health status:
```bash
docker inspect --format='{{.State.Health.Status}}' container-name
```
### Out of Memory
Increase Docker memory:
- Docker Desktop → Settings → Resources → Memory
- Recommended: 8GB minimum
### Database Connection Failed
Wait for PostgreSQL to be ready:
```bash
docker-compose logs postgres
```
Manually check connection:
```bash
docker exec -it goa-gel-postgres psql -U postgres -d goa_gel_platform -c "SELECT 1;"
```
### Blockchain Not Mining
Check Besu logs:
```bash
docker-compose logs besu-node-1
```
Verify RPC is accessible:
```bash
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
http://localhost:8545
```
---
## 📊 Service Health Checks
All services have health checks. Check status:
```bash
# API Health
curl http://localhost:3001/health
# Frontend Health
curl -I http://localhost:4200/
# Documentation Health
curl -I http://localhost:8080/
# Blockchain RPC
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
http://localhost:8545
```
---
## 💾 Data Persistence
Data is stored in Docker volumes:
```bash
# List volumes
docker volume ls | grep goa-gel
# Inspect volume
docker volume inspect goa-gel_postgres_data
# Backup database
docker exec goa-gel-postgres pg_dump -U postgres goa_gel_platform > backup.sql
# Restore database
docker exec -i goa-gel-postgres psql -U postgres goa_gel_platform < backup.sql
```
---
## 🔐 Security Notes
### Development Setup (Current)
- Default passwords (change in production)
- All ports exposed for debugging
- CORS allows all origins
- No SSL/TLS
### Production Checklist
- [ ] Change all default passwords
- [ ] Use environment variables for secrets
- [ ] Set up SSL/TLS certificates
- [ ] Configure proper CORS origins
- [ ] Use Docker secrets for sensitive data
- [ ] Close unnecessary ports
- [ ] Set up firewall rules
- [ ] Enable audit logging
- [ ] Regular security updates
---
## 📈 Resource Usage
Expected resource usage:
| Service | CPU | Memory | Disk |
|---------|-----|--------|------|
| Frontend | < 5% | ~50MB | ~100MB |
| API | ~10% | ~200MB | ~500MB |
| Documentation | < 1% | ~20MB | ~50MB |
| PostgreSQL | ~5% | ~100MB | ~2GB |
| Redis | < 5% | ~50MB | ~100MB |
| MinIO | ~5% | ~100MB | ~5GB |
| Besu | ~20% | ~1GB | ~10GB |
| Blockscout | ~10% | ~500MB | ~500MB |
| **Total** | **~70%** | **~2GB** | **~18GB** |
---
## 🎯 Next Steps
1. ✅ Start all services
2. ✅ Wait for health checks to pass
3. ✅ Access frontend at http://localhost:4200
4. 📝 Deploy smart contracts (see blockchain/README.md)
5. 🔑 Update .env with contract addresses
6. 🔄 Restart API service
7. 👥 Create initial admin user
8. 🎉 Start using the platform!
---
## 📞 Support
- **Documentation**: http://localhost:8080
- **API Docs**: http://localhost:3001/api
- **Architecture**: ARCHITECTURE_GUIDE.md
- **User Guide**: USER_GUIDE.md
- **Testing**: E2E_TESTING_GUIDE.md
---
**Happy Dockering! 🐳**
Version: 1.0.0
Last Updated: February 2026