7.2 KiB
GitHub Actions → Docker Registry → Portainer Deployment
Automatisch Docker images bouwen via GitHub en deployen op Portainer.
📋 Setup Stappen
1. GitHub Repository voorbereiding
# Push je code naar GitHub (met .github/workflows/docker-build.yml)
git add .
git commit -m "Add Docker build workflow"
git push origin main
Controleer: https://github.com/YOUR_USERNAME/YOUR_REPO/actions
2. GitHub Container Registry inschakelen
✅ Automatisch als je private repo hebt. Voor public repos:
- Ga naar GitHub repo → Settings → Packages and registries
- Of gewoon eerste push doen → workflow doet dit automatisch
3. GitHub Token configureren (optioneel)
Standaard gebruikt GitHub Actions je GITHUB_TOKEN (automatisch).
Voor meer controle, maak Personal Access Token (PAT):
- GitHub → Settings → Developer settings → Personal access tokens
- New token → Scopes:
write:packages,read:packages - Token kopieren
4. Docker Login op Portainer Server
# Op je remote server waar Portainer draait
docker login ghcr.io
# Username: je GitHub username
# Password: GITHUB_TOKEN of PAT token
🚀 Image Bouwen & Pushen
Automatisch (via GitHub Actions)
-
Je code pushen naar main/develop:
git push origin main -
GitHub Actions bouwt automatisch:
- ✅ Checkout code
- ✅ Build Docker images
- ✅ Push naar ghcr.io
- ✅ Tags:
latest, branch name, git SHA
-
Bekijk workflow:
- GitHub → Actions tab → Zie voortgang
- Logs klikken voor debug info
Images checken in registry
# List available images/tags
docker pull ghcr.io/YOUR_USERNAME/YOUR_REPO/auth_api:latest --dry-run
# of via GitHub CLI:
gh api user/packages --jq '.[] | select(.package_type=="container")'
🐳 Portainer Deployment
Methode 1: Via Docker Compose (aanbevolen)
Op je Portainer server:
-
Clone repo of kopie bestand:
git clone https://github.com/YOUR_USERNAME/YOUR_REPO.git cd YOUR_REPO -
Login bij registry:
docker login ghcr.io # Credentials: GitHub username + token -
Start via docker-compose:
docker-compose -f docker-compose.portainer.yml up -d
Methode 2: Via Portainer UI
- Portainer Web Dashboard → Stacks
- "Add Stack" → "Compose"
- Paste inhoud van
docker-compose.portainer.yml - Voeg environment vars toe:
POSTGRES_PASSWORD=...JWT_SECRET=...
- Deploy
Methode 3: Private Registry in Portainer
-
Portainer → Registries → Add Registry
- Provider: GitHub Container Registry
- URL:
ghcr.io - Username: je GitHub username
- Password: GITHUB_TOKEN
-
In docker-compose, images gebruiken:
image: ghcr.io/YOUR_USERNAME/YOUR_REPO/auth_api:latest
🔄 Workflow Overzicht
┌─────────────────┐
│ Push to GitHub │
└────────┬────────┘
│
▼
┌──────────────────────────────┐
│ GitHub Actions Workflow: │
│ - Checkout │
│ - Build images │
│ - Push to ghcr.io │
└────────┬─────────────────────┘
│
▼
┌──────────────────────────────┐
│ ghcr.io Registry │
│ - auth_api:latest │
│ - employee_api:latest │
│ - transit_api:latest │
└────────┬─────────────────────┘
│
▼
┌──────────────────────────────┐
│ Portainer (Remote Server) │
│ docker-compose pull & up │
└──────────────────────────────┘
📝 Image Tags Automatisering
GitHub Actions genereert automatisch tags:
| Event | Tag |
|---|---|
| Push naar main | latest, main-{SHA} |
| Push naar develop | develop-{SHA} |
| Release/Tag | v1.0.0, 1.0, 1 |
Voorbeeld:
ghcr.io/sven/transit_project/auth_api:latest
ghcr.io/sven/transit_project/auth_api:main-a1b2c3d
ghcr.io/sven/transit_project/auth_api:v1.0.0
⚙️ Configuratie
docker-compose.portainer.yml aanpassen
-
Vervang dit:
ghcr.io/YOUR_USERNAME/YOUR_REPO/auth_api:latest -
Met jouw gegevens:
ghcr.io/sven/transit_project/auth_api:latest -
Voor private image, pull policy toevoegen:
auth_api: image: ghcr.io/sven/transit_project/auth_api:latest pull_policy: always
Environment variabelen
Maak .env file op Portainer server:
POSTGRES_DB=transit_db
POSTGRES_USER=transit_user
POSTGRES_PASSWORD=super_secure_password
JWT_SECRET=your_secret_key_here
Dan starten:
docker-compose --env-file .env -f docker-compose.portainer.yml up -d
🔐 Veiligheid
GitHub Token limieten
- Standaard
GITHUB_TOKENwerkt goed - Verloopt na 60 minuten (genoeg voor build)
Private Registry
Als je Portainer server geen internet heeft:
- Use Portainer Registry Mirror
- Of Private Registry (Harbor, Nexus)
Credentials in Portainer
Nooit credentials in docker-compose zetten!
✅ Juist: Environment file
docker-compose --env-file .env up -d
❌ Fout:
environment:
POSTGRES_PASSWORD: password123 # DON'T DO THIS
🐛 Troubleshooting
"Image not found"
# Check of image in registry staat
docker pull ghcr.io/USERNAME/REPO/auth_api:latest
# Kijk in GitHub Actions logs
# Check je IMAGE naam in workflow
"Unauthorized: authentication required"
# Login opnieuw
docker login ghcr.io
# Check token permissies (scope: write:packages)
"Connection refused" naar database
# Check Docker network
docker network ls
docker network inspect YOUR_NETWORK
# Check database running
docker ps | grep postgres
Logs bekijken
# Via docker
docker logs auth_api
# Via Portainer: Containers → Select → Logs
📚 Nuttige Commando's
# Check beschikbare images/tags
curl -s -H "Authorization: Bearer TOKEN" \
https://ghcr.io/v2/USERNAME/REPO/auth_api/tags/list | jq
# Manual image build (als je workflow debug)
docker build -t ghcr.io/USERNAME/REPO/auth_api:test ./auth_api
docker push ghcr.io/USERNAME/REPO/auth_api:test
# Pull latest images
docker-compose -f docker-compose.portainer.yml pull
# Recreate containers (na pull)
docker-compose -f docker-compose.portainer.yml up -d --force-recreate
🎯 Samenvatting
| Stap | Wat | Waar |
|---|---|---|
| 1 | Code pushen | GitHub |
| 2 | Images bouwen | GitHub Actions |
| 3 | Images pushen | ghcr.io registry |
| 4 | Images pullen | Portainer server |
| 5 | Containers starten | Docker Compose |
Voordelen:
- ✅ Volledig geautomatiseerd
- ✅ Versiebeheer via git tags
- ✅ Makkelijk rollback
- ✅ Geen lokale builds nodig
- ✅ CI/CD best practices