388 lines
7.2 KiB
Markdown
388 lines
7.2 KiB
Markdown
# ASF TestArena - Deployment Guide
|
|
|
|
## ✅ Network Configuration Complete
|
|
|
|
The docker-compose.yml has been configured with:
|
|
- **Internal Network:** `app-network` (for web ↔ database communication)
|
|
- **External Network:** `caddy_network` (for Caddy ↔ web communication)
|
|
|
|
## 🚀 Quick Deployment
|
|
|
|
### Option 1: Automated Deployment (Recommended)
|
|
|
|
**Windows (PowerShell):**
|
|
```powershell
|
|
.\deploy.ps1
|
|
```
|
|
|
|
**Windows (Command Prompt):**
|
|
```cmd
|
|
start.bat
|
|
```
|
|
|
|
**Linux/Mac:**
|
|
```bash
|
|
chmod +x deploy.sh
|
|
./deploy.sh
|
|
```
|
|
|
|
The deployment script will:
|
|
1. ✅ Check Docker and Docker Compose are installed
|
|
2. ✅ Verify Docker daemon is running
|
|
3. ✅ Create `.env` file if missing
|
|
4. ✅ Check/create `caddy_network` if needed
|
|
5. ✅ Stop existing containers
|
|
6. ✅ Build and start new containers
|
|
7. ✅ Verify all services are running
|
|
8. ✅ Display access information
|
|
|
|
### Option 2: Manual Deployment
|
|
|
|
```bash
|
|
# 1. Create .env file (optional)
|
|
cp .env.example .env
|
|
# Edit .env with your values
|
|
|
|
# 2. Ensure Caddy network exists
|
|
docker network create caddy_network
|
|
|
|
# 3. Build and start
|
|
docker-compose up -d --build
|
|
|
|
# 4. Check status
|
|
docker-compose ps
|
|
docker-compose logs -f
|
|
```
|
|
|
|
## 🔧 Configuration
|
|
|
|
### Environment Variables
|
|
|
|
The `.env` file (optional) can override these defaults:
|
|
|
|
```env
|
|
DATABASE_URL=postgresql://testarena_user:YOUR_PASSWORD@db:5432/testarena
|
|
SECRET_KEY=YOUR_SECURE_SECRET_KEY
|
|
FLASK_ENV=production
|
|
```
|
|
|
|
**Generate a secure SECRET_KEY:**
|
|
|
|
**Python:**
|
|
```bash
|
|
python -c "import secrets; print(secrets.token_hex(32))"
|
|
```
|
|
|
|
**PowerShell:**
|
|
```powershell
|
|
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 64 | % {[char]$_})
|
|
```
|
|
|
|
**Linux:**
|
|
```bash
|
|
openssl rand -hex 32
|
|
```
|
|
|
|
### Database Password
|
|
|
|
Update in `docker-compose.yml`:
|
|
```yaml
|
|
environment:
|
|
POSTGRES_PASSWORD: YOUR_SECURE_PASSWORD
|
|
DATABASE_URL: postgresql://testarena_user:YOUR_SECURE_PASSWORD@db:5432/testarena
|
|
```
|
|
|
|
## 🌐 Caddy Configuration
|
|
|
|
Add this to your Caddyfile:
|
|
|
|
```
|
|
testarena.nabd-co.com {
|
|
reverse_proxy testarena_web:5000
|
|
|
|
encode gzip
|
|
|
|
header {
|
|
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
|
|
X-Frame-Options "SAMEORIGIN"
|
|
X-Content-Type-Options "nosniff"
|
|
X-XSS-Protection "1; mode=block"
|
|
}
|
|
|
|
log {
|
|
output file /var/log/caddy/testarena.log
|
|
format json
|
|
}
|
|
}
|
|
```
|
|
|
|
Reload Caddy:
|
|
```bash
|
|
docker exec caddy_container caddy reload --config /etc/caddy/Caddyfile
|
|
```
|
|
|
|
## ✅ Verification
|
|
|
|
### 1. Check Containers
|
|
```bash
|
|
docker-compose ps
|
|
```
|
|
|
|
Expected output:
|
|
```
|
|
Name Command State Ports
|
|
----------------------------------------------------------
|
|
testarena_db docker-entrypoint.sh postgres Up 5432/tcp
|
|
testarena_web gunicorn --bind 0.0.0.0:5000... Up 5000/tcp
|
|
```
|
|
|
|
### 2. Check Logs
|
|
```bash
|
|
# All logs
|
|
docker-compose logs
|
|
|
|
# Follow logs
|
|
docker-compose logs -f
|
|
|
|
# Specific service
|
|
docker-compose logs web
|
|
docker-compose logs db
|
|
```
|
|
|
|
### 3. Check Networks
|
|
```bash
|
|
# Verify web container is on both networks
|
|
docker inspect testarena_web | grep -A 10 Networks
|
|
```
|
|
|
|
Should show both `app-network` and `caddy_network`.
|
|
|
|
### 4. Test Access
|
|
|
|
**Local:**
|
|
```bash
|
|
curl http://localhost:5000
|
|
```
|
|
|
|
**Domain:**
|
|
```bash
|
|
curl https://testarena.nabd-co.com
|
|
```
|
|
|
|
### 5. Test Login
|
|
|
|
1. Open browser: https://testarena.nabd-co.com
|
|
2. Login with:
|
|
- Username: `admin`
|
|
- Password: `admin123`
|
|
3. **Change password immediately!**
|
|
|
|
## 🔐 Post-Deployment Security
|
|
|
|
### 1. Change Admin Password
|
|
1. Login as admin
|
|
2. Go to Admin Dashboard
|
|
3. Reset admin password
|
|
|
|
### 2. Update Secrets
|
|
```bash
|
|
# Edit docker-compose.yml
|
|
nano docker-compose.yml
|
|
|
|
# Update:
|
|
# - SECRET_KEY
|
|
# - POSTGRES_PASSWORD
|
|
# - DATABASE_URL password
|
|
|
|
# Restart
|
|
docker-compose down
|
|
docker-compose up -d
|
|
```
|
|
|
|
### 3. Create Users
|
|
1. Login as admin
|
|
2. Go to Admin Dashboard
|
|
3. Create user accounts for your team
|
|
|
|
## 📊 Monitoring
|
|
|
|
### View Logs
|
|
```bash
|
|
# Real-time logs
|
|
docker-compose logs -f
|
|
|
|
# Last 100 lines
|
|
docker-compose logs --tail=100
|
|
|
|
# Specific service
|
|
docker-compose logs -f web
|
|
```
|
|
|
|
### Check Resource Usage
|
|
```bash
|
|
docker stats testarena_web testarena_db
|
|
```
|
|
|
|
### Database Backup
|
|
```bash
|
|
# Create backup
|
|
docker exec testarena_db pg_dump -U testarena_user testarena > backup_$(date +%Y%m%d).sql
|
|
|
|
# Restore backup
|
|
docker exec -i testarena_db psql -U testarena_user testarena < backup_20241128.sql
|
|
```
|
|
|
|
## 🛠️ Maintenance
|
|
|
|
### Restart Services
|
|
```bash
|
|
# Restart all
|
|
docker-compose restart
|
|
|
|
# Restart specific service
|
|
docker-compose restart web
|
|
docker-compose restart db
|
|
```
|
|
|
|
### Update Application
|
|
```bash
|
|
# Pull latest changes
|
|
git pull
|
|
|
|
# Rebuild and restart
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
### Stop Services
|
|
```bash
|
|
# Stop containers (keep data)
|
|
docker-compose down
|
|
|
|
# Stop and remove volumes (DELETE DATA!)
|
|
docker-compose down -v
|
|
```
|
|
|
|
### View Container Shell
|
|
```bash
|
|
# Web container
|
|
docker exec -it testarena_web bash
|
|
|
|
# Database container
|
|
docker exec -it testarena_db psql -U testarena_user testarena
|
|
```
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Container Won't Start
|
|
|
|
**Check logs:**
|
|
```bash
|
|
docker-compose logs web
|
|
```
|
|
|
|
**Common issues:**
|
|
- Database not ready: Wait 30 seconds
|
|
- Port conflict: Check if port 5000 is in use
|
|
- Network issue: Verify `caddy_network` exists
|
|
|
|
### Database Connection Error
|
|
|
|
**Check DATABASE_URL:**
|
|
```bash
|
|
docker-compose exec web env | grep DATABASE_URL
|
|
```
|
|
|
|
**Test connection:**
|
|
```bash
|
|
docker-compose exec web python -c "from app import create_app, db; app = create_app(); app.app_context().push(); print('DB OK')"
|
|
```
|
|
|
|
### Can't Access via Domain
|
|
|
|
**Check Caddy:**
|
|
```bash
|
|
docker logs caddy_container_name
|
|
```
|
|
|
|
**Check network:**
|
|
```bash
|
|
docker network inspect caddy_network
|
|
```
|
|
|
|
Should show `testarena_web` in containers list.
|
|
|
|
**Check DNS:**
|
|
```bash
|
|
nslookup testarena.nabd-co.com
|
|
```
|
|
|
|
### 502 Bad Gateway
|
|
|
|
**Wait for initialization:**
|
|
```bash
|
|
# Web container may still be starting
|
|
sleep 10
|
|
curl http://localhost:5000
|
|
```
|
|
|
|
**Check web container:**
|
|
```bash
|
|
docker-compose logs web
|
|
docker exec testarena_web ps aux | grep gunicorn
|
|
```
|
|
|
|
## 📋 Deployment Checklist
|
|
|
|
- [ ] Docker and Docker Compose installed
|
|
- [ ] Docker daemon running
|
|
- [ ] Caddy network exists (`docker network ls`)
|
|
- [ ] `.env` file configured (optional)
|
|
- [ ] Secrets updated in docker-compose.yml
|
|
- [ ] Caddyfile configured
|
|
- [ ] DNS pointing to server
|
|
- [ ] Deployment script executed
|
|
- [ ] Containers running (`docker-compose ps`)
|
|
- [ ] No errors in logs (`docker-compose logs`)
|
|
- [ ] Login page accessible
|
|
- [ ] Admin login works
|
|
- [ ] Admin password changed
|
|
- [ ] Test users created
|
|
- [ ] All features tested
|
|
|
|
## 🎉 Success!
|
|
|
|
If all checks pass, your ASF TestArena is now running!
|
|
|
|
**Access URLs:**
|
|
- Local: http://localhost:5000
|
|
- Domain: https://testarena.nabd-co.com
|
|
|
|
**Default Credentials:**
|
|
- Username: `admin`
|
|
- Password: `admin123`
|
|
|
|
**⚠️ CHANGE THE PASSWORD IMMEDIATELY!**
|
|
|
|
## 📞 Need Help?
|
|
|
|
- Check logs: `docker-compose logs -f`
|
|
- Review: [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
|
|
- Read: [START_HERE.md](START_HERE.md)
|
|
- Index: [INDEX.md](INDEX.md)
|
|
|
|
## 🚀 Next Steps
|
|
|
|
1. Change admin password
|
|
2. Create user accounts
|
|
3. Test job submission workflow
|
|
4. Set up automated backups
|
|
5. Configure monitoring
|
|
6. Plan Phase 2 implementation
|
|
|
|
---
|
|
|
|
**Deployment Date:** _______________
|
|
**Deployed By:** _______________
|
|
**Server:** _______________
|
|
**Domain:** testarena.nabd-co.com
|