# docker-dev/docker-compose.script-runner.yml — optional overlay: run the central pair's VirtualTag + Calculation # scripts OUT OF PROCESS (lmxopcua#780, Scripting:Runner=OutOfProcess). The scripted-alarm seam stays in process; to # move it too (last in the rollout, design §14 #10) add `Scripting__Runner__Seams__2: "ScriptedAlarm"` below. # # Up (recreates only the two central nodes with the extra env; the image must be built from a branch that has the # runner, i.e. `docker compose -f docker-dev/docker-compose.yml build central-1` first): # docker compose -f docker-dev/docker-compose.yml -f docker-dev/docker-compose.script-runner.yml up -d --no-deps central-1 central-2 # Back to InProcess (the default and the rollback): re-run `up -d --no-deps central-1 central-2` with the base file alone. # # Watch it: `docker exec ps -eo pid,args | grep ScriptWorker` lists the shard workers (they start on the first # compiled evaluation, not at boot); `/metrics` on :9000 carries otopcua_script_* (runner state, worker up/inflight, # eval duration, compile cache); `/health/ready` carries the `script-runner` entry (Degraded at worst, never 503). # PeCacheDir is container-local (/tmp), so a container recreate starts with a cold cache. x-script-runner-env: &script-runner-env Scripting__Runner: "OutOfProcess" Scripting__Runner__Seams__0: "VirtualTag" Scripting__Runner__Seams__1: "Calculation" Scripting__Worker__PeCacheDir: "/tmp/otopcua-pe-cache" services: central-1: environment: <<: *script-runner-env central-2: environment: <<: *script-runner-env