services: shlink: image: shlinkio/shlink:stable container_name: shlink restart: unless-stopped depends_on: shlink-db: condition: service_healthy ports: - "${SHLINK_SERVER_PORT:-8500}:8080" environment: DEFAULT_DOMAIN: ${DEFAULT_DOMAIN} IS_HTTPS_ENABLED: ${IS_HTTPS_ENABLED:-true} GEOLITE_LICENSE_KEY: ${GEOLITE_LICENSE_KEY:-} INITIAL_API_KEY: ${INITIAL_API_KEY} DB_DRIVER: postgres DB_HOST: shlink-db DB_PORT: 5432 DB_NAME: ${POSTGRES_DB:-shlink} DB_USER: ${POSTGRES_USER:-shlink} DB_PASSWORD: ${POSTGRES_PASSWORD} TIMEZONE: ${TIMEZONE:-UTC} volumes: - shlink-data:/etc/shlink/data shlink-db: image: postgres:16-alpine container_name: shlink-db restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-shlink} POSTGRES_USER: ${POSTGRES_USER:-shlink} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - shlink-db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-shlink} -d ${POSTGRES_DB:-shlink}"] interval: 10s timeout: 5s retries: 5 shlink-dashboard: image: shlinkio/shlink-web-client:stable container_name: shlink-dashboard restart: unless-stopped depends_on: - shlink ports: - "${SHLINK_DASHBOARD_PORT:-8501}:8080" environment: SHLINK_SERVER_URL: ${SHLINK_PUBLIC_URL} SHLINK_SERVER_API_KEY: ${INITIAL_API_KEY} volumes: shlink-data: shlink-db-data: