services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:9
    container_name: forgejo
    ports:
      - "3000:3000"
      - "222:22"
    volumes:
      - /mertz/forgejo:/data
    networks:
      - barrios-network
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    ports:
      - "8096:8096"
    volumes:
      - /mertz/jellyfin/config:/config
      - /mertz/jellyfin/cache:/cache
      - /mertz/data/movies:/media
      - /mertz/data/television:/media1
      - /mertz/data/music:/media2
      - /mertz/data/disney-films:/media3
    restart: "unless-stopped"
    networks:
      - barrios-network
  registry:
    image: registry:2
    container_name: registry
    ports:
      - "5000:5000"
    volumes:
      - /mertz/registry:/var/lib/registry
    networks:
      - barrios-network
  caddy:
    # build:
    #   context: ./caddy
    #   dockerfile: Dockerfile
    image: boulangermontrealais/barrios:caddy
    # image: registry.dylanbaird.com/caddy:latest
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /mertz/caddy/config:/config
      - /mertz/caddy/data:/data
    networks:
      - barrios-network
  immich-server:
    container_name: immich-server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - "2283:2283"
    depends_on:
      - immich-redis
      - immich-postgres
    restart: always
    healthcheck:
      disable: false
    networks:
      - barrios-network
  immich-machine-learning:
    container_name: immich-machine-learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - /mertz/immich/model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false
    networks:
      - barrios-network
  immich-redis:
    container_name: immich-redis
    image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
    networks:
      - barrios-network
  immich-postgres:
    container_name: immich-postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: "--data-checksums"
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: >-
        pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: >-
      postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
    restart: always
    networks:
      - barrios-network
  nextcloud:
    image: nextcloud:stable
    container_name: nextcloud
    ports:
      - "8080:80"
    volumes:
      - /mertz/nextcloud:/var/www/html
    environment:
      - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
      - NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
      - NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.dylanbaird.com localhost 127.0.0.1
      - OVERWRITEPROTOCOL=https
      - OVERWRITEHOST=nextcloud.dylanbaird.com
    env_file:
      - .env
    restart: unless-stopped
    networks:
      - barrios-network
  alloro:
    image: registry.dylanbaird.com/alloro:latest
    container_name: alloro
    volumes:
      - /mertz/alloro/data:/data
    environment:
      - ASPNETCORE_ENVIRONMENT=Development                                                                                
      - ConnectionStrings__ConnectionString=Data Source=/data/Alloro.db
    restart: unless-stopped                                                                                              
    networks:
      - barrios-network

  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "8081:80/tcp" # Web UI
    environment:
      TZ: 'America/Toronto'
      FTLCONF_webserver_api_password: ${PIHOLE_PASSWORD}
      FTLCONF_dns_listeningMode: 'ALL'
    volumes:
      - /mertz/pihole/etc-pihole:/etc/pihole
      - /mertz/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
    restart: unless-stopped
    networks:
      - barrios-network  
networks:
  barrios-network:
