diff --git a/stacks/blinko/Caddyfile b/stacks/blinko/Caddyfile new file mode 100644 index 0000000..ca6b131 --- /dev/null +++ b/stacks/blinko/Caddyfile @@ -0,0 +1,10 @@ +:80 { + # Fix Blinko Bug: /embed* -> /api/embed* + handle /embed* { + uri replace /embed /api/embed + reverse_proxy ollama:11434 + } + + # Alles andere direkt zu Ollama + reverse_proxy ollama:11434 +} diff --git a/stacks/blinko/README.md b/stacks/blinko/README.md new file mode 100644 index 0000000..4e93aa9 --- /dev/null +++ b/stacks/blinko/README.md @@ -0,0 +1,68 @@ +# Blinko + +📝 Self-hosted note-taking app with AI integration (Ollama) + +## Deploy in Komodo + +**Pfad:** `stacks/blinko/` + +## Secrets + +Erstelle eine `.env` Datei im Stack-Verzeichnis: + +```bash +# NextAuth +NEXTAUTH_SECRET= + +# PostgreSQL +POSTGRES_PASSWORD= +POSTGRES_USER=postgres +POSTGRES_DB=postgres + +# Domain (optional, default: https://blink.nocci.it) +NEXTAUTH_URL=https://blink.your-domain.com +NEXT_PUBLIC_BASE_URL=https://blink.your-domain.com +``` + +## Ports + +| Service | Port | Beschreibung | +|---------|------|--------------| +| blinko-website | 1110 | Web UI | +| postgres | 5435 | Datenbank (nur intern empfohlen) | +| ollama | 11434 | Ollama API | + +## Caddy + +Für externen Zugriff: + +```caddyfile +blink.example.com { + reverse_proxy localhost:1110 +} + +ollama.example.com { + reverse_proxy localhost:11434 +} +``` + +## Ollama Models + +Nach dem Deploy Modelle pullen: + +```bash +docker exec -it blinko-ollama ollama pull llama3.2 +docker exec -it blinko-ollama ollama pull nomic-embed-text +``` + +## Volumes + +- `blinko_data` → `/app/.blinko` (Notizen & Daten) +- `postgres_data` → `/var/lib/postgresql/data` (Datenbank) +- `ollama_data` → `/root/.ollama` (AI Modelle) + +## Health Checks + +- Blinko: HTTP Check auf Port 1111 +- PostgreSQL: `pg_isready` Check +- Ollama: Container läuft diff --git a/stacks/blinko/compose.yaml b/stacks/blinko/compose.yaml new file mode 100644 index 0000000..f6429b7 --- /dev/null +++ b/stacks/blinko/compose.yaml @@ -0,0 +1,78 @@ +services: + blinko-website: + image: blinkospace/blinko:latest + container_name: blinko-website + restart: always + environment: + - NODE_ENV=production + - NEXTAUTH_URL=${NEXTAUTH_URL:-https://blink.nocci.it} + - NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL:-https://blink.nocci.it} + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} + depends_on: + postgres: + condition: service_healthy + volumes: + - blinko_data:/app/.blinko + networks: + - blinko-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:1111/"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 30s + logging: + options: + max-size: 10m + max-file: "3" + + postgres: + image: postgres:14 + container_name: blinko-postgres + restart: always + environment: + - POSTGRES_DB=${POSTGRES_DB:-postgres} + - POSTGRES_USER=${POSTGRES_USER:-postgres} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - TZ=Europe/Berlin + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - blinko-network + healthcheck: + test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER:-postgres}", "-d", "${POSTGRES_DB:-postgres}"] + interval: 5s + timeout: 10s + retries: 5 + + ollama: + image: ollama/ollama:latest + container_name: blinko-ollama + restart: always + environment: + - OLLAMA_HOST=0.0.0.0:11434 + volumes: + - ollama_data:/root/.ollama + networks: + - blinko-network + + ollama-proxy: + image: caddy:2 + container_name: blinko-ollama-proxy + restart: unless-stopped + depends_on: + - ollama + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + networks: + - blinko-network + +volumes: + blinko_data: + postgres_data: + ollama_data: + +networks: + blinko-network: + driver: bridge diff --git a/stacks/blinko/stack.toml b/stacks/blinko/stack.toml new file mode 100644 index 0000000..cb9d339 --- /dev/null +++ b/stacks/blinko/stack.toml @@ -0,0 +1,4 @@ +[[stacks]] +name = "blinko" +description = "Note-taking app with AI integration (Ollama)" +compose_path = "compose.yml"