From 5c3ae670f0596ce4b42a6af2ac27e99be32b8e4c Mon Sep 17 00:00:00 2001 From: Georgy Kazakov Date: Wed, 22 Jul 2026 18:34:39 +0300 Subject: [PATCH] init --- lab/.env.example | 18 +++++ lab/compose.yaml | 167 +++++++++++++++++++++++++++++++++++++++++++++ media/.env.example | 1 + media/compose.yaml | 91 ++++++++++++++++++++++++ 4 files changed, 277 insertions(+) create mode 100644 lab/.env.example create mode 100644 lab/compose.yaml create mode 100644 media/.env.example create mode 100644 media/compose.yaml diff --git a/lab/.env.example b/lab/.env.example new file mode 100644 index 0000000..b22f97e --- /dev/null +++ b/lab/.env.example @@ -0,0 +1,18 @@ +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=postgres +RABBITMQ_USER=rmqadmin +RABBITMQ_PASSWORD=password +KEYCLOAK_DB=keycloak +KEYCLOAK_ADMIN=admin +KEYCLOAK_ADMIN_PASSWORD=admin +KEYCLOAK_HOSTNAME=keycloak.home.g33k.cc +MINIO_ROOT_USER=minioadmin +MINIO_ROOT_PASSWORD=minioadmin +MINIO_OIDC_CONFIG_URL= +MINIO_OIDC_CLIENT_ID= +MINIO_OIDC_CLIENT_SECRET= +BOTPRESS_DB=botpress +BOTPRESS_URL=http://localhost:3000 +SEQ_PASSWORD=password +LOG_DIR=./logs diff --git a/lab/compose.yaml b/lab/compose.yaml new file mode 100644 index 0000000..d9520ba --- /dev/null +++ b/lab/compose.yaml @@ -0,0 +1,167 @@ +# ============================================================================= +# Work / Dev stack +# PostgreSQL + RabbitMQ + Keycloak + MinIO + OpenWebUI + Botpress + Seq + SearXNG +# ============================================================================= + +networks: + work: + name: lab + driver: bridge + +services: + postgres: + image: postgres:17 + container_name: postgres + environment: + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + POSTGRES_DB: ${POSTGRES_DB:-postgres} + ports: + - "5432:5432" + volumes: + - postgresql-data:/var/lib/postgresql/data + networks: + - lab + restart: always + + rabbitmq: + image: rabbitmq:3-management + container_name: rabbitmq + environment: + RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-rmqadmin} + RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-password} + ports: + - "5672:5672" + - "15672:15672" + volumes: + - rabbitmq-data:/var/lib/rabbitmq + networks: + - lab + restart: always + + keycloak: + image: quay.io/keycloak/keycloak:latest + container_name: keycloak + depends_on: + - postgres + environment: + KC_DB: postgres + KC_DB_URL: jdbc:postgresql://postgres:5432/${KEYCLOAK_DB:-keycloak} + KC_DB_USERNAME: ${POSTGRES_USER:-postgres} + KC_DB_PASSWORD: ${POSTGRES_PASSWORD:-postgres} + KC_HOSTNAME: ${KEYCLOAK_HOSTNAME:-keycloak.home.g33k.cc} + KC_PROXY_HEADERS: xforwarded + KC_LOG_LEVEL: info + KC_METRICS_ENABLED: "true" + KC_HEALTH_ENABLED: "true" + KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-admin} + KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin} + command: start + ports: + - "8088:8080" + volumes: + - keycloak-data:/opt/keycloak/data + networks: + - lab + restart: always + + minio: + image: quay.io/minio/minio:latest + container_name: minio + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} + MINIO_IDENTITY_OPENID_CONFIG_URL: ${MINIO_OIDC_CONFIG_URL} + MINIO_IDENTITY_OPENID_CLIENT_ID: ${MINIO_OIDC_CLIENT_ID} + MINIO_IDENTITY_OPENID_CLIENT_SECRET: ${MINIO_OIDC_CLIENT_SECRET} + MINIO_IDENTITY_OPENID_ROLE_POLICY: consoleAdmin + MINIO_IDENTITY_OPENID_CLAIM_NAME: policy + command: server /data --console-address :9001 + ports: + - "9000:9000" + - "9001:9001" + volumes: + - minio-data:/data + networks: + - lab + restart: always + + openwebui: + image: ghcr.io/open-webui/open-webui:main + container_name: openwebui + ports: + - "3003:8080" + volumes: + - openwebui-data:/app/backend/data + extra_hosts: + - "host.docker.internal:host-gateway" + networks: + - lab + restart: always + + botpress-lang: + image: botpress/server:latest + container_name: botpress-lang + command: bash -c "./duckling -p 8000 & ./bp lang --langDir /botpress/lang --port 3100" + volumes: + - botpress_lang:/botpress/lang + networks: + - lab + restart: always + + botpress-server: + image: botpress/server:latest + container_name: botpress-server + depends_on: + - postgres + - botpress-lang + environment: + DATABASE_URL: postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${BOTPRESS_DB:-botpress} + BP_MODULE_NLU_DUCKLINGURL: http://botpress-lang:8000 + BP_MODULE_NLU_LANGUAGESOURCES: '[{"endpoint":"http://botpress-lang:3100"}]' + EXTERNAL_URL: ${BOTPRESS_URL:-http://localhost:3000} + ports: + - "3333:3000" + volumes: + - botpress-data:/botpress/data + networks: + - lab + restart: always + + seq: + image: datalust/seq:latest + container_name: seq + environment: + ACCEPT_EULA: "Y" + SEQ_FIRSTRUN_ADMINPASSWORD: ${SEQ_PASSWORD:-password} + ports: + - "5341:80" + volumes: + - seq-data:/data + networks: + - lab + restart: always + + searxng: + image: docker.io/searxng/searxng:latest + container_name: searxng + ports: + - "9999:8080" + volumes: + - searxng-data:/var/cache/searxng/ + - searxng-config:/etc/searxng/ + networks: + - lab + restart: always + +volumes: + postgresql-data: + rabbitmq-data: + keycloak-data: + minio-data: + openwebui-data: + botpress_lang: + botpress-data: + seq-data: + searxng-data: + searxng-config: diff --git a/media/.env.example b/media/.env.example new file mode 100644 index 0000000..414695a --- /dev/null +++ b/media/.env.example @@ -0,0 +1 @@ +# Torrents — no secrets needed diff --git a/media/compose.yaml b/media/compose.yaml new file mode 100644 index 0000000..f1c7d95 --- /dev/null +++ b/media/compose.yaml @@ -0,0 +1,91 @@ +# ============================================================================= +# Torrents / Media stack (онлайн, без NAS) +# Индексаторы + TorrServer + Lampa +# ============================================================================= + +networks: + torrents: + name: media + driver: bridge + +services: + jackett: + image: lscr.io/linuxserver/jackett:latest + container_name: jackett + environment: + TZ: Europe/Moscow + AUTO_UPDATE: "true" + ports: + - "9117:9117" + volumes: + - jackett_config:/config + networks: + - media + restart: always + + prowlarr: + image: lscr.io/linuxserver/prowlarr:latest + container_name: prowlarr + environment: + TZ: Europe/Moscow + ports: + - "9696:9696" + volumes: + - prowlarr-config:/config + networks: + - media + restart: always + + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr:latest + container_name: flaresolverr + ports: + - "8191:8191" + networks: + - media + restart: always + + torrserver: + image: ghcr.io/yourok/torrserver:latest + container_name: torrserver + environment: + TS_PORT: "8090" + TS_DONTKILL: "true" + TS_HTTPAUTH: "false" + TS_RDB: "false" + TS_TORRENTSDIR: /opt/ts/torrents + TS_TORRENTADDR: ":32000" + ports: + - "9119:8090" + volumes: + - torrserver_config:/opt/ts/config + - torrserver_log:/opt/ts/log + - torrserver_torrents:/opt/ts/torrents + networks: + - media + restart: always + + lampac: + image: ghcr.io/lampac-nextgen/lampac:latest + container_name: lampac + ports: + - "9118:9118" + volumes: + - lampac-init:/lampac + - lampac-db:/lampac/database + - lampac-cache:/lampac/cache + - lampac-logs:/lampac/logs + networks: + - media + restart: always + +volumes: + jackett_config: + prowlarr-config: + torrserver_config: + torrserver_log: + torrserver_torrents: + lampac-init: + lampac-db: + lampac-cache: + lampac-logs: