From 868f0dfce0a6710a8ed3cee0fb52031e68da3aad Mon Sep 17 00:00:00 2001 From: Gitea Actions Date: Tue, 23 Jun 2026 07:28:54 +0000 Subject: [PATCH] Release v1.0.3 --- README.md | 46 ++++++++++++++++++ VERSION | 1 + docker-compose.yml | 117 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 README.md create mode 100644 VERSION create mode 100644 docker-compose.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..4bdbb40 --- /dev/null +++ b/README.md @@ -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. diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..21e8796 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.3 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0d1df30 --- /dev/null +++ b/docker-compose.yml @@ -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