10 KiB
🐳 Docker Deployment Documentation
Complete guide for deploying and testing the H2H betting platform with blockchain integration in Docker.
📚 Documentation Files
| File | Purpose | When to Use |
|---|---|---|
| DOCKER_QUICK_START.md | Quick reference card | When you need fast commands |
| DOCKER_TESTING_GUIDE.md | Comprehensive testing guide | Full deployment walkthrough |
| DOCKER_EXPECTED_RESULTS.md | Visual guide of expected output | Verification and troubleshooting |
| test-docker.sh | Automated test script | One-command deployment test |
🚀 Quick Start (30 seconds)
Prerequisites: Docker Desktop must be running (green icon in menu bar)
# Run automated deployment test
./test-docker.sh
This will:
- ✅ Build Docker images with blockchain integration
- ✅ Start backend and frontend containers
- ✅ Seed database with test users
- ✅ Verify all services are working
- ✅ Check blockchain files are present
Expected time: 3-5 minutes (first time), ~30 seconds (subsequent runs)
📖 Step-by-Step Guide
1. Ensure Docker is Running
Check Docker Desktop is started:
docker --version
# Should show: Docker version 28.x.x
2. Run Automated Tests
chmod +x test-docker.sh
./test-docker.sh
3. Access Application
Frontend: http://localhost:5173
Login with:
Email: alice@example.com
Password: password123
Backend API: http://localhost:8000/docs
4. Verify Blockchain Integration
In the browser, check for:
- ⛓️ Blockchain badges on bet cards
- "Connect Wallet" button in header
- Gas estimate panels in bet creation/acceptance
- "On-Chain Escrow" section in wallet (when connected)
5. Stop Services
docker compose down
🎯 What Gets Deployed
Backend Container
- FastAPI server on port 8000
- SQLite database with blockchain fields:
bets.blockchain_bet_idbets.blockchain_tx_hashbets.blockchain_statuswallets.blockchain_escrow
- Blockchain services:
blockchain_service.py- Web3 integrationblockchain_indexer.py- Event syncingoracle_node.py- API data fetchingoracle_aggregator.py- Consensus mechanism
Frontend Container
- Vite dev server on port 5173
- React application with blockchain UI:
- Web3 wallet connection hooks
- Gas estimate components
- Transaction progress modals
- Blockchain status badges
- Modified components:
- BetCard with blockchain badges
- CreateBetModal with gas estimates
- BetDetails with transaction flow
- WalletBalance with on-chain section
- Header with wallet connect button
🔍 Verification Checklist
Run through this checklist after deployment:
Backend ✅
- Container is running:
docker compose ps - API docs accessible: http://localhost:8000/docs
- Login works: Test with curl or Swagger UI
- Blockchain files present:
docker compose exec backend ls app/blockchain/
Frontend ✅
- Container is running:
docker compose ps - App loads: http://localhost:5173
- Login page renders
- Can authenticate with test credentials
- Blockchain hooks present:
docker compose exec frontend ls src/blockchain/
UI Features ✅
- Blockchain badges visible on bet cards
- "Connect Wallet" button in header
- Gas estimate in Create Bet modal
- Gas estimate panel on Bet Details
- "On-Chain Escrow" section in Wallet
- Transaction modals configured
Integration ✅
- No import errors in logs
- TypeScript compiles without errors
- All API endpoints responding
- WebSocket connections work
- Database has blockchain fields
🛠️ Common Commands
# Start services
docker compose up -d
# View logs
docker compose logs -f
docker compose logs -f backend
docker compose logs -f frontend
# Stop services
docker compose down
# Rebuild everything
docker compose build --no-cache
docker compose up -d
# Reset database
docker compose down -v
docker compose up -d
docker compose exec backend python seed_data.py
# Shell access
docker compose exec backend bash
docker compose exec frontend sh
# Check resource usage
docker stats
# Remove everything (nuclear option)
docker compose down -v
docker system prune -af
🐛 Troubleshooting
Services Won't Start
# Check Docker daemon
docker info
# Check port availability
lsof -ti:8000
lsof -ti:5173
# View detailed logs
docker compose logs
Import Errors
# Rebuild backend
docker compose build --no-cache backend
docker compose up -d backend
# Check Python imports
docker compose exec backend python -c "from app.blockchain.services.blockchain_service import BlockchainService; print('OK')"
Frontend Build Errors
# Rebuild frontend
docker compose build --no-cache frontend
docker compose up -d frontend
# Check TypeScript
docker compose exec frontend npm run type-check
Database Issues
# Reset and reseed
docker compose down -v
docker compose up -d
sleep 10
docker compose exec backend python seed_data.py
📊 Performance Benchmarks
Expected performance in Docker:
| Metric | Expected Value |
|---|---|
| Build time (first) | 3-5 minutes |
| Build time (cached) | 10-30 seconds |
| Startup time | 10-30 seconds |
| Backend memory | < 200MB |
| Frontend memory | < 500MB |
| API response time | < 100ms |
| Page load time | < 2s |
🔐 Security Notes
Development Environment Only
Current configuration is for development:
- SQLite database (use PostgreSQL in production)
- Hot reload enabled (disable in production)
- Debug logging (reduce in production)
- Default JWT secret (change in production)
- Ports exposed (use reverse proxy in production)
For Production:
- Use PostgreSQL instead of SQLite
- Set secure JWT_SECRET
- Disable debug mode
- Use production build (not dev server)
- Add reverse proxy (nginx)
- Enable HTTPS
- Set up proper logging
- Configure monitoring
📝 Test Scenarios
Scenario 1: Fresh Deployment
docker compose down -v
./test-docker.sh
# Expected: All checks pass, can login and see UI
Scenario 2: Code Changes
# Make code changes in your editor
docker compose restart backend # If backend changes
docker compose restart frontend # If frontend changes
# Expected: Changes reflected due to volume mounts
Scenario 3: Database Reset
docker compose down -v
docker compose up -d
docker compose exec backend python seed_data.py
# Expected: Fresh database with test users
Scenario 4: Full Rebuild
docker compose down -v
docker compose build --no-cache
docker compose up -d
# Expected: Clean build with all latest changes
🎓 Learning Resources
Understanding the Architecture
┌─────────────────────────────────────────┐
│ Browser (http://localhost:5173) │
└───────────────┬─────────────────────────┘
│
│ HTTP/WebSocket
│
┌───────────────▼─────────────────────────┐
│ Frontend Container (Vite/React) │
│ - Blockchain UI components │
│ - Web3 wallet hooks │
│ - Gas estimate displays │
└───────────────┬─────────────────────────┘
│
│ API Calls
│
┌───────────────▼─────────────────────────┐
│ Backend Container (FastAPI) │
│ - Blockchain services │
│ - Oracle system │
│ - Web3 integration │
│ - SQLite with blockchain fields │
└─────────────────────────────────────────┘
Blockchain Integration Flow
1. User clicks "Create Bet"
→ Frontend shows gas estimate
2. User confirms
→ useBlockchainBet hook prepares transaction
3. MetaMask prompts (would in production)
→ User signs transaction
4. Transaction sent to blockchain (would in production)
→ TransactionModal shows progress
5. Backend indexes event
→ blockchain_indexer.py syncs to database
6. UI updates
→ Blockchain badge appears on bet card
📦 What's Included
Smart Contract Documentation
- BetEscrow contract design (pseudocode)
- BetOracle contract design (pseudocode)
- Architecture diagrams
- Security model
Backend Services
- Web3 provider integration
- Event indexing system
- Oracle node implementation
- Consensus aggregator
- Network configuration
Frontend Integration
- MetaMask connection hooks
- Transaction management
- Gas estimation
- Blockchain status badges
- Transaction progress modals
UI Enhancements
- Bet cards with blockchain badges
- Create modal with gas estimates
- Detail page with transaction flow
- Wallet with on-chain section
- Header with wallet button
🎉 Success Criteria
Your Docker deployment is successful when:
✅ ./test-docker.sh completes with all checks passing
✅ Both containers show "Up" status
✅ Can login at http://localhost:5173
✅ API docs accessible at http://localhost:8000/docs
✅ Blockchain badges visible in UI
✅ Connect Wallet button in header
✅ Gas estimates show in modals
✅ No critical errors in logs
✅ All blockchain files present in containers
🚢 Next Steps
After successful Docker deployment:
- Test Full Workflow: Create, accept, and settle bets
- Explore API: Use Swagger UI at http://localhost:8000/docs
- Check Logs: Monitor application behavior
- Verify UI: Test all blockchain integration points
- Review Code: Examine blockchain service implementations
- Plan Production: Review BLOCKCHAIN_IMPLEMENTATION.md for deployment
📞 Support
If you encounter issues:
- Check
DOCKER_EXPECTED_RESULTS.mdfor expected output - Review
DOCKER_TESTING_GUIDE.mdfor detailed steps - Run
./test-docker.shfor automated diagnostics - Check logs:
docker compose logs -f - Try full rebuild:
docker compose down -v && docker compose build --no-cache
Ready to deploy? Run ./test-docker.sh now! 🚀