first implementation

This commit is contained in:
Wuesteon 2025-11-27 17:26:18 +01:00
parent 98efa6f6e8
commit 74dc6892ab
61 changed files with 30899 additions and 4934 deletions

246
QUICK_START_CICD.md Normal file
View file

@ -0,0 +1,246 @@
# Quick Start - CI/CD Pipeline
Get the CI/CD pipeline running in 30 minutes or less.
## Prerequisites Checklist
- [ ] GitHub repository access with admin permissions
- [ ] Docker Hub account (or alternative registry)
- [ ] Server with Ubuntu 20.04+ (for staging/production)
- [ ] SSH access to server
## Step 1: Configure GitHub Secrets (10 minutes)
### Essential Secrets (Minimum Required)
```bash
# Docker Registry (3 secrets)
DOCKER_USERNAME=your-username
DOCKER_PASSWORD=your-token
DOCKER_REGISTRY=your-username
# Staging Server (2 secrets)
STAGING_HOST=staging.example.com
STAGING_USER=deploy
# SSH Key (generate and add)
ssh-keygen -t ed25519 -C "github-actions" -f ~/.ssh/github-staging
# Copy private key to:
STAGING_SSH_KEY=<contents of ~/.ssh/github-staging>
```
**Add in GitHub**: Repository > Settings > Secrets and variables > Actions > New repository secret
## Step 2: Prepare Server (10 minutes)
### On Your Server
```bash
# 1. Create deploy user
sudo adduser deploy
sudo usermod -aG docker deploy
# 2. Install Docker
curl -fsSL https://get.docker.com | sh
sudo apt install docker-compose-plugin
# 3. Add SSH key
sudo su - deploy
mkdir -p ~/.ssh
echo "ssh-ed25519 YOUR_PUBLIC_KEY github-actions" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 4. Create directories
mkdir -p ~/manacore-staging/{logs,backups}
# 5. Test SSH from your machine
ssh deploy@staging.example.com
```
## Step 3: Test the Pipeline (10 minutes)
### Test PR Workflow
```bash
# 1. Create test branch
git checkout -b test/ci-pipeline
# 2. Make a change
echo "# CI/CD Test" >> README.md
git add README.md
git commit -m "test: verify CI pipeline"
# 3. Push and create PR
git push origin test/ci-pipeline
```
**Expected**: PR checks run in GitHub Actions tab
### Test Staging Deployment
```bash
# 1. Merge the PR
# GitHub UI > Merge pull request
# 2. Check GitHub Actions
# Watch "CI - Main Branch" workflow
# Watch "CD - Staging Deployment" workflow
# 3. Verify deployment
./scripts/deploy/health-check.sh staging
```
## Step 4: First Production Deploy (Optional)
```bash
# 1. Add production secrets (same as staging but with PRODUCTION_ prefix)
# 2. Go to Actions > CD - Production Deployment
# 3. Run workflow:
# - Service: all
# - Environment: production
# - Confirm: deploy
# 4. Approve when prompted
# 5. Monitor deployment
```
## Minimal Secrets Configuration
If you want to test quickly, here's the absolute minimum:
### For PR Testing Only (No Deployment)
```
# Just these 3 secrets to test PR workflow:
DOCKER_USERNAME=your-username
DOCKER_PASSWORD=your-token
DOCKER_REGISTRY=your-username
```
### For Staging Deployment
```
# Add these 5 more secrets:
STAGING_HOST=your-server-ip
STAGING_USER=deploy
STAGING_SSH_KEY=<private-key>
STAGING_SUPABASE_URL=https://xxx.supabase.co
STAGING_SUPABASE_ANON_KEY=<key>
```
## Common Commands
### Build and Deploy
```bash
# Build all images
./scripts/deploy/build-and-push.sh all latest
# Deploy to staging
./scripts/deploy/deploy-hetzner.sh staging all
# Check health
./scripts/deploy/health-check.sh staging
# Rollback if needed
./scripts/deploy/rollback.sh staging all
```
### Local Development
```bash
# Start local services
pnpm run docker:up
# View logs
pnpm run docker:logs
# Stop services
pnpm run docker:down
```
### Debugging
```bash
# Check GitHub Actions logs
# GitHub > Actions > Select workflow > View logs
# Check server
ssh deploy@staging.example.com
cd ~/manacore-staging
docker compose ps
docker compose logs -f
# Test SSH connection
ssh -i ~/.ssh/github-staging deploy@staging.example.com 'echo "Success"'
```
## Troubleshooting
### "Permission denied (publickey)"
```bash
# Check SSH key was added to server
ssh deploy@staging.example.com 'cat ~/.ssh/authorized_keys'
# Verify GitHub secret has correct private key
# Settings > Secrets > STAGING_SSH_KEY
```
### "Docker command not found"
```bash
# Install Docker on server
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker deploy
# Logout and login again
```
### "Health checks failing"
```bash
# Check service logs
ssh deploy@staging.example.com
cd ~/manacore-staging
docker compose logs --tail=100 service-name
# Check if service is running
docker compose ps
```
## Next Steps
Once basic pipeline works:
1. [ ] Add remaining secrets (database, Redis, Azure, etc.)
2. [ ] Configure production environment
3. [ ] Set up monitoring (UptimeRobot, etc.)
4. [ ] Read full documentation in `docs/`
5. [ ] Train team on deployment process
## Full Documentation
- **Quick Reference**: `CI_CD_README.md`
- **Setup Guide**: `docs/CI_CD_SETUP.md`
- **Deployment Guide**: `docs/DEPLOYMENT.md`
- **Docker Guide**: `docs/DOCKER_GUIDE.md`
- **Implementation Summary**: `CI_CD_IMPLEMENTATION_SUMMARY.md`
## Support
Stuck? Check:
1. GitHub Actions logs (most errors shown here)
2. Server logs: `ssh deploy@server 'cd ~/manacore-staging && docker compose logs'`
3. Documentation in `docs/` folder
4. Script output (all scripts have detailed error messages)
## Success Indicators
You'll know it's working when:
- ✅ PR checks pass on every pull request
- ✅ Docker images appear in your registry
- ✅ Services run on staging server
- ✅ Health checks return 200 OK
- ✅ `docker compose ps` shows all services as "Up"
---
**Estimated Time**: 30 minutes for basic setup
**Difficulty**: Beginner-friendly with step-by-step instructions
**Production Ready**: Yes, after completing all secrets