Ctrl K
ComunidadGuías…

compose.dev.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# docker-compose.dev.yml — Development environment
services:
  database:
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: postgres:17
    environment:
      POSTGRES_USER: coder
      POSTGRES_PASSWORD: coder
      POSTGRES_DB: coder
    volumes:
      - coder_dev_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U coder"]
      interval: 2s
      timeout: 5s
      retries: 10

  # Ensure named volumes are owned by the coder user (uid 1000)
  # since Docker creates them as root by default.
  init-volumes:
    labels:
      - "com.coder.dev"
    image: codercom/oss-dogfood:latest
    user: "0:0"
    volumes:
      - go_cache:/go-cache
      - coder_cache:/cache
      - bootstrap_token:/bootstrap
      - site_node_modules:/app/site/node_modules
    command: >
      chown -R 1000:1000
        /go-cache
        /cache
        /bootstrap
        /app/site/node_modules

  build-slim:
    labels:
      - "com.coder.dev"
    network_mode: "host"
    image: codercom/oss-dogfood:latest
    depends_on:
      init-volumes:
        condition: service_completed_successfully
      database:
        condition: service_healthy
    working_dir: /app
    # Add the Docker group so coderd can access the Docker socket.
    # If your Docker group is not 999, the below should work:
    # export DOCKER_GROUP=$(getent group docker | cut -d: -f3)
    group_add:
      - "${DOCKER_GROUP:-999}"
    environment:
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
      DOCKER_HOST: "${CODER_DEV_DOCKER_HOST:-unix:///var/run/docker.sock}"
    volumes:
      - .:/app
      - go_cache:/go-cache
      - coder_cache:/cache
      - "${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock"
    command: >
      sh -c '
        if [ "${CODER_BUILD_AGPL:-0}" = "1" ]; then
          make -j build-slim CODER_BUILD_AGPL=1
        else
          make -j build-slim
        fi &&
        mkdir -p /cache/site/orig/bin &&
        cp site/out/bin/coder-* /cache/site/orig/bin/
      '

  coderd:
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      database:
        condition: service_healthy
      build-slim:
        condition: service_completed_successfully
    environment:
      CODER_ACCESS_URL: "${CODER_DEV_ACCESS_URL-http://localhost:3000}"
      CODER_CACHE_DIRECTORY: "${CODER_CACHE_DIRECTORY-/cache}"
      CODER_DANGEROUS_ALLOW_CORS_REQUESTS: "${CODER_DANGEROUS_ALLOW_CORS_REQUESTS-true}"
      CODER_DEV_ADMIN_PASSWORD: "${CODER_DEV_ADMIN_PASSWORD-SomeSecurePassword!}"
      CODER_EXPERIMENTS: "${CODER_EXPERIMENTS-*}"
      CODER_HTTP_ADDRESS: "${CODER_HTTP_ADDRESS-0.0.0.0:3000}"
      CODER_PG_CONNECTION_URL: "${CODER_PG_CONNECTION_URL-postgresql://coder:coder@database:5432/coder?sslmode=disable}"
      CODER_PROMETHEUS_ENABLE: "${CODER_PROMETHEUS_ENABLE-true}"
      CODER_SWAGGER_ENABLE: "${CODER_SWAGGER_ENABLE-true}"
      CODER_TELEMETRY_ENABLE: "${CODER_TELEMETRY_ENABLE-false}"
      CODER_VERBOSE: "${CODER_VERBOSE-true}"
      DOCKER_HOST: "${CODER_DEV_DOCKER_HOST-unix:///var/run/docker.sock}"
      GOCACHE: /go-cache/build
      GOMODCACHE: /go-cache/mod
    # Add the Docker group so coderd can access the Docker socket.
    # Override DOCKER_GROUP if your host's docker group is not 999.
    group_add:
      - "${DOCKER_GROUP:-999}"
    ports:
      - "3000:3000"
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:3000/healthz || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 30
      start_period: 120s
    working_dir: /app
    volumes:
      - .:/app
      - go_cache:/go-cache
      - coder_cache:/cache
      - "${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock"
    command: >
      sh -c '
        CMD_PATH="./enterprise/cmd/coder"
        [ "${CODER_BUILD_AGPL:-0}" = "1" ] && CMD_PATH="./cmd/coder"
        exec go run "$$CMD_PATH" server \
          --http-address 0.0.0.0:3000 \
          --access-url "${CODER_DEV_ACCESS_URL:-http://localhost:3000}" \
          --swagger-enable \
          --dangerous-allow-cors-requests=true \
          --enable-terraform-debug-mode
      '

  setup-init:
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      coderd:
        condition: service_healthy
    working_dir: /app
    environment:
      CODER_URL: "http://coderd:3000"
      CODER_DEV_ADMIN_PASSWORD: "${CODER_DEV_ADMIN_PASSWORD:-SomeSecurePassword!}"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap
      - ./scripts/docker-dev:/scripts:ro
    command: ["sh", "/scripts/setup-init.sh"]

  setup-users:
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-init:
        condition: service_completed_successfully
    working_dir: /app
    environment:
      CODER_URL: "http://coderd:3000"
      CODER_DEV_MEMBER_PASSWORD: "${CODER_DEV_MEMBER_PASSWORD:-SomeSecurePassword!}"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap:ro
      - ./scripts/docker-dev:/scripts:ro
    command: ["sh", "/scripts/setup-users.sh"]

  setup-template:
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-init:
        condition: service_completed_successfully
    working_dir: /app
    environment:
      CODER_URL: "http://coderd:3000"
      DOCKER_HOST: "${CODER_DEV_DOCKER_HOST:-unix:///var/run/docker.sock}"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap:ro
      - ./scripts/docker-dev:/scripts:ro
      - "${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock"
    command: ["sh", "/scripts/setup-template.sh"]

  site:
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-template:
        condition: service_completed_successfully
    working_dir: /app/site
    environment:
      CODER_HOST: "http://coderd:3000"
    ports:
      - "8080:8080"
    volumes:
      - ./site:/app/site
      - site_node_modules:/app/site/node_modules
    command: sh -c "pnpm install --frozen-lockfile && pnpm dev --host"

  wsproxy:
    profiles: ["proxy"]
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-init:
        condition: service_completed_successfully
    working_dir: /app
    environment:
      CODER_URL: "http://coderd:3000"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap:ro
    ports:
      - "3010:3010"
    command: >
      sh -c '
        export CODER_SESSION_TOKEN=$$(cat /bootstrap/token) &&
        go run ./cmd/coder wsproxy delete local-proxy --yes 2>/dev/null || true
        PROXY_TOKEN=$$(go run ./cmd/coder wsproxy create \
          --name=local-proxy \
          --display-name="Local Proxy" \
          --icon="/emojis/1f4bb.png" \
          --only-token)
        exec go run ./cmd/coder wsproxy server \
          --dangerous-allow-cors-requests=true \
          --http-address=0.0.0.0:3010 \
          --proxy-session-token="$$PROXY_TOKEN" \
          --primary-access-url=http://coderd:3000
      '

  setup-multi-org:
    profiles: ["multi-org"]
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-users:
        condition: service_completed_successfully
      setup-template:
        condition: service_completed_successfully
    working_dir: /app
    environment:
      CODER_URL: "http://coderd:3000"
      DOCKER_HOST: "${CODER_DEV_DOCKER_HOST:-unix:///var/run/docker.sock}"
      LICENSE_FILE: "${CODER_DEV_LICENSE_FILE:-./license.txt}"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap:ro
      - ./scripts/docker-dev:/scripts:ro
      - "${CODER_DEV_LICENSE_FILE:-./license.txt}:/license.txt:ro"
    command: ["sh", "/scripts/setup-multi-org.sh"]

  ext-provisioner:
    profiles: ["multi-org"]
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    healthcheck:
      test: ["CMD", "curl", "--fail", "http://localhost:2112"]
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-multi-org:
        condition: service_completed_successfully
    group_add:
      - "${DOCKER_GROUP:-999}"
    working_dir: /app
    environment:
      CODER_URL: "${CODER_URL-http://coderd:3000}"
      DOCKER_HOST: "${CODER_DEV_DOCKER_HOST-unix:///var/run/docker.sock}"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
      CODER_PROMETHEUS_ENABLE: "${CODER_PROMETHEUS_ENABLE-1}"
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap:ro
      - "${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock"
    command: >
      sh -c '
        export CODER_SESSION_TOKEN=$$(cat /bootstrap/token) &&
        exec go run ./enterprise/cmd/coder provisionerd start \
          --tag "scope=organization" \
          --name second-org-daemon \
          --org second-organization
      '

  setup-multi-org-template:
    profiles: ["multi-org"]
    labels:
      - "com.coder.dev"
    networks:
      - coder-dev
    image: codercom/oss-dogfood:latest
    depends_on:
      setup-multi-org:
        condition: service_completed_successfully
      ext-provisioner:
        condition: service_healthy
    working_dir: /app
    environment:
      CODER_URL: "http://coderd:3000"
      GOMODCACHE: /go-cache/mod
      GOCACHE: /go-cache/build
    volumes:
      - .:/app
      - go_cache:/go-cache
      - bootstrap_token:/bootstrap:ro
      - ./scripts/docker-dev:/scripts:ro
    command: ["sh", "-c", "/scripts/setup-template.sh second-organization"]


volumes:
  coder_dev_data:
    labels:
      - "com.coder.dev"
  go_cache:
    labels:
      - "com.coder.dev"
  coder_cache:
    labels:
      - "com.coder.dev"
  site_node_modules:
    labels:
      - "com.coder.dev"
  bootstrap_token:
    labels:
      - "com.coder.dev"

networks:
  coder-dev:
    labels:
      - "com.coder.dev"
    name: coder-dev
    driver: bridge