Release v1.0.3

This commit is contained in:
Gitea Actions
2026-06-23 07:28:54 +00:00
commit 868f0dfce0
3 changed files with 164 additions and 0 deletions

46
README.md Normal file
View File

@@ -0,0 +1,46 @@
# Eikona AutoInstall Kunden-Release
Dieses Repository enthält **nur** die Installation per Docker Compose **kein Quellcode**.
Container-Images werden vom Hersteller gebaut und in die Gitea Container Registry gepusht.
## Voraussetzungen
- Docker mit Compose auf dem Deployment-Server (Linux)
- Registry-Zugang (`read:package`) vom Hersteller
- Gültiger **LicenseGate**-Lizenzschlüssel
- SSH-Deploy-Keys unter `/opt/docker/eikona/ssh/`
## Installation
```bash
# 1. Registry-Login
echo "$REGISTRY_TOKEN" | docker login git.hexahost.dev -u IHR_USER --password-stdin
# 2. Verzeichnisse
sudo mkdir -p /opt/docker/eikona/{isos,ssh,postgres,license}
sudo chown -R "$USER:$USER" /opt/docker/eikona
chmod 700 /opt/docker/eikona/ssh
# deploy_id_ed25519 + deploy_id_ed25519.pub ablegen
# 3. Konfiguration
cp .env.example .env
# .env bearbeiten: IMAGE_TAG, LICENSE_KEY, Secrets, DEPLOY_SERVER_URL
# 4. Start
docker compose pull
docker compose up -d
```
## Erreichbarkeit
- UI: Port **80** (nginx im UI-Container)
- API: Port **8000** (host network)
## Version
Siehe Datei `VERSION` bzw. `IMAGE_TAG` in `.env`.
## Support
Lizenz und Registry-Zugang über den Hersteller.

1
VERSION Normal file
View File

@@ -0,0 +1 @@
1.0.3

117
docker-compose.yml Normal file
View File

@@ -0,0 +1,117 @@
# Kunden-Produktion nur vorgebaute Images (kein build:)
# Image-Pfad: git.hexahost.dev/smueller/eikona-autoinstall-dist
# Version: IMAGE_TAG in .env (z. B. 1.0.0 oder latest)
x-backend-image: &backend_image
git.hexahost.dev/smueller/eikona-autoinstall-dist/api:${IMAGE_TAG:-latest}
services:
api:
image: *backend_image
container_name: eikona_api_prod
network_mode: host
command: ["python", "-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
environment: &backend_env
APP_ENV: production
DATABASE_URL: ${DATABASE_URL:-postgresql+psycopg://eikona:eikona@127.0.0.1:5432/eikona}
REDIS_URL: redis://127.0.0.1:6379/0
CELERY_BROKER_URL: redis://127.0.0.1:6379/0
CELERY_RESULT_BACKEND: redis://127.0.0.1:6379/1
AUTH_JWT_SECRET: ${AUTH_JWT_SECRET}
AUTH_BOOTSTRAP_ADMIN_USERNAME: ${AUTH_BOOTSTRAP_ADMIN_USERNAME:-admin}
AUTH_BOOTSTRAP_ADMIN_PASSWORD: ${AUTH_BOOTSTRAP_ADMIN_PASSWORD}
PROXMOX_DEFAULT_ROOT_PASSWORD: ${PROXMOX_DEFAULT_ROOT_PASSWORD}
WORKER_MAX_PARALLEL_DEPLOYMENTS: ${WORKER_MAX_PARALLEL_DEPLOYMENTS:-4}
DEPLOY_SERVER_URL: ${DEPLOY_SERVER_URL}
DEPLOY_SSH_KEY_PATH: /data/ssh/deploy_id_ed25519
ISO_STORAGE_PATH: /data/isos
ISO_PVE_VERSION: ${ISO_PVE_VERSION:-9.2-1}
ISO_PVE_DOWNLOAD_URL: ${ISO_PVE_DOWNLOAD_URL:-}
ISO_SSH_PUBLIC_KEY_PATH: /data/ssh/deploy_id_ed25519.pub
CORS_ORIGINS: ${CORS_ORIGINS:-'["http://127.0.0.1"]'}
CLEANUP_ENABLED: ${CLEANUP_ENABLED:-true}
CLEANUP_INTERVAL_HOURS: ${CLEANUP_INTERVAL_HOURS:-24}
CLEANUP_WORK_RETENTION_HOURS: ${CLEANUP_WORK_RETENTION_HOURS:-24}
CLEANUP_ARTIFACT_RETENTION_DAYS: ${CLEANUP_ARTIFACT_RETENTION_DAYS:-7}
CLEANUP_KEEP_LATEST_ARTIFACTS: ${CLEANUP_KEEP_LATEST_ARTIFACTS:-2}
CLEANUP_REMOVE_SOURCE_CACHE: ${CLEANUP_REMOVE_SOURCE_CACHE:-false}
LICENSE_ENFORCE: ${LICENSE_ENFORCE:-true}
LICENSE_KEY: ${LICENSE_KEY}
LICENSEGATE_API_URL: ${LICENSEGATE_API_URL:-https://license-api.hexaho.st}
LICENSEGATE_USER_ID: ${LICENSEGATE_USER_ID:-1}
LICENSE_SCOPE: ${LICENSE_SCOPE:-eikona-install}
LICENSE_USE_CHALLENGE: ${LICENSE_USE_CHALLENGE:-true}
LICENSE_PUBLIC_KEY: ${LICENSE_PUBLIC_KEY:-}
LICENSE_PUBLIC_KEY_PATH: ${LICENSE_PUBLIC_KEY_PATH:-}
LICENSE_CACHE_PATH: ${LICENSE_CACHE_PATH:-/data/license/verification-cache.json}
LICENSE_CACHE_GRACE_HOURS: ${LICENSE_CACHE_GRACE_HOURS:-72}
volumes:
- /opt/docker/eikona/isos:/data/isos
- /opt/docker/eikona/ssh:/data/ssh:ro
- /opt/docker/eikona/license:/data/license
depends_on:
redis:
condition: service_started
db:
condition: service_started
worker:
image: *backend_image
container_name: eikona_worker_prod
network_mode: host
command: ["celery", "-A", "app.worker.celery_app", "worker", "--loglevel=info"]
environment:
<<: *backend_env
volumes:
- /opt/docker/eikona/isos:/data/isos
- /opt/docker/eikona/ssh:/data/ssh:ro
- /opt/docker/eikona/license:/data/license
depends_on:
redis:
condition: service_started
db:
condition: service_started
api:
condition: service_started
beat:
image: *backend_image
container_name: eikona_beat_prod
network_mode: host
command: ["celery", "-A", "app.worker.celery_app", "beat", "--loglevel=info"]
environment:
<<: *backend_env
volumes:
- /opt/docker/eikona/isos:/data/isos
- /opt/docker/eikona/license:/data/license
depends_on:
redis:
condition: service_started
db:
condition: service_started
worker:
condition: service_started
redis:
image: redis:7-alpine
container_name: eikona_redis_prod
network_mode: host
db:
image: postgres:16-alpine
container_name: eikona_db_prod
network_mode: host
environment:
POSTGRES_DB: eikona
POSTGRES_USER: eikona
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-eikona}
volumes:
- /opt/docker/eikona/postgres:/var/lib/postgresql/data
ui:
image: git.hexahost.dev/smueller/eikona-autoinstall-dist/ui:${IMAGE_TAG:-latest}
container_name: eikona_ui_prod
network_mode: host
depends_on:
api:
condition: service_started