Add Docker build workflow and mobile application
This commit is contained in:
@@ -0,0 +1,315 @@
|
||||
# GitHub Actions → Docker Registry → Portainer Deployment
|
||||
|
||||
Automatisch Docker images bouwen via GitHub en deployen op Portainer.
|
||||
|
||||
## 📋 Setup Stappen
|
||||
|
||||
### 1. GitHub Repository voorbereiding
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
1. Ga naar GitHub repo → **Settings → Packages and registries**
|
||||
2. 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):
|
||||
1. GitHub → **Settings → Developer settings → Personal access tokens**
|
||||
2. New token → Scopes: `write:packages`, `read:packages`
|
||||
3. Token kopieren
|
||||
|
||||
### 4. Docker Login op Portainer Server
|
||||
|
||||
```bash
|
||||
# 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)
|
||||
|
||||
1. **Je code pushen naar main/develop:**
|
||||
```bash
|
||||
git push origin main
|
||||
```
|
||||
|
||||
2. **GitHub Actions bouwt automatisch:**
|
||||
- ✅ Checkout code
|
||||
- ✅ Build Docker images
|
||||
- ✅ Push naar ghcr.io
|
||||
- ✅ Tags: `latest`, branch name, git SHA
|
||||
|
||||
3. **Bekijk workflow:**
|
||||
- GitHub → **Actions tab** → Zie voortgang
|
||||
- Logs klikken voor debug info
|
||||
|
||||
### Images checken in registry
|
||||
|
||||
```bash
|
||||
# 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:**
|
||||
|
||||
1. **Clone repo of kopie bestand:**
|
||||
```bash
|
||||
git clone https://github.com/YOUR_USERNAME/YOUR_REPO.git
|
||||
cd YOUR_REPO
|
||||
```
|
||||
|
||||
2. **Login bij registry:**
|
||||
```bash
|
||||
docker login ghcr.io
|
||||
# Credentials: GitHub username + token
|
||||
```
|
||||
|
||||
3. **Start via docker-compose:**
|
||||
```bash
|
||||
docker-compose -f docker-compose.portainer.yml up -d
|
||||
```
|
||||
|
||||
### Methode 2: Via Portainer UI
|
||||
|
||||
1. **Portainer Web Dashboard → Stacks**
|
||||
2. **"Add Stack" → "Compose"**
|
||||
3. **Paste inhoud van `docker-compose.portainer.yml`**
|
||||
4. **Voeg environment vars toe:**
|
||||
- `POSTGRES_PASSWORD=...`
|
||||
- `JWT_SECRET=...`
|
||||
5. **Deploy**
|
||||
|
||||
### Methode 3: Private Registry in Portainer
|
||||
|
||||
1. **Portainer → Registries → Add Registry**
|
||||
- **Provider:** GitHub Container Registry
|
||||
- **URL:** `ghcr.io`
|
||||
- **Username:** je GitHub username
|
||||
- **Password:** GITHUB_TOKEN
|
||||
|
||||
2. **In docker-compose, images gebruiken:**
|
||||
```yaml
|
||||
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
|
||||
|
||||
1. **Vervang dit:**
|
||||
```
|
||||
ghcr.io/YOUR_USERNAME/YOUR_REPO/auth_api:latest
|
||||
```
|
||||
|
||||
2. **Met jouw gegevens:**
|
||||
```
|
||||
ghcr.io/sven/transit_project/auth_api:latest
|
||||
```
|
||||
|
||||
3. **Voor private image, pull policy toevoegen:**
|
||||
```yaml
|
||||
auth_api:
|
||||
image: ghcr.io/sven/transit_project/auth_api:latest
|
||||
pull_policy: always
|
||||
```
|
||||
|
||||
### Environment variabelen
|
||||
|
||||
**Maak .env file op Portainer server:**
|
||||
```bash
|
||||
POSTGRES_DB=transit_db
|
||||
POSTGRES_USER=transit_user
|
||||
POSTGRES_PASSWORD=super_secure_password
|
||||
JWT_SECRET=your_secret_key_here
|
||||
```
|
||||
|
||||
**Dan starten:**
|
||||
```bash
|
||||
docker-compose --env-file .env -f docker-compose.portainer.yml up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Veiligheid
|
||||
|
||||
### GitHub Token limieten
|
||||
- Standaard `GITHUB_TOKEN` werkt 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
|
||||
```bash
|
||||
docker-compose --env-file .env up -d
|
||||
```
|
||||
|
||||
❌ Fout:
|
||||
```yaml
|
||||
environment:
|
||||
POSTGRES_PASSWORD: password123 # DON'T DO THIS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### "Image not found"
|
||||
```bash
|
||||
# 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"
|
||||
```bash
|
||||
# Login opnieuw
|
||||
docker login ghcr.io
|
||||
|
||||
# Check token permissies (scope: write:packages)
|
||||
```
|
||||
|
||||
### "Connection refused" naar database
|
||||
```bash
|
||||
# Check Docker network
|
||||
docker network ls
|
||||
docker network inspect YOUR_NETWORK
|
||||
|
||||
# Check database running
|
||||
docker ps | grep postgres
|
||||
```
|
||||
|
||||
### Logs bekijken
|
||||
```bash
|
||||
# Via docker
|
||||
docker logs auth_api
|
||||
|
||||
# Via Portainer: Containers → Select → Logs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Nuttige Commando's
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user