mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 22:01:09 +02:00
Applied formatting to 1487+ files using pnpm format:write - TypeScript/JavaScript files - Svelte components - Astro pages - JSON configs - Markdown docs 13 files still need manual review (Astro JSX comments)
5.4 KiB
5.4 KiB
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)
# 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
# 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
# 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
# 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)
# 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
# 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
# Start local services
pnpm run docker:up
# View logs
pnpm run docker:logs
# Stop services
pnpm run docker:down
Debugging
# 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)"
# 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"
# Install Docker on server
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker deploy
# Logout and login again
"Health checks failing"
# 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:
- Add remaining secrets (database, Redis, Azure, etc.)
- Configure production environment
- Set up monitoring (UptimeRobot, etc.)
- Read full documentation in
docs/ - 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:
- GitHub Actions logs (most errors shown here)
- Server logs:
ssh deploy@server 'cd ~/manacore-staging && docker compose logs' - Documentation in
docs/folder - 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 psshows 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