- Unexposes port 5432 so it doesn't conflict with existing databases. You can still hop into the DB if you need. - Updates multiple CODER_ envs to sensible defaults, overrideable via env
365 lines
10 KiB
YAML
365 lines
10 KiB
YAML
# 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
|