Initial
This commit is contained in:
commit
54f7f59fd5
4 changed files with 183 additions and 0 deletions
9
Dockerfile
Normal file
9
Dockerfile
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Beispiel Dockerfile für eine einfache Web-App
|
||||||
|
# Ersetze dies mit deinem eigenen Dockerfile
|
||||||
|
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
# Statische Dateien kopieren
|
||||||
|
COPY public/ /usr/share/nginx/html/
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
112
README.md
Normal file
112
README.md
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
# Example App - Forgejo CI/CD Template
|
||||||
|
|
||||||
|
Diese Vorlage zeigt, wie du eine Anwendung mit Forgejo Actions automatisch auf deinen Server deployst.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### 1. Neues Repository in Forgejo erstellen
|
||||||
|
|
||||||
|
Gehe zu https://git.magholder.click und erstelle ein neues Repository.
|
||||||
|
|
||||||
|
### 2. Diese Dateien kopieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# In dein Projektverzeichnis kopieren
|
||||||
|
cp -r templates/example-app/* mein-projekt/
|
||||||
|
cd mein-projekt
|
||||||
|
git init
|
||||||
|
git remote add origin git@git.magholder.click:USERNAME/mein-projekt.git
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Repository-Variablen setzen
|
||||||
|
|
||||||
|
In Forgejo: **Repository Settings → Actions → Variables**
|
||||||
|
|
||||||
|
| Variable | Wert | Beschreibung |
|
||||||
|
|----------|------|--------------|
|
||||||
|
| `APP_NAME` | `mein-projekt` | Name der App (für Container und Pfade) |
|
||||||
|
| `DOMAIN` | `mein-projekt.magholder.click` | Domain für Traefik |
|
||||||
|
|
||||||
|
### 4. SSH-Key als Secret hinzufügen
|
||||||
|
|
||||||
|
In Forgejo: **Repository Settings → Actions → Secrets**
|
||||||
|
|
||||||
|
| Secret | Wert |
|
||||||
|
|--------|------|
|
||||||
|
| `SSH_PRIVATE_KEY` | Inhalt deines SSH Private Keys |
|
||||||
|
|
||||||
|
**SSH-Key generieren (falls nicht vorhanden):**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh-keygen -t ed25519 -f ~/.ssh/forgejo-deploy -N ""
|
||||||
|
|
||||||
|
# Public Key auf Server kopieren
|
||||||
|
ssh-copy-id -i ~/.ssh/forgejo-deploy.pub root@194.163.164.113
|
||||||
|
|
||||||
|
# Private Key als Secret verwenden
|
||||||
|
cat ~/.ssh/forgejo-deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Pushen und deployen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial commit"
|
||||||
|
git push -u origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Action wird automatisch gestartet und deployt deine App!
|
||||||
|
|
||||||
|
## Anpassen
|
||||||
|
|
||||||
|
### Eigenes Dockerfile
|
||||||
|
|
||||||
|
Ersetze das `Dockerfile` mit deinem eigenen Build-Prozess.
|
||||||
|
|
||||||
|
### Andere Ports
|
||||||
|
|
||||||
|
Wenn deine App nicht auf Port 80 läuft, füge in `docker-compose.yml` hinzu:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
- "traefik.http.services.${APP_NAME}.loadbalancer.server.port=3000"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Umgebungsvariablen
|
||||||
|
|
||||||
|
Füge in `docker-compose.yml` hinzu:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
environment:
|
||||||
|
- DATABASE_URL=${DATABASE_URL}
|
||||||
|
```
|
||||||
|
|
||||||
|
Und setze `DATABASE_URL` als Secret in Forgejo.
|
||||||
|
|
||||||
|
## Workflow-Datei
|
||||||
|
|
||||||
|
Die CI/CD Pipeline ist in `.forgejo/workflows/deploy.yml` definiert:
|
||||||
|
|
||||||
|
1. **Checkout** - Code auschecken
|
||||||
|
2. **SSH Setup** - SSH-Key für Server-Zugang einrichten
|
||||||
|
3. **Deploy** - Dateien kopieren und `docker compose up -d`
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Action läuft nicht
|
||||||
|
|
||||||
|
- Ist der Runner aktiv? Prüfe unter **Site Administration → Actions → Runners**
|
||||||
|
- Sind `runs-on: docker` Labels korrekt?
|
||||||
|
|
||||||
|
### SSH-Fehler
|
||||||
|
|
||||||
|
- Ist der Public Key auf dem Server in `~/.ssh/authorized_keys`?
|
||||||
|
- Stimmt der Private Key im Secret?
|
||||||
|
|
||||||
|
### Container startet nicht
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh root@194.163.164.113 "docker logs APP_NAME"
|
||||||
|
```
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Docker Compose für Traefik Deployment
|
||||||
|
# APP_NAME und DOMAIN werden über Forgejo Repository-Variablen gesetzt
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build: .
|
||||||
|
# Oder: image: dein-image:latest
|
||||||
|
container_name: ${APP_NAME:-example-app}
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- traefik-public
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.${APP_NAME:-example-app}.rule=Host(`${DOMAIN:-example.magholder.click}`)"
|
||||||
|
- "traefik.http.routers.${APP_NAME:-example-app}.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.${APP_NAME:-example-app}.tls.certresolver=letsencrypt"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
42
public/index.html
Normal file
42
public/index.html
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Example App</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
text-align: center;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
h1 { font-size: 3rem; margin-bottom: 0.5rem; }
|
||||||
|
p { font-size: 1.2rem; opacity: 0.9; }
|
||||||
|
.deployed {
|
||||||
|
margin-top: 2rem;
|
||||||
|
padding: 1rem 2rem;
|
||||||
|
background: rgba(255,255,255,0.2);
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Example App</h1>
|
||||||
|
<p>Erfolgreich deployed via Forgejo Actions!</p>
|
||||||
|
<div class="deployed">
|
||||||
|
Push auf main → Automatisches Deployment
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Add table
Reference in a new issue