phoenix Docker & Self-Hosted Deployment

GitHub

Peace of mind from prototype to production

23,113 stars Elixir Elixir 1 file ยท ~27,894 tokens #api-server#distributed#elixir#realtime#web-framework
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/postgres
2. Docker Run (1-Click Launch) docker run -d --name phoenix --restart always postgres:18
3. Podman Run podman run -d --name phoenix --restart always postgres:18
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/postgres:18
5. ORAS Pull (OCI Artifact) oras pull postgres:18
6. Compose Deployment docker compose up -d
integration_test/docker-compose.yml
Download .yml
services:
  postgresql:
    image: postgres:18
    command: -c max_connections=300
    environment:
      POSTGRES_PASSWORD: postgres
    tmpfs:
      - /var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres -h 127.0.0.1"]
      start_period: 60s
      start_interval: 2s
      interval: 120s
      timeout: 3s
      retries: 1

  mysql:
    image: mysql:26
    command: --max-connections=300
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    tmpfs:
      - /var/lib/mysql
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 --protocol=TCP --silent"]
      start_period: 60s
      start_interval: 2s
      interval: 120s
      timeout: 3s
      retries: 1

  mssql:
    profiles:
      - mssql
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "some!Password"
    tmpfs:
      - /var/opt/mssql
    healthcheck:
      test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P \"$$SA_PASSWORD\" -C -Q 'SELECT 1' 2>/dev/null || /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P \"$$SA_PASSWORD\" -Q 'SELECT 1' 2>/dev/null"]
      start_period: 60s
      start_interval: 2s
      interval: 120s
      timeout: 3s
      retries: 1

  runner:
    profiles:
      - runner
    build:
      context: .
      dockerfile: Dockerfile
      args:
        - ELIXIR_IMAGE_TAG
    image: phoenix-integration-runner:${ELIXIR_IMAGE_TAG}
    init: true
    volumes:
      - ..:/phoenix
      - build_cache:/phoenix/integration_test/_build
      - deps_cache:/phoenix/integration_test/deps
      - installer_generated_apps_tmp:/phoenix/installer/tmp
    working_dir: /phoenix/integration_test
    environment:
      ELIXIR_ASSERT_TIMEOUT: 10000
      MIX_OS_DEPS_COMPILE_PARTITION_COUNT: ${MIX_OS_DEPS_COMPILE_PARTITION_COUNT:-2}
      MAKEFLAGS: ${MAKEFLAGS:--j2}
    depends_on:
      postgresql:
        condition: service_healthy
      mysql:
        condition: service_healthy
      mssql:
        condition: service_healthy
        required: false

volumes:
  build_cache:
    name: phoenix_integration_build_cache_${ELIXIR_IMAGE_TAG}
  deps_cache:
    name: phoenix_integration_deps_cache_${ELIXIR_IMAGE_TAG}
  installer_generated_apps_tmp: