updated the branches for the on push etc.

This commit is contained in:
2026-01-08 19:32:13 +01:00
parent 3b2c94c699
commit d0c3049a90
3 changed files with 446 additions and 21 deletions

195
STAGING_SETUP.md Normal file
View File

@@ -0,0 +1,195 @@
# 🚀 Staging Environment Setup
## Overview
You now have **two separate Docker stacks**:
1. **Staging** - Deploys automatically on `dev` or `main` branch
- Port: `3001`
- Container: `portfolio-app-staging`
- Database: `portfolio_staging_db` (port 5433)
- Redis: `portfolio-redis-staging` (port 6380)
- URL: `https://staging.dk0.dev` (or `http://localhost:3001`)
2. **Production** - Deploys automatically on `production` branch
- Port: `3000`
- Container: `portfolio-app`
- Database: `portfolio_db` (port 5432)
- Redis: `portfolio-redis` (port 6379)
- URL: `https://dk0.dev`
## How It Works
### Automatic Staging Deployment
When you push to `dev` or `main` branch:
1. ✅ Tests run
2. ✅ Docker image is built and tagged as `staging`
3. ✅ Staging stack deploys automatically
4. ✅ Available on port 3001
### Automatic Production Deployment
When you merge to `production` branch:
1. ✅ Tests run
2. ✅ Docker image is built and tagged as `production`
3.**Zero-downtime deployment** (blue-green)
4. ✅ Health checks before switching
5. ✅ Rollback if health check fails
6. ✅ Available on port 3000
## Safety Features
### Production Deployment Safety
-**Zero-downtime**: New container starts before old one stops
-**Health checks**: Verifies new container is healthy before switching
-**Automatic rollback**: If health check fails, old container stays running
-**Separate networks**: Staging and production are completely isolated
-**Different ports**: No port conflicts
-**Separate databases**: Staging data doesn't affect production
### Staging Deployment
-**Non-blocking**: Staging can fail without affecting production
-**Isolated**: Completely separate from production
-**Safe to test**: Break staging without breaking production
## Ports Used
| Service | Staging | Production |
|---------|---------|------------|
| App | 3001 | 3000 |
| PostgreSQL | 5433 | 5432 |
| Redis | 6380 | 6379 |
## Workflow
### Development Flow
```bash
# 1. Work on dev branch
git checkout dev
# ... make changes ...
# 2. Push to dev (triggers staging deployment)
git push origin dev
# → Staging deploys automatically on port 3001
# 3. Test staging
curl http://localhost:3001/api/health
# 4. Merge to main (also triggers staging)
git checkout main
git merge dev
git push origin main
# → Staging updates automatically
# 5. When ready, merge to production
git checkout production
git merge main
git push origin production
# → Production deploys with zero-downtime
```
## Manual Commands
### Staging
```bash
# Start staging
docker compose -f docker-compose.staging.yml up -d
# Stop staging
docker compose -f docker-compose.staging.yml down
# View staging logs
docker compose -f docker-compose.staging.yml logs -f
# Check staging health
curl http://localhost:3001/api/health
```
### Production
```bash
# Start production
docker compose -f docker-compose.production.yml up -d
# Stop production
docker compose -f docker-compose.production.yml down
# View production logs
docker compose -f docker-compose.production.yml logs -f
# Check production health
curl http://localhost:3000/api/health
```
## Environment Variables
### Staging
- `NODE_ENV=staging`
- `NEXT_PUBLIC_BASE_URL=https://staging.dk0.dev`
- `LOG_LEVEL=debug` (more verbose logging)
### Production
- `NODE_ENV=production`
- `NEXT_PUBLIC_BASE_URL=https://dk0.dev`
- `LOG_LEVEL=info`
## Database Separation
- **Staging DB**: `portfolio_staging_db` (separate volume)
- **Production DB**: `portfolio_db` (separate volume)
- **No conflicts**: Staging can be reset without affecting production
## Monitoring
### Check Both Environments
```bash
# Staging
curl http://localhost:3001/api/health
# Production
curl http://localhost:3000/api/health
```
### View Container Status
```bash
# All containers
docker ps
# Staging only
docker ps | grep staging
# Production only
docker ps | grep -v staging
```
## Troubleshooting
### Staging Not Deploying
1. Check GitHub Actions workflow
2. Verify branch is `dev` or `main`
3. Check Docker logs: `docker compose -f docker-compose.staging.yml logs`
### Production Deployment Issues
1. Check health endpoint before deployment
2. Verify old container is running
3. Check logs: `docker compose -f docker-compose.production.yml logs`
4. Manual rollback: Restart old container if needed
### Port Conflicts
- Staging uses 3001, 5433, 6380
- Production uses 3000, 5432, 6379
- If conflicts occur, check what's using the ports:
```bash
lsof -i :3001
lsof -i :3000
```
## Benefits
✅ **Safe testing**: Test on staging without risk
✅ **Zero-downtime**: Production updates don't interrupt service
✅ **Isolation**: Staging and production are completely separate
✅ **Automatic**: Deploys happen automatically on push
✅ **Rollback**: Automatic rollback if deployment fails
---
**You're all set!** Push to `dev`/`main` for staging, merge to `production` for production deployment! 🚀