Skip to content

Instantly share code, notes, and snippets.

@lynsei
Last active March 15, 2022 06:23
Show Gist options
  • Select an option

  • Save lynsei/fcbfdf5c1b63aa34237ed24fcaad855b to your computer and use it in GitHub Desktop.

Select an option

Save lynsei/fcbfdf5c1b63aa34237ed24fcaad855b to your computer and use it in GitHub Desktop.

Revisions

  1. lynsei revised this gist Mar 15, 2022. No changes.
  2. lynsei revised this gist Feb 8, 2022. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker-compose.yml
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@ version: "3.5"
    services:
    # PostgreSQL: the backing database which stores flow metadata
    postgres:
    image: "postgres:11"
    image: "postgres:14" # JSONB Subscripting is avail. in PG14!
    ports:
    - "127.0.0.1:${POSTGRES_HOST_PORT:-5432}:5432"
    environment:
  3. lynsei created this gist Feb 3, 2022.
    145 changes: 145 additions & 0 deletions docker-compose.yml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,145 @@
    version: "3.5"
    # Features driving version requirement
    # - networks.name 3.5
    # - healthcheck.start_period 2.3
    # - healthcheck 2.1

    services:
    # PostgreSQL: the backing database which stores flow metadata
    postgres:
    image: "postgres:11"
    ports:
    - "127.0.0.1:${POSTGRES_HOST_PORT:-5432}:5432"
    environment:
    POSTGRES_USER: ${POSTGRES_USER}
    POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    POSTGRES_DB: ${POSTGRES_DB}
    volumes:
    - ${POSTGRES_DATA_PATH}:/var/lib/postgresql/data
    networks:
    - prefect-server
    command:
    - "postgres"
    # explicitly set max connections
    - "-c"
    - "max_connections=150"
    healthcheck:
    test: pg_isready -q -d $${POSTGRES_DB} -U $${POSTGRES_USER} || exit 1
    interval: 10s
    timeout: 2s
    retries: 60
    start_period: 2s
    restart: always

    # Hasura: automatically generates a GraphQL schema from Postgres, provides most of the 'query' API
    hasura:
    image: "hasura/graphql-engine:v2.1.1"
    ports:
    - "127.0.0.1:${HASURA_HOST_PORT:-3000}:3000"
    command: "graphql-engine serve"
    environment:
    HASURA_GRAPHQL_DATABASE_URL: ${DB_CONNECTION_URL}
    HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
    HASURA_GRAPHQL_SERVER_PORT: "3000"
    HASURA_GRAPHQL_QUERY_PLAN_CACHE_SIZE: 100
    HASURA_GRAPHQL_LOG_LEVEL: "warn"
    HASURA_GRAPHQL_V1_BOOLEAN_NULL_COLLAPSE: "true"
    networks:
    - prefect-server
    healthcheck:
    test: wget -O - http://hasura:$${HASURA_GRAPHQL_SERVER_PORT}/healthz &>/dev/null || exit 1
    interval: 10s
    timeout: 2s
    retries: 60
    start_period: 1s
    restart: always
    depends_on:
    - postgres

    # GraphQL: provides most of the 'mutation' GraphQL API
    graphql:
    image: "prefecthq/server:${PREFECT_SERVER_TAG:-latest}"
    ports:
    - "127.0.0.1:${GRAPHQL_HOST_PORT:-4201}:4201"
    command: bash -c "${PREFECT_SERVER_DB_CMD} && python src/prefect_server/services/graphql/server.py"
    environment:
    PREFECT_SERVER_DB_CMD: ${PREFECT_SERVER_DB_CMD:-"echo 'DATABASE MIGRATIONS SKIPPED'"}
    PREFECT_SERVER__DATABASE__CONNECTION_URL: ${DB_CONNECTION_URL}
    PREFECT_SERVER__HASURA__ADMIN_SECRET: ${PREFECT_SERVER__HASURA__ADMIN_SECRET:-hasura-secret-admin-secret}
    PREFECT_SERVER__HASURA__HOST: hasura
    PREFECT_CORE_VERSION: ${PREFECT_CORE_VERSION:-"UNKNOWN"}
    networks:
    - prefect-server
    healthcheck:
    test: curl --fail --silent "http://graphql:4201/health" &> /dev/null || exit 1
    interval: 20s
    timeout: 2s
    retries: 60
    start_period: 1s
    restart: always
    depends_on:
    - hasura

    # Towel: runs a collection of simple services
    towel:
    image: "prefecthq/server:${PREFECT_SERVER_TAG:-latest}"
    command: "python src/prefect_server/services/towel/__main__.py"
    environment:
    PREFECT_SERVER__HASURA__ADMIN_SECRET: ${PREFECT_SERVER__HASURA__ADMIN_SECRET:-hasura-secret-admin-secret}
    PREFECT_SERVER__HASURA__HOST: hasura
    networks:
    - prefect-server
    restart: "always"
    depends_on:
    - graphql

    # Apollo: combines the hasura and graphql schemas into a unified schema, the primary API entrypoint
    apollo:
    image: "prefecthq/apollo:${PREFECT_SERVER_TAG:-latest}"
    ports:
    - "${APOLLO_HOST_IP:-127.0.0.1}:${APOLLO_HOST_PORT:-4200}:4200"
    command: bash -c "./post-start.sh && npm run serve"
    environment:
    HASURA_API_URL: ${HASURA_API_URL:-http://hasura:3000/v1alpha1/graphql}
    PREFECT_API_URL: ${PREFECT_API_URL:-http://graphql:4201/graphql/}
    PREFECT_API_HEALTH_URL: ${PREFECT_API_HEALTH_URL:-http://graphql:4201/health}
    PREFECT_SERVER__TELEMETRY__ENABLED: ${PREFECT_SERVER__TELEMETRY__ENABLED:-true}
    GRAPHQL_SERVICE_HOST: http://graphql
    GRAPHQL_SERVICE_PORT: 4201
    networks:
    - prefect-server
    healthcheck:
    test: curl --fail --silent "http://apollo:4200/.well-known/apollo/server-health" &> /dev/null || exit 1
    interval: 10s
    timeout: 2s
    retries: 60
    start_period: 1s
    restart: always
    depends_on:
    - graphql
    - hasura

    # UI: the user interface that provides a visual dashboard for mutating and querying metadata
    # The UI is a standalone web interface and only communicates with the Apollo GraphQL API via
    # the host from which it is accessed (i.e. the user's browser) .
    ui:
    image: "prefecthq/ui:${PREFECT_UI_TAG:-latest}"
    ports:
    - "${UI_HOST_IP:-127.0.0.1}:${UI_HOST_PORT:-8080}:8080"
    command: "/intercept.sh"
    environment:
    PREFECT_SERVER__APOLLO_URL: ${APOLLO_URL:-http://localhost:4200/graphql}
    networks:
    - prefect-server
    healthcheck:
    test: curl --fail --silent --head "http://ui:8080/" &> /dev/null || exit 1
    interval: 30s
    timeout: 5s
    retries: 3
    restart: always
    depends_on:
    - apollo

    networks:
    prefect-server:
    name: prefect-server