diff --git a/src/media-vm/docker-compose.yml b/src/media-vm/docker-compose.yml new file mode 100644 index 0000000..799284e --- /dev/null +++ b/src/media-vm/docker-compose.yml @@ -0,0 +1,153 @@ +version: '3.8' + +services: + jellyseerr: + image: fallenbagel/jellyseerr:latest + container_name: jellyseerr + environment: + - LOG_LEVEL=info + - TZ=Europe/Amsterdam + ports: + - "5055:5055" + volumes: + - /proxmox/.config/jellyseerr:/app/config + restart: unless-stopped + + kavita: + image: jvmilazz0/kavita:latest + user: 1000:1000 + container_name: kavita + environment: + - PUID=1026 + - PGID=100 + - TZ=Europe/Amsterdam + - DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true + ports: + - "5000:5000" + volumes: + - /share/calibre:/data + - /proxmox/.config/kavita:/kavita/config + restart: unless-stopped + + navidrome: + image: deluan/navidrome:latest + user: 1000:1000 # should be owner of volumes + ports: + - "4533:4533" + restart: unless-stopped + environment: + # Optional: put your config options customization here. Examples: + ND_LASTFM_APIKEY: cbb7c255f9c39873b91af66ba9291a05 + ND_LASTFM_SECRET: 7e3b2f8545ca49d18de09a8cb3e153bf + ND_SCANSCHEDULE: 1h + ND_LOGLEVEL: info + ND_SESSIONTIMEOUT: 24h + ND_BASEURL: "" + volumes: + - "/proxmox/.config/navidrome:/data" + - "/share/music:/music:ro" + + jellyfin: + image: jellyfin/jellyfin + container_name: jellyfin + user: 1000:1000 + ports: + - "8096:8096" +# network_mode: 'host' + volumes: + - /proxmox/.config/jellyfin/data:/var/lib/jellyfin +# - /proxmox/.config/jellyfin/cache:/var/cache/jellyfin + - /var/cache/jellyfin:/var/cache/jellyfin + - /proxmox/.config/jellyfin/config:/etc/jellyfin + - type: bind + source: /share/videos + target: /share/jellyfin + #- type: bind + # source: /path/to/media2 + # target: /media2 + # read_only: true + # Optional - extra fonts to be used during transcoding with subtitle burn-in + #- type: bind + # source: /path/to/fonts + # target: /usr/local/share/fonts/custom + # read_only: true + restart: 'unless-stopped' + # Optional - alternative address used for autodiscovery + environment: + - JELLYFIN_CACHE_DIR=/var/cache/jellyfin + - JELLYFIN_CONFIG_DIR=/etc/jellyfin + - JELLYFIN_DATA_DIR=/var/lib/jellyfin + - JELLYFIN_PublishedServerUrl=http://jf.wessel.gg + # Optional - may be necessary for docker healthcheck to pass if running in host network mode + #extra_hosts: + # - 'host.docker.internal:host-gateway' + gitea-mirror: + image: ${DOCKER_REGISTRY:-ghcr.io}/${DOCKER_IMAGE:-raylabshq/gitea-mirror}:${DOCKER_TAG:-latest} + build: + context: . + dockerfile: Dockerfile + platforms: + - linux/amd64 + - linux/arm64 + cache_from: + - ${DOCKER_REGISTRY:-ghcr.io}/${DOCKER_IMAGE:-raylabshq/gitea-mirror}:${DOCKER_TAG:-latest} + container_name: gitea-mirror + restart: unless-stopped + ports: + - "4321:4321" + volumes: + - gitea-mirror-data:/app/data + # Mount custom CA certificates - choose one option: + # Option 1: Mount individual CA certificates from certs directory + # - ./certs:/app/certs:ro + # Option 2: Mount system CA bundle (if your CA is already in system store) + # - /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro + environment: + # For a complete list of all supported environment variables, see: + # docs/ENVIRONMENT_VARIABLES.md or .env.example + - NODE_ENV=production + - DATABASE_URL=file:data/gitea-mirror.db + - HOST=0.0.0.0 + - PORT=4321 + - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET:-your-secret-key-change-this-in-production} + - BETTER_AUTH_URL=${BETTER_AUTH_URL:-http://localhost:4321} + # Optional: ENCRYPTION_SECRET will be auto-generated if not provided + # - ENCRYPTION_SECRET=${ENCRYPTION_SECRET:-} + # GitHub/Gitea Mirror Config + - GITHUB_USERNAME=${GITHUB_USERNAME:-} + - GITHUB_TOKEN=${GITHUB_TOKEN:-} + - GITHUB_EXCLUDED_ORGS=${GITHUB_EXCLUDED_ORGS:-} + - SKIP_FORKS=${SKIP_FORKS:-false} + - PRIVATE_REPOSITORIES=${PRIVATE_REPOSITORIES:-false} + - MIRROR_ISSUES=${MIRROR_ISSUES:-false} + - MIRROR_WIKI=${MIRROR_WIKI:-false} + - MIRROR_STARRED=${MIRROR_STARRED:-false} + - MIRROR_ORGANIZATIONS=${MIRROR_ORGANIZATIONS:-false} + - PRESERVE_ORG_STRUCTURE=${PRESERVE_ORG_STRUCTURE:-false} + - ONLY_MIRROR_ORGS=${ONLY_MIRROR_ORGS:-false} + - SKIP_STARRED_ISSUES=${SKIP_STARRED_ISSUES:-false} + - GITEA_URL=${GITEA_URL:-} + - GITEA_TOKEN=${GITEA_TOKEN:-} + - GITEA_USERNAME=${GITEA_USERNAME:-} + - GITEA_ORGANIZATION=${GITEA_ORGANIZATION:-github-mirrors} + - GITEA_ORG_VISIBILITY=${GITEA_ORG_VISIBILITY:-public} + - DELAY=${DELAY:-3600} + # Optional: Skip TLS verification (insecure, use only for testing) + # - GITEA_SKIP_TLS_VERIFY=${GITEA_SKIP_TLS_VERIFY:-false} + # Header Authentication (for Reverse Proxy SSO) + - HEADER_AUTH_ENABLED=${HEADER_AUTH_ENABLED:-false} + - HEADER_AUTH_USER_HEADER=${HEADER_AUTH_USER_HEADER:-X-Authentik-Username} + - HEADER_AUTH_EMAIL_HEADER=${HEADER_AUTH_EMAIL_HEADER:-X-Authentik-Email} + - HEADER_AUTH_NAME_HEADER=${HEADER_AUTH_NAME_HEADER:-X-Authentik-Name} + - HEADER_AUTH_AUTO_PROVISION=${HEADER_AUTH_AUTO_PROVISION:-false} + - HEADER_AUTH_ALLOWED_DOMAINS=${HEADER_AUTH_ALLOWED_DOMAINS:-} + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=3", "--spider", "http://localhost:4321/api/health"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 15s + +# Define named volumes for database persistence +volumes: + gitea-mirror-data: # Database volume diff --git a/src/torrent-vm/docker-compose.yml b/src/torrent-vm/docker-compose.yml new file mode 100644 index 0000000..143d275 --- /dev/null +++ b/src/torrent-vm/docker-compose.yml @@ -0,0 +1,48 @@ +services: + bitmagnet: + image: ghcr.io/bitmagnet-io/bitmagnet:latest + container_name: bitmagnet + volumes: + - /proxmox/.config/bitmagnet:/root/.config/bitmagnet + ports: + # API and WebUI port: + - "3333:3333" + # BitTorrent ports: + #- "3334:3334/tcp" + #- "3334:3334/udp" + restart: unless-stopped + environment: + - POSTGRES_HOST=postgres + - POSTGRES_PASSWORD=postgres + - TMDB_ENABLED=true + - TMDB_API_KEY=ede1281d8197e00f673adf1aadea643e + command: + - worker + - run + - --keys=http_server + - --keys=queue_server + # disable the next line to run without DHT crawler + - --keys=dht_crawler + depends_on: + postgres: + condition: service_healthy + + postgres: + image: postgres:16-alpine + container_name: bitmagnet-postgres + volumes: + - /bitmagnet-postgres:/var/lib/postgresql/data + ports: + - "5432:5432" # Expose this port if you'd like to dig around in the database + restart: unless-stopped + environment: + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=bitmagnet + - PGUSER=postgres + shm_size: 1g + healthcheck: + test: + - CMD-SHELL + - pg_isready + start_period: 20s + interval: 10s