compose.ymlΒΆ

---
x-ci-defaults: &ci_defaults
  dns:
    - ${INFINITO_DNS_IP}
  dns_opt:
    - ndots:1

services:
  coredns:
    image: coredns/coredns:1.14.4
    container_name: ${INFINITO_RUNNER_PREFIX:?Run 'make dotenv' to generate the .env single source of truth}-coredns
    command: ["-conf", "/Corefile"]
    volumes:
      - ./compose/coredns/Corefile:/Corefile:ro
    networks:
      default:
        ipv4_address: ${INFINITO_DNS_IP}

  infinito:
    networks:
      default:
        ipv4_address: ${INFINITO_IP4}
    build:
      context: .
      dockerfile: Dockerfile
      args:
        INFINITO_PARENT_IMAGE: ${INFINITO_PARENT_IMAGE:?Run 'make dotenv' to generate the .env single source of truth}
        INFINITO_SRC_DIR: ${INFINITO_SRC_DIR:?Run 'make dotenv' to generate the .env single source of truth}
        INFINITO_PACKAGE_INSTALL_SCRIPT: ${INFINITO_PACKAGE_INSTALL_SCRIPT:?Run 'make dotenv' to generate the .env single source of truth}
        INFINITO_PYTHON_INSTALL_SCRIPT: ${INFINITO_PYTHON_INSTALL_SCRIPT:?Run 'make dotenv' to generate the .env single source of truth}
        INFINITO_DOCKER_CLI_INSTALL_SCRIPT: ${INFINITO_DOCKER_CLI_INSTALL_SCRIPT:?Run 'make dotenv' to generate the .env single source of truth}
        INFINITO_VENV_DIR: ${INFINITO_VENV_DIR:?Run 'make dotenv' to generate the .env single source of truth}
        NIX_CONFIG: ${NIX_CONFIG}
    image: "${INFINITO_IMAGE}"
    pull_policy: "${INFINITO_PULL_POLICY:?Run 'make dotenv' to generate the .env single source of truth}"
    depends_on:
      coredns:
        condition: service_started

    command:
      - /sbin/init
      - systemd.log_target=console
      - systemd.log_level=debug
      - systemd.journald.forward_to_console=1
      - systemd.journald.max_level_console=debug

    stop_signal: SIGRTMIN+3

    privileged: true
    cgroup: host
    tmpfs:
      - /run
      - /run/lock

    tty: true
    stdin_open: true

    container_name: ${INFINITO_CONTAINER:?Run 'make dotenv' to generate the .env single source of truth}
    restart: "no"
    mem_limit: ${INFINITO_MEM_LIMIT:?Run 'make dotenv' to generate the .env single source of truth}
    memswap_limit: ${INFINITO_MEMSWAP_LIMIT:?Run 'make dotenv' to generate the .env single source of truth}
    cpus: ${INFINITO_CPUS:?Run 'make dotenv' to generate the .env single source of truth}
    <<: *ci_defaults
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:rw
      - .:${INFINITO_SRC_DIR}
      - ${INFINITO_DOCKER_VOLUME:?Run 'make dotenv' to generate the .env single source of truth}:${INFINITO_DOCKER_MOUNT:?Run 'make dotenv' to generate the .env
        single source of truth}
      - infinito:${INFINITO_DIR_VAR_LIB:?Run 'make dotenv' to generate the .env single source of truth}/
      - letsencrypt:/etc/letsencrypt/

    environment:
      INFINITO_API_ANTHROPIC_KEY: ${INFINITO_API_ANTHROPIC_KEY}
      INFINITO_API_OPENAI_KEY: ${INFINITO_API_OPENAI_KEY}
      INFINITO_API_OPENROUTER_KEY: ${INFINITO_API_OPENROUTER_KEY}
      INFINITO_BUILDKIT_ENABLED: ${INFINITO_BUILDKIT_ENABLED}
      INFINITO_CONTAINER_CA_ENABLED: ${INFINITO_CONTAINER_CA_ENABLED}
      INFINITO_DIR_VAR_LIB: ${INFINITO_DIR_VAR_LIB}
      INFINITO_DNS_IP: ${INFINITO_DNS_IP}
      INFINITO_DOMAIN: ${INFINITO_DOMAIN}
      INFINITO_DOTENV_HOST_OWNED: "true"
      INFINITO_GHCR_MIRROR_PREFIX: ${INFINITO_GHCR_MIRROR_PREFIX}
      INFINITO_IMAGE_TAG: ${INFINITO_IMAGE_TAG}
      INFINITO_IP4: ${INFINITO_IP4}
      INFINITO_IP6: ${INFINITO_IP6}
      INFINITO_MAIL_PRODUCTION_HOST: ${INFINITO_MAIL_PRODUCTION_HOST}
      INFINITO_MAIL_PRODUCTION_RESOLVER: ${INFINITO_MAIL_PRODUCTION_RESOLVER}
      INFINITO_PLAYWRIGHT_KEEP: ${INFINITO_PLAYWRIGHT_KEEP}
      INFINITO_PLAYWRIGHT_REPORTS_BASE_DIR: ${INFINITO_PLAYWRIGHT_REPORTS_BASE_DIR}
      INFINITO_SRC_DIR: ${INFINITO_SRC_DIR}
      INFINITO_SWARM_MGR_IP: ${INFINITO_SWARM_MGR_IP}
      INFINITO_TOR_SOCKS_PORT: ${INFINITO_TOR_SOCKS_PORT}
      PYTHONHTTPSVERIFY: "1"
      GIT_SSL_NO_VERIFY: "0"

    ports:
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:25:25"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:110:110"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:143:143"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:465:465"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:587:587"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:993:993"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:995:995"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:4190:4190"

      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:80:80"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:443:443"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:8448:8448"

      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:3478-3480:3478-3480/udp"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:3478-3480:3478-3480"

      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:1935:1935"

      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:2201:2201"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:2202:2202"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:2203:22"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:33552:33552"

      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:48081-48083:48081-48083"
      - "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:48087:48087"

volumes:
  docker:
  infinito:
  letsencrypt:
networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: "${INFINITO_OUTER_NETWORK_MTU:?Run 'make dotenv' to generate the .env single source of truth}"
    ipam:
      config:
        - subnet: ${INFINITO_SUBNET:?Run 'make dotenv' to generate the .env single source of truth}
          ip_range: ${INFINITO_IP_RANGE:?Run 'make dotenv' to generate the .env single source of truth}
          gateway: ${INFINITO_GATEWAY:?Run 'make dotenv' to generate the .env single source of truth}