name: leverframe services: reviewer: build: context: . target: reviewer image: leverframe-reviewer:local init: true restart: unless-stopped stop_grace_period: 2m env_file: - .env environment: APP_DATA_DIRECTORY: ${APP_DATA_DIRECTORY:?Set APP_DATA_DIRECTORY in .env} APP_HOST: 0.0.0.0 APP_PORT: '6571' REVIEW_SANDBOX_TEMPLATE: ${REVIEW_SANDBOX_TEMPLATE:?Install the local review sandbox template and set REVIEW_SANDBOX_TEMPLATE in .env} ports: - '${REVIEWER_BIND_ADDRESS:-127.0.0.1}:${REVIEWER_PORT:-6571}:6571' volumes: - ${APP_DATA_DIRECTORY:?Set APP_DATA_DIRECTORY in .env}:${APP_DATA_DIRECTORY:?Set APP_DATA_DIRECTORY in .env} - ${SANDBOX_CLI_PATH:-/usr/bin/sbx}:/usr/local/bin/sbx:ro - ${HOME}/.config/com.docker.sandboxes:/home/node/.config/com.docker.sandboxes - ${HOME}/.config/sandboxes:/home/node/.config/sandboxes - ${HOME}/.local/state/sandboxes/sandboxes/sandboxd:/home/node/.local/state/sandboxes/sandboxes/sandboxd:ro - ${HOME}/.agents/skills:/agent-skills:ro healthcheck: test: [ 'CMD', 'node', '--input-type=module', '-e', "fetch('http://127.0.0.1:6571/healthz').then((response) => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))", ] interval: 30s timeout: 10s retries: 3 start_period: 10s web: build: context: . target: web image: leverframe-web:local init: true restart: unless-stopped environment: HOSTNAME: 0.0.0.0 NODE_ENV: production PORT: '6572' REVIEWER_INTERNAL_URL: http://reviewer:6571 ports: - '${WEB_BIND_ADDRESS:-127.0.0.1}:${WEB_PORT:-6572}:6572' healthcheck: test: [ 'CMD', 'node', '--input-type=module', '-e', "fetch('http://127.0.0.1:6572/en/reviews').then((response) => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))", ] interval: 30s timeout: 10s retries: 3 start_period: 15s