{ "services": [ { "name": "sandbox-certs", "image": "n8nio/n8n-sandbox-service-api:1.3.0", "command": [ "bootstrap-mtls.sh --out-dir /tls --api-san sandbox-api --control-san-prefix sandbox-runner && chown -R sandbox-api:sandbox-api /tls/api /var/lib/n8n-sandbox-api\n" ], "entrypoint": [ "sh", "-c" ], "environment": { "NUM_RUNNERS": "1" }, "user": "0:0", "volumes": [ { "hostPath": "${APP_DATA_DIR}/data/tls", "containerPath": "/tls" }, { "hostPath": "${APP_DATA_DIR}/data/api", "containerPath": "/var/lib/n8n-sandbox-api" } ] }, { "name": "sandbox-api", "image": "n8nio/n8n-sandbox-service-api:1.3.0", "isMain": true, "internalPort": 8080, "addToMainNetwork": true, "environment": { "SANDBOX_API_KEYS": "${SANDBOX_API_KEYS}", "SANDBOX_API_RUNNER_REGISTRATION_TOKEN": "${SANDBOX_REGISTRATION_TOKEN}", "SANDBOX_API_RUNNER_API_KEY": "${SANDBOX_RUNNER_KEY}", "SANDBOX_API_GRPC_TLS_CERT_FILE": "/tls/api/grpc-server.crt", "SANDBOX_API_GRPC_TLS_KEY_FILE": "/tls/api/grpc-server.key", "SANDBOX_API_GRPC_TLS_CLIENT_CA_FILE": "/tls/api/ca.crt", "SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_CA_FILE": "/tls/api/ca.crt", "SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_CERT_FILE": "/tls/api/control-grpc-api-client.crt", "SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_KEY_FILE": "/tls/api/control-grpc-api-client.key", "SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_SERVER_NAME": "sandbox-runner-1" }, "volumes": [ { "hostPath": "${APP_DATA_DIR}/data/tls", "containerPath": "/tls", "readOnly": true }, { "hostPath": "${APP_DATA_DIR}/data/api", "containerPath": "/var/lib/n8n-sandbox-api" } ], "healthCheck": { "test": "wget -qO- http://localhost:8080/healthz", "interval": "5s", "timeout": "3s", "retries": 5, "startPeriod": "10s" }, "dependsOn": { "sandbox-certs": { "condition": "service_completed_successfully" } } }, { "name": "sandbox-runner-1", "image": "n8nio/n8n-sandbox-service-runner-dind:1.3.0", "environment": { "SANDBOX_RUNNER_API_KEYS": "${SANDBOX_RUNNER_KEY}", "SANDBOX_RUNNER_REGISTRATION_TOKEN": "${SANDBOX_REGISTRATION_TOKEN}", "SANDBOX_RUNNER_API_GRPC_ADDR": "sandbox-api:9090", "SANDBOX_RUNNER_HTTP_BASE_URL": "http://sandbox-runner-1:8080", "SANDBOX_RUNNER_CONTROL_GRPC_LISTEN_ADDR": ":9091", "SANDBOX_RUNNER_CONTROL_GRPC_ADVERTISE_ADDR": "sandbox-runner-1:9091", "SANDBOX_RUNNER_ID": "runner-1", "SANDBOX_RUNNER_DOCKER_SANDBOX_IMAGE": "n8nio/n8n-sandbox-service-sandbox:1.3.0", "SANDBOX_RUNNER_REGISTRATION_GRPC_CA_FILE": "/tls/runner/ca.crt", "SANDBOX_RUNNER_REGISTRATION_GRPC_CERT_FILE": "/tls/runner/grpc-client.crt", "SANDBOX_RUNNER_REGISTRATION_GRPC_KEY_FILE": "/tls/runner/grpc-client.key", "SANDBOX_RUNNER_REGISTRATION_GRPC_SERVER_NAME": "sandbox-api", "SANDBOX_RUNNER_CONTROL_GRPC_TLS_CERT_FILE": "/tls/runner/control-grpc-server.crt", "SANDBOX_RUNNER_CONTROL_GRPC_TLS_KEY_FILE": "/tls/runner/control-grpc-server.key", "SANDBOX_RUNNER_CONTROL_GRPC_TLS_CLIENT_CA_FILE": "/tls/runner/ca.crt" }, "privileged": true, "volumes": [ { "hostPath": "${APP_DATA_DIR}/data/tls", "containerPath": "/tls", "readOnly": true }, { "hostPath": "${APP_DATA_DIR}/data/runner-state", "containerPath": "/var/sandboxes" }, { "hostPath": "${APP_DATA_DIR}/data/runner-docker", "containerPath": "/var/lib/docker" } ], "healthCheck": { "test": "wget -qO- http://localhost:8080/readyz", "interval": "5s", "timeout": "5s", "retries": 24, "startPeriod": "20s" }, "dependsOn": { "sandbox-api": { "condition": "service_healthy" } } } ] }