Files
grimlock/DEPLOYMENT.md

683 lines
13 KiB
Markdown

# GRIMLOCK DEPLOYMENT CHECKLIST
## PRE-DEPLOYMENT CHECKS
### ✅ Backend Verification
```bash
cd grimlock
# 1. Start backend
docker-compose up -d
# 2. Check health
curl http://localhost:8000/api/health
# Expected: {"status":"healthy","context_loaded":true,...}
# 3. Run tests
python test_api.py
# Expected: All tests pass
# 4. Check logs
docker-compose logs backend
# Expected: No errors, "Application startup complete"
```
### ✅ Frontend Verification
```bash
cd grimlock/frontend
# 1. Install dependencies
npm install
# 2. Build check
npm run build
# Expected: ✓ Compiled successfully
# 3. Start dev server
npm run dev
# Expected: Server running on http://localhost:3000
```
### ✅ Environment Variables
**Backend (.env)**
```env
# Required
ANTHROPIC_API_KEY=sk-ant-xxxxx # Your Claude API key
SECRET_KEY=xxxxx # Random secret for JWT
DATABASE_URL=postgresql://grimlock:grimlock@postgres/grimlock
# Optional (already configured)
REDIS_URL=redis://redis:6379
```
**Frontend (.env.local)**
```env
NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_WS_URL=http://localhost:8000
```
---
## FIRST-TIME SETUP
### Step 1: Clone Repository
```bash
git clone https://gittea.979labs.com/amitis55/grimlock.git
cd grimlock
```
### Step 2: Configure Backend
```bash
cd backend
# Copy example env
cp .env.example .env
# Edit .env and add:
# - Your ANTHROPIC_API_KEY
# - Generate SECRET_KEY: openssl rand -hex 32
nano .env
```
### Step 3: Start Services
```bash
cd .. # back to grimlock/
# Start backend with Docker
docker-compose up -d
# Wait 10 seconds for startup
sleep 10
# Verify backend
curl http://localhost:8000/api/health
```
### Step 4: Setup Frontend
```bash
cd frontend
# Install dependencies
npm install
# Create env file
cat > .env.local << EOF
NEXT_PUBLIC_API_URL=http://localhost:8000
NEXT_PUBLIC_WS_URL=http://localhost:8000
EOF
# Start frontend
npm run dev
```
### Step 5: First User
```bash
# Open browser: http://localhost:3000
# Click "Sign up"
# Fill in:
# Email: admin@vectorzulu.com
# Name: Admin
# Password: (secure password)
# Role: admin
# This creates first user and channel
```
---
## PRODUCTION DEPLOYMENT
### Option 1: Docker Compose (Recommended)
**1. Production Environment**
```bash
# Create production .env
cd grimlock/backend
cp .env.example .env.production
# Edit with production values:
# - DATABASE_URL (production PostgreSQL)
# - REDIS_URL (production Redis)
# - ANTHROPIC_API_KEY
# - Secure SECRET_KEY
```
**2. Frontend Build**
```bash
cd grimlock/frontend
# Production build
npm run build
# Test production build
npm start
```
**3. Deploy with Docker**
```bash
cd grimlock
# Use production env
export ENV_FILE=backend/.env.production
# Build and start
docker-compose -f docker-compose.prod.yml up -d
# Note: You'll need to create docker-compose.prod.yml
# with production settings
```
### Option 2: Separate Services
**Backend Deployment (e.g., AWS EC2, DigitalOcean)**
```bash
# On server
cd grimlock/backend
# Install Python dependencies
pip install -r requirements.txt
# Run with production server
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
# Or with gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
```
**Frontend Deployment (e.g., Vercel, Netlify)**
```bash
# Set environment variables in platform:
NEXT_PUBLIC_API_URL=https://api.yourdomain.com
NEXT_PUBLIC_WS_URL=https://api.yourdomain.com
# Deploy
npm run build
# Platform will auto-deploy from git
```
### Option 3: Kubernetes (Advanced)
**Coming soon:** Helm charts and K8s manifests
---
## DATABASE SETUP
### Local Development
```bash
# PostgreSQL is included in docker-compose
# No additional setup needed
# To access database:
docker-compose exec postgres psql -U grimlock -d grimlock
```
### Production Database
**Option A: Managed Database (Recommended)**
- AWS RDS (PostgreSQL)
- DigitalOcean Managed Database
- Google Cloud SQL
- Heroku Postgres
**Option B: Self-Hosted**
```bash
# Install PostgreSQL
sudo apt install postgresql postgresql-contrib
# Create database
sudo -u postgres psql
CREATE DATABASE grimlock;
CREATE USER grimlock WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE grimlock TO grimlock;
# Update DATABASE_URL in .env
DATABASE_URL=postgresql://grimlock:secure_password@localhost/grimlock
```
---
## TESTING DEPLOYMENT
### Automated Health Checks
```bash
#!/bin/bash
# health_check.sh
# Backend health
HEALTH=$(curl -s http://localhost:8000/api/health)
if echo "$HEALTH" | grep -q '"status":"healthy"'; then
echo "✓ Backend healthy"
else
echo "✗ Backend unhealthy"
exit 1
fi
# Frontend health
FRONTEND=$(curl -s http://localhost:3000)
if [ $? -eq 0 ]; then
echo "✓ Frontend accessible"
else
echo "✗ Frontend not accessible"
exit 1
fi
# WebSocket test
# (would need more complex test)
echo "✓ All services healthy"
```
### Manual Test Flow
1. **Registration**
- Go to /register
- Create account
- Should redirect to /
2. **Channel Creation**
- Click "+" next to Channels
- Create "general" channel
- Should open channel page
3. **Messaging**
- Send test message
- Should appear instantly
- Send "@grimlock hello"
- Should get AI response
4. **Real-Time**
- Open second browser/incognito
- Login as different user
- Send message from one
- Should appear in both instantly
5. **Direct Messages**
- Click on a user in sidebar
- Send DM
- Should work like channels
---
## MONITORING
### Backend Logs
```bash
# Docker logs
docker-compose logs -f backend
# Look for:
# - "Application startup complete"
# - "Connected to database"
# - "WebSocket server started"
# - No error tracebacks
```
### Frontend Logs
```bash
# Terminal output
npm run dev
# Browser console
# - No red errors
# - WebSocket connected
# - API calls succeeding
```
### Database Health
```bash
# Check connections
docker-compose exec postgres psql -U grimlock -d grimlock -c "SELECT count(*) FROM pg_stat_activity;"
# Check table sizes
docker-compose exec postgres psql -U grimlock -d grimlock -c "
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
"
```
---
## PERFORMANCE TUNING
### Backend
```python
# main.py - increase workers for production
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"main:app",
host="0.0.0.0",
port=8000,
workers=4, # Adjust based on CPU cores
reload=False # Disable in production
)
```
### Database
```sql
-- Add indexes for common queries
CREATE INDEX idx_messages_channel_id ON messages(channel_id);
CREATE INDEX idx_messages_created_at ON messages(created_at DESC);
CREATE INDEX idx_direct_messages_sender ON direct_messages(sender_id);
CREATE INDEX idx_direct_messages_recipient ON direct_messages(recipient_id);
```
### Frontend
```bash
# Production build is already optimized
npm run build
# Features:
# - Code splitting
# - Minification
# - Tree shaking
# - Image optimization
```
---
## BACKUP & RECOVERY
### Database Backup
```bash
# Automated daily backup
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="grimlock_backup_$DATE.sql"
docker-compose exec -T postgres pg_dump -U grimlock grimlock > "$BACKUP_FILE"
# Compress
gzip "$BACKUP_FILE"
# Upload to S3 (optional)
# aws s3 cp "$BACKUP_FILE.gz" s3://your-bucket/backups/
echo "Backup completed: $BACKUP_FILE.gz"
```
### Restore from Backup
```bash
# Stop services
docker-compose down
# Restore database
gunzip grimlock_backup_20260213.sql.gz
docker-compose exec -T postgres psql -U grimlock grimlock < grimlock_backup_20260213.sql
# Start services
docker-compose up -d
```
---
## SECURITY CHECKLIST
### ✅ Before Production
- [ ] Change default SECRET_KEY
- [ ] Use strong database password
- [ ] Enable HTTPS (SSL/TLS)
- [ ] Set CORS policies
- [ ] Rate limiting configured
- [ ] Input validation enabled
- [ ] SQL injection protection (using ORM)
- [ ] XSS protection (React auto-escapes)
- [ ] CSRF tokens (for forms)
- [ ] Regular security updates
### ✅ Access Control
- [ ] Database not publicly accessible
- [ ] Redis not publicly accessible
- [ ] Backend API behind firewall
- [ ] Only HTTPS endpoints exposed
- [ ] Admin routes protected
- [ ] File uploads size-limited
- [ ] File types validated
---
## TROUBLESHOOTING
### Backend Won't Start
```bash
# Check logs
docker-compose logs backend
# Common issues:
# 1. Database not ready
# Solution: Wait 10 seconds after docker-compose up
# 2. ANTHROPIC_API_KEY missing
# Solution: Add to .env file
# 3. Port 8000 in use
# Solution: Stop other service or change port
```
### Frontend Won't Build
```bash
# Clear cache and rebuild
rm -rf .next node_modules package-lock.json
npm install
npm run build
# Check for type errors
npm run build 2>&1 | grep "Type error"
```
### WebSocket Not Connecting
```bash
# Check backend WebSocket server
docker-compose logs backend | grep -i websocket
# Check frontend .env.local
cat frontend/.env.local
# Must have:
# NEXT_PUBLIC_WS_URL=http://localhost:8000
# In browser console, should see:
# "WebSocket connected"
```
### Database Connection Issues
```bash
# Test database connectivity
docker-compose exec postgres psql -U grimlock -d grimlock -c "SELECT 1;"
# Check DATABASE_URL in .env
# Should be: postgresql://grimlock:grimlock@postgres/grimlock
```
---
## SCALING CONSIDERATIONS
### Horizontal Scaling
**Backend:**
- Stateless design allows multiple instances
- Load balancer distributes requests
- Shared PostgreSQL + Redis
- WebSocket sticky sessions required
**Frontend:**
- Static files can be CDN-cached
- Multiple Next.js instances
- API calls to load balancer
### Database Scaling
**Read Replicas:**
- Master for writes
- Replicas for reads
- Update DATABASE_URL for reads
**Connection Pooling:**
- Use PgBouncer
- Limit connections per instance
- Monitor connection usage
### Caching
**Redis:**
- Cache user sessions
- Cache channel lists
- Cache recent messages
- Set TTL appropriately
---
## COST ESTIMATES
### Development (Current)
- Backend: Local Docker (free)
- Frontend: Local development (free)
- Database: Local PostgreSQL (free)
- AI: ~$0.003/query
- 100 queries/day = $9/month
### Production (Estimated)
**Small Team (10 users)**
- VPS (2 GB RAM): $12/month
- Database (managed): $15/month
- AI (1000 queries/day): $90/month
- **Total: ~$120/month**
**Medium Team (50 users)**
- VPS (4 GB RAM): $24/month
- Database (managed): $25/month
- AI (5000 queries/day): $450/month
- **Total: ~$500/month**
**Enterprise (500 users)**
- Kubernetes cluster: $200/month
- Database (HA): $100/month
- AI (50K queries/day): $4,500/month
- CDN: $50/month
- **Total: ~$5,000/month**
---
## SUCCESS METRICS
### Technical Health
- [ ] Backend uptime > 99.9%
- [ ] API response time < 200ms
- [ ] WebSocket latency < 50ms
- [ ] Database queries < 100ms
- [ ] Zero critical errors
### User Adoption
- [ ] 10+ daily active users
- [ ] 100+ messages per day
- [ ] 10+ channels created
- [ ] 50+ @grimlock queries/day
- [ ] Users prefer over Slack
### Business Impact
- [ ] 5+ hours saved per week
- [ ] Reduced context switching
- [ ] Faster decision making
- [ ] Better knowledge retention
- [ ] Team satisfaction improved
---
## NEXT STEPS AFTER DEPLOYMENT
1. **Week 1: Internal Alpha**
- Deploy to staging
- Team of 5 tests
- Gather feedback
- Fix critical bugs
2. **Week 2: Internal Beta**
- Deploy to production
- All Vector Zulu employees
- Monitor performance
- Iterate on UX
3. **Week 3-4: Optimization**
- Add missing features
- Improve performance
- Polish UI/UX
- Write user docs
4. **Month 2: Scale**
- Handle more users
- Add integrations
- External beta
- Prepare for launch
---
## SUPPORT & MAINTENANCE
### Daily
- Monitor logs for errors
- Check system health
- Review AI usage
- Respond to user issues
### Weekly
- Database backup verification
- Security updates
- Performance review
- User feedback review
### Monthly
- Dependency updates
- Feature planning
- Cost review
- Capacity planning
---
## CONTACT & RESOURCES
**Repository:**
https://gittea.979labs.com/amitis55/grimlock
**Documentation:**
- FINAL.md - Backend API
- FRONTEND.md - Frontend deployment
- ARCHITECTURE.md - System design
- This file - Deployment guide
**Questions?**
Create an issue in the repository or contact the dev team.
---
# 🚀 READY TO DEPLOY
You now have:
- ✅ Complete backend platform
- ✅ Complete frontend application
- ✅ Deployment documentation
- ✅ Testing procedures
- ✅ Monitoring setup
- ✅ Troubleshooting guide
**Next command:**
```bash
cd grimlock && docker-compose up -d && cd frontend && npm run dev
```
**Then open:** http://localhost:3000
**Welcome to Grimlock.**