From c07e58865d8a56215c6e2df75e86cd6f6b8ee10f Mon Sep 17 00:00:00 2001 From: jgitta Date: Wed, 29 Apr 2026 10:42:41 -0500 Subject: [PATCH] Initial commit: all siklos docker-compose files --- README.md | 13 +++++ siklos/actual-budget/docker-compose.yml | 16 ++++++ siklos/dashboard/docker-compose.yml | 13 +++++ siklos/glances/docker-compose.yml | 14 ++++++ siklos/goldengames/docker-compose.yml | 17 +++++++ siklos/grav/docker-compose.yml | 13 +++++ siklos/homarr/docker-compose.yml | 24 +++++++++ siklos/karakeep/docker-compose.yml | 44 +++++++++++++++++ siklos/kopia/docker-compose.yml | 22 +++++++++ siklos/linkwarden/docker-compose.yml | 28 +++++++++++ siklos/media/docker-compose.yml | 55 +++++++++++++++++++++ siklos/monitoring/docker-compose.yml | 65 +++++++++++++++++++++++++ siklos/onlyoffice/docker-compose.yml | 17 +++++++ siklos/pihole/docker-compose.yml | 61 +++++++++++++++++++++++ siklos/portainer/docker-compose.yml | 14 ++++++ siklos/uptime-kuma/docker-compose.yml | 9 ++++ siklos/watchtower/docker-compose.yml | 24 +++++++++ siklos/wordpress/docker-compose.yml | 39 +++++++++++++++ 18 files changed, 488 insertions(+) create mode 100644 README.md create mode 100644 siklos/actual-budget/docker-compose.yml create mode 100644 siklos/dashboard/docker-compose.yml create mode 100644 siklos/glances/docker-compose.yml create mode 100644 siklos/goldengames/docker-compose.yml create mode 100644 siklos/grav/docker-compose.yml create mode 100644 siklos/homarr/docker-compose.yml create mode 100644 siklos/karakeep/docker-compose.yml create mode 100644 siklos/kopia/docker-compose.yml create mode 100644 siklos/linkwarden/docker-compose.yml create mode 100644 siklos/media/docker-compose.yml create mode 100644 siklos/monitoring/docker-compose.yml create mode 100644 siklos/onlyoffice/docker-compose.yml create mode 100644 siklos/pihole/docker-compose.yml create mode 100644 siklos/portainer/docker-compose.yml create mode 100644 siklos/uptime-kuma/docker-compose.yml create mode 100644 siklos/watchtower/docker-compose.yml create mode 100644 siklos/wordpress/docker-compose.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..d599f0d --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Homelab Configs + +Docker Compose files and configuration for homelab infrastructure. + +## Structure +- `siklos/` — Docker services on VM112 (192.168.88.27) + +## Hosts +| Host | IP | Role | +|---|---|---| +| siklos | 192.168.88.27 | Main Docker server | +| jellyfin | 192.168.88.10 | Media server | +| thinkstation | 192.168.88.41 | Workstation / Ollama | diff --git a/siklos/actual-budget/docker-compose.yml b/siklos/actual-budget/docker-compose.yml new file mode 100644 index 0000000..1da67ac --- /dev/null +++ b/siklos/actual-budget/docker-compose.yml @@ -0,0 +1,16 @@ +services: + actual-budget: + image: actualbudget/actual-server:latest + container_name: actual-budget + restart: unless-stopped + ports: + - "5006:5006" + volumes: + - ./data:/data + networks: + - default + - pihole_default + +networks: + pihole_default: + external: true diff --git a/siklos/dashboard/docker-compose.yml b/siklos/dashboard/docker-compose.yml new file mode 100644 index 0000000..15bd594 --- /dev/null +++ b/siklos/dashboard/docker-compose.yml @@ -0,0 +1,13 @@ +services: + dashboard: + build: . + container_name: dashboard + restart: unless-stopped + ports: + - "8096:8080" + environment: + - ENVIRONMENT=production + volumes: + - /srv/docker/dashboard/app:/app + labels: + com.centurylinklabs.watchtower: "false" diff --git a/siklos/glances/docker-compose.yml b/siklos/glances/docker-compose.yml new file mode 100644 index 0000000..5adb441 --- /dev/null +++ b/siklos/glances/docker-compose.yml @@ -0,0 +1,14 @@ +services: + glances: + image: nicolargo/glances:latest + container_name: glances + restart: unless-stopped + pid: host + privileged: true + ports: + - "61208:61208" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /etc/os-release:/etc/os-release:ro + environment: + - GLANCES_OPT=-w diff --git a/siklos/goldengames/docker-compose.yml b/siklos/goldengames/docker-compose.yml new file mode 100644 index 0000000..0258c13 --- /dev/null +++ b/siklos/goldengames/docker-compose.yml @@ -0,0 +1,17 @@ +services: + goldengames: + build: . + container_name: goldengames + restart: unless-stopped + ports: + - "3030:3000" + volumes: + - ./data:/app/data + environment: + - NODE_ENV=production + - DATA_DIR=/app/data + - SMTP_HOST=smtp.fastmail.com + - SMTP_USER=jgitta@jgitta.com + - SMTP_PASS=5a2p6f46238v332z + labels: + com.centurylinklabs.watchtower: "false" diff --git a/siklos/grav/docker-compose.yml b/siklos/grav/docker-compose.yml new file mode 100644 index 0000000..e626adf --- /dev/null +++ b/siklos/grav/docker-compose.yml @@ -0,0 +1,13 @@ +services: + grav: + image: lscr.io/linuxserver/grav:latest + container_name: grav + environment: + - PUID=1000 # Use 'id $USER' to check your ID + - PGID=1000 + - TZ=America/Chicago # Change to your timezone + volumes: + - ./config:/config # All your site data stays here + ports: + - 8585:80 + restart: unless-stopped diff --git a/siklos/homarr/docker-compose.yml b/siklos/homarr/docker-compose.yml new file mode 100644 index 0000000..b7b0109 --- /dev/null +++ b/siklos/homarr/docker-compose.yml @@ -0,0 +1,24 @@ +#---------------------------------------------------------------------# +# Homarr - A simple, yet powerful dashboard for your server. # +#---------------------------------------------------------------------# +services: + homarr: + container_name: homarr + image: ghcr.io/homarr-labs/homarr:latest + restart: unless-stopped + volumes: + # Optional: Allows Homarr to show container status/controls + - /var/run/docker.sock:/var/run/docker.sock + + # Use relative paths (./) so the folder moves with the YAML file + - .homarr/appdata:/appdata +# - .homarr/icons:/app/apps/nextjs/public/images/apps + + environment: + - SECRET_ENCRYPTION_KEY=d1478a30f89d49cfe0599c38dcf061672b3e24e519957a83a1122768002d0357 + - BASE_URL=http://192.168.88.111:7575 + - TZ=America/Chicago + - FORCE_HTTPS=false + - APP_URL=https://homarr.jgitta.com + ports: + - '7575:7575' diff --git a/siklos/karakeep/docker-compose.yml b/siklos/karakeep/docker-compose.yml new file mode 100644 index 0000000..6785bce --- /dev/null +++ b/siklos/karakeep/docker-compose.yml @@ -0,0 +1,44 @@ +services: + web: + image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release} + restart: unless-stopped + volumes: + # By default, the data is stored in a docker volume called "data". + # If you want to mount a custom directory, change the volume mapping to: + # - /path/to/your/directory:/data + - data:/data + ports: + - 3010:3000 + env_file: + - .env + environment: + MEILI_ADDR: http://meilisearch:7700 + BROWSER_WEB_URL: http://chrome:9222 + # OPENAI_API_KEY: ... + + # You almost never want to change the value of the DATA_DIR variable. + # If you want to mount a custom directory, change the volume mapping above instead. + DATA_DIR: /data # DON'T CHANGE THIS + chrome: + image: gcr.io/zenika-hub/alpine-chrome:124 + restart: unless-stopped + command: + - --no-sandbox + - --disable-gpu + - --disable-dev-shm-usage + - --remote-debugging-address=0.0.0.0 + - --remote-debugging-port=9222 + - --hide-scrollbars + meilisearch: + image: getmeili/meilisearch:v1.13.3 + restart: unless-stopped + env_file: + - .env + environment: + MEILI_NO_ANALYTICS: "true" + volumes: + - meilisearch:/meili_data + +volumes: + meilisearch: + data: diff --git a/siklos/kopia/docker-compose.yml b/siklos/kopia/docker-compose.yml new file mode 100644 index 0000000..95a6e66 --- /dev/null +++ b/siklos/kopia/docker-compose.yml @@ -0,0 +1,22 @@ +version: "3.7" +services: + kopia: + image: kopia/kopia:latest + container_name: kopia + restart: unless-stopped + ports: + - "51515:51515" + volumes: + - ./config:/app/config + - ./cache:/app/cache + - /mnt/nextcloud:/data:ro + environment: + - KOPIA_PASSWORD=kopia123 + command: + - server + - start + - --address=0.0.0.0:51515 + - --insecure + - --ui + - --server-username=admin + - --server-password=Jogiocsi1211+ diff --git a/siklos/linkwarden/docker-compose.yml b/siklos/linkwarden/docker-compose.yml new file mode 100644 index 0000000..8051f44 --- /dev/null +++ b/siklos/linkwarden/docker-compose.yml @@ -0,0 +1,28 @@ +services: + postgres: + image: postgres:16-alpine + ports: + - "5432:5432" + restart: always + environment: + POSTGRES_PASSWORD: mysecretpassword + volumes: + - ./pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 10 + + linkwarden: + image: ghcr.io/linkwarden/linkwarden:latest + restart: always + ports: + - "3015:3000" + environment: + - DATABASE_URL=postgresql://postgres:mysecretpassword@postgres:5432/postgres + - NEXTAUTH_URL=http://localhost:3000 + - NEXTAUTH_SECRET=super-secret-random-string-12345 + depends_on: + postgres: + condition: service_healthy diff --git a/siklos/media/docker-compose.yml b/siklos/media/docker-compose.yml new file mode 100644 index 0000000..649aa6a --- /dev/null +++ b/siklos/media/docker-compose.yml @@ -0,0 +1,55 @@ +version: "3" + +services: + sonarr: + image: lscr.io/linuxserver/sonarr:latest + container_name: sonarr + restart: always + ports: + - "8989:8989" + volumes: + - /srv/docker/sonarr/config:/config + - /mnt/media/tv:/tv + - /mnt/media/torrents:/downloads + environment: + - TZ=America/Chicago + - PUID=1000 + - PGID=1000 + + radarr: + image: lscr.io/linuxserver/radarr:latest + container_name: radarr + restart: always + ports: + - "7878:7878" + volumes: + - /srv/docker/radarr/config:/config + - /mnt/media/movies:/movies + - /mnt/media/torrents:/downloads + environment: + - TZ=America/Chicago + - PUID=1000 + - PGID=1000 + + prowlarr: + image: lscr.io/linuxserver/prowlarr:latest + container_name: prowlarr + restart: always + ports: + - "9696:9696" + volumes: + - /srv/docker/prowlarr/config:/config + environment: + - TZ=America/Chicago + - PUID=1000 + - PGID=1000 + + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr:latest + container_name: flaresolverr + restart: always + ports: + - "8191:8191" + environment: + - TZ=America/Chicago + - LOG_LEVEL=info diff --git a/siklos/monitoring/docker-compose.yml b/siklos/monitoring/docker-compose.yml new file mode 100644 index 0000000..26e3a16 --- /dev/null +++ b/siklos/monitoring/docker-compose.yml @@ -0,0 +1,65 @@ +services: + prometheus: + image: prom/prometheus:latest + container_name: prometheus + restart: unless-stopped + ports: + - "9090:9090" + volumes: + - /srv/docker/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus_data:/prometheus + command: + - "--config.file=/etc/prometheus/prometheus.yml" + - "--storage.tsdb.path=/prometheus" + - "--storage.tsdb.retention.time=30d" + - "--web.enable-lifecycle" + - "--web.enable-admin-api" + + grafana: + image: grafana/grafana:latest + container_name: grafana + restart: unless-stopped + ports: + - "3020:3000" + volumes: + - grafana_data:/var/lib/grafana + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=Jogiocsi1211+ + - GF_USERS_ALLOW_SIGN_UP=false + - FTLCONF_dns_maxConcurrentQueries=300 + depends_on: + - prometheus + + cadvisor: + image: gcr.io/cadvisor/cadvisor:latest + container_name: cadvisor + restart: unless-stopped + privileged: true + ports: + - "8090:8080" + volumes: + - /:/rootfs:ro + - /var/run:/var/run:ro + - /sys:/sys:ro + - /var/lib/docker:/var/lib/docker:ro + - /dev/disk/:/dev/disk:ro + + graphite-exporter: + image: prom/graphite-exporter:latest + container_name: graphite-exporter + restart: unless-stopped + ports: + - "9109:9109" + - "9109:9109/udp" + - "9108:9108" + volumes: + - /srv/docker/monitoring/graphite/graphite_mapping.conf:/tmp/graphite_mapping.conf:ro + command: + - "--graphite.mapping-config=/tmp/graphite_mapping.conf" + - "--graphite.listen-address=:9109" + - "--web.listen-address=:9108" + +volumes: + prometheus_data: + grafana_data: diff --git a/siklos/onlyoffice/docker-compose.yml b/siklos/onlyoffice/docker-compose.yml new file mode 100644 index 0000000..d36abc1 --- /dev/null +++ b/siklos/onlyoffice/docker-compose.yml @@ -0,0 +1,17 @@ +services: + onlyoffice: + image: onlyoffice/documentserver + container_name: onlyoffice + restart: unless-stopped + ports: + - "8880:80" + volumes: + - /opt/onlyoffice/data:/var/www/onlyoffice/Data + - /opt/onlyoffice/lib:/var/lib/onlyoffice + - /opt/onlyoffice/logs:/var/log/onlyoffice + environment: + - JWT_ENABLED=true + - JWT_SECRET=4f2b0c719af2de99befacfec9ca5e8373cbdeb76 + extra_hosts: + # Route next.jgitta.com through Caddy (valid SSL cert) instead of direct to VM + - "next.jgitta.com:192.168.88.110" diff --git a/siklos/pihole/docker-compose.yml b/siklos/pihole/docker-compose.yml new file mode 100644 index 0000000..afb1703 --- /dev/null +++ b/siklos/pihole/docker-compose.yml @@ -0,0 +1,61 @@ +services: + pihole: + container_name: pihole + image: pihole/pihole:latest + restart: always + network_mode: host + labels: + - "com.centurylinklabs.watchtower.enable=false" + environment: + TZ: "America/Chicago" + FTLCONF_misc_dnsmasq_lines: "dns-forward-max=300" + volumes: + - ./pihole:/etc/pihole + + # Wyoming Protocol for Home Assistant + faster-whisper: + image: lscr.io/linuxserver/faster-whisper:latest + container_name: faster-whisper + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Chicago + - WHISPER_MODEL=base + - WHISPER_LAN=en + volumes: + - ./faster-whisper/config:/config + ports: + - 10300:10300 + restart: unless-stopped + + # OpenAI-Compatible API for general use + faster-whisper-server: + image: fedirz/faster-whisper-server:latest-cpu + container_name: faster-whisper-server + ports: + - "8000:8000" + volumes: + - ./faster-whisper/models:/root/.cache/huggingface + environment: + - WHISPER_MODEL=base + restart: unless-stopped + + # Open WebUI with voice-to-text integration + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui + ports: + - "3000:8080" + volumes: + - ./open-webui/data:/app/backend/data + environment: + - TZ=America/Chicago + - OLLAMA_BASE_URL=http://192.168.88.41:11434 + # Voice-to-Text (STT) Settings + - WHISPER_API_BASE_URL=http://faster-whisper-server:8000/v1 + - AUDIO_STT_ENGINE=openai + - AUDIO_STT_OPENAI_API_BASE_URL=http://faster-whisper-server:8000/v1 + - AUDIO_STT_OPENAI_API_KEY=not-needed + extra_hosts: + - "host.docker.internal:host-gateway" + restart: unless-stopped diff --git a/siklos/portainer/docker-compose.yml b/siklos/portainer/docker-compose.yml new file mode 100644 index 0000000..2a0551c --- /dev/null +++ b/siklos/portainer/docker-compose.yml @@ -0,0 +1,14 @@ +services: + portainer: + image: portainer/portainer-ce:latest + container_name: portainer + restart: unless-stopped + ports: + - "9443:9443" + - "9000:9000" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - portainer_data:/data + +volumes: + portainer_data: diff --git a/siklos/uptime-kuma/docker-compose.yml b/siklos/uptime-kuma/docker-compose.yml new file mode 100644 index 0000000..a12adaf --- /dev/null +++ b/siklos/uptime-kuma/docker-compose.yml @@ -0,0 +1,9 @@ +services: + uptime-kuma: + image: louislam/uptime-kuma:2 + container_name: uptime-kuma + restart: unless-stopped + ports: + - "3001:3001" + volumes: + - ./data:/app/data diff --git a/siklos/watchtower/docker-compose.yml b/siklos/watchtower/docker-compose.yml new file mode 100644 index 0000000..ee4b30b --- /dev/null +++ b/siklos/watchtower/docker-compose.yml @@ -0,0 +1,24 @@ +version: "3" + +services: + watchtower: + image: containrrr/watchtower + container_name: watchtower + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - TZ=America/Chicago + - WATCHTOWER_NOTIFICATIONS=email + - WATCHTOWER_NOTIFICATION_EMAIL_FROM=jgitta@jgitta.com + - WATCHTOWER_NOTIFICATION_EMAIL_TO=jgitta@jgitta.com + - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.fastmail.com + - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 + - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=jgitta@jgitta.com + - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=2l79229z6r4y8x8y + - WATCHTOWER_NOTIFICATIONS_LEVEL=info + - WATCHTOWER_CLEANUP=true + - WATCHTOWER_SCHEDULE=0 0 3 * * * + - WATCHTOWER_ROLLING_RESTART=true + - WATCHTOWER_ROLLING_RESTART_TIMEOUT=30s + - WATCHTOWER_LABEL_ENABLE=true diff --git a/siklos/wordpress/docker-compose.yml b/siklos/wordpress/docker-compose.yml new file mode 100644 index 0000000..6dde22b --- /dev/null +++ b/siklos/wordpress/docker-compose.yml @@ -0,0 +1,39 @@ +services: + wordpress-db: + image: mariadb:10.11 + container_name: wordpress-db + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: Jogiocsi1211+ + MYSQL_DATABASE: jgitta_wordpress + MYSQL_USER: jgitta + MYSQL_PASSWORD: Jogiocsi1211+ + volumes: + - wordpress_db:/var/lib/mysql + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 10s + timeout: 5s + retries: 10 + + wordpress: + image: wordpress:php8.3-apache + container_name: wordpress + restart: unless-stopped + ports: + - "8095:80" + environment: + WORDPRESS_DB_HOST: wordpress-db + WORDPRESS_DB_NAME: jgitta_wordpress + WORDPRESS_DB_USER: jgitta + WORDPRESS_DB_PASSWORD: Jogiocsi1211+ + WORDPRESS_TABLE_PREFIX: wp_ + volumes: + - wordpress_files:/var/www/html + depends_on: + wordpress-db: + condition: service_healthy + +volumes: + wordpress_db: + wordpress_files: