Files
coolify/tests/Fixtures/parser/application-reference.yaml

145 lines
3.9 KiB
YAML

# Reference compose for the application parser (Docker Compose build pack, applicationParser).
# Test-only: tests/Feature/ServiceParserReferenceTest.php parses it and compares the result
# with tests/Fixtures/parser/expected/application-*.yaml. Each service covers one group of parser features.
services:
# Domain from a magic variable with a port, all environment syntaxes, magic secrets, labels, volumes.
web:
build:
context: .
dockerfile: Dockerfile
args:
- BUILD_VERSION=${BUILD_VERSION:-1.0.0}
environment:
- SERVICE_URL_WEB_3000
- LITERAL=plain-value
- BARE_PASSTHROUGH
- WITH_DEFAULT=${WITH_DEFAULT:-fallback}
- REQUIRED=${REQUIRED:?REQUIRED must be set}
- NO_BRACES=$NO_BRACES_VALUE
- NESTED=${NESTED_OUTER:-${NESTED_INNER:-inner-default}}
- NESTED_NO_DEFAULT=${NESTED_NO_DEFAULT_OUTER:-${NESTED_NO_DEFAULT_INNER}}
- DASH_DEFAULT=${DASH_DEFAULT_VAR-dash-default}
- NO_BRACES_DEFAULT=$NO_BRACES_DEFAULT_VAR:-no-braces-default
- NO_BRACES_MAGIC=$SERVICE_PASSWORD_NOBRACES
- SELF_REF=${SELF_REF}
- SHARED={{environment.SHARED_KEY}}
- PASSWORD=${SERVICE_PASSWORD_WEB}
- BASE64_64=${SERVICE_BASE64_64_WEB}
- HEX_32=${SERVICE_HEX_32_WEB}
- USER=${SERVICE_USER_WEB}
- API_URL=${SERVICE_URL_API}
labels:
com.example.team: platform
com.example.dollar: price-$5
volumes:
- web-data:/app/data
- ./config:/app/config:ro
- ./selinux:/app/selinux:z
- /var/run/docker.sock:/var/run/docker.sock:ro
- type: bind
source: ./web-init.sh
target: /docker-entrypoint.d/init.sh
read_only: true
content: |
#!/bin/sh
echo "application reference fixture"
depends_on:
db:
condition: service_healthy
# Path value with FQDN declaration, image only, ports, map-style environment.
api:
image: node:22-alpine
environment:
SERVICE_FQDN_API: /api
MAP_LITERAL: map-value
MAP_NULL:
# Empty value: filled from the stored variable (the preview variable for a pull request).
MAP_EMPTY_FROM_DATABASE: ''
ports:
- "3001:3001"
- target: 3002
published: 3002
protocol: tcp
expose:
- 3001
volumes:
- shared-external:/shared
- nfs-data:/mnt/nfs
# Hyphenated and dotted service names.
my-app:
image: httpd:2.4-alpine
environment:
- SERVICE_URL_MY_APP_80
api.v2:
image: traefik/whoami
# SERVICE_FQDN_ declaration with a port.
admin:
image: nginx:alpine
environment:
- SERVICE_FQDN_ADMIN_8080
networks:
internal:
ipv4_address: 172.30.0.10
# Ghost image with a path domain: extra redirect labels.
blog:
image: ghost:5-alpine
environment:
- SERVICE_URL_BLOG_2368=/blog
# Database image: no domain, no proxy labels.
db:
image: postgres:16-alpine
environment:
- POSTGRES_USER=${SERVICE_USER_DB}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_DB}
- POSTGRES_DB=app
volumes:
- db-data:/var/lib/postgresql/data
networks:
- internal
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER}"]
interval: 5s
# restart "no", network_mode and a worker without a domain.
sidecar:
image: busybox
restart: "no"
network_mode: "service:web"
command: ["true"]
worker:
image: node:22-alpine
command: ["node", "worker.js"]
environment:
- APP_URL=${SERVICE_URL_WEB}
- APP_URL_WITH_PORT=${SERVICE_URL_WEB_3000}
- API_HOST=${SERVICE_FQDN_API}
depends_on:
- db
volumes:
web-data:
db-data:
driver_opts:
type: none
o: bind
device: /srv/db
shared-external:
external: true
nfs-data:
driver_opts:
type: nfs
o: addr=10.0.0.2,rw
device: ":/exports/data"
networks:
internal:
default:
aliased:
aliases:
- alias-name