main, then record
the exact revision in your deployment notes before upgrading it later.1234git clone https://github.com/bas3line/sandbox.git cd sandbox git checkout main git rev-parse HEAD
123456789101112131415sudo install -d -m 0700 /etc/sandbox sudo install -m 0600 /dev/null /etc/sandbox/runtime.env api_token=$(openssl rand -hex 32) node_token=$(openssl rand -hex 32) database_password=$(openssl rand -hex 32) sudo sh -c "printf '%s\n' \ 'SANDBOX_API_TOKEN=$api_token' \ 'SANDBOX_NODE_TOKEN=$node_token' \ 'POSTGRES_PASSWORD=$database_password' \ 'SANDBOX_PORT=127.0.0.1:8080' \ > /etc/sandbox/runtime.env" unset api_token node_token database_password
1234sudo docker compose \ --env-file /etc/sandbox/runtime.env \ -f deploy/compose/compose.yaml \ up --build -d
12345678910sudo docker compose \ --env-file /etc/sandbox/runtime.env \ -f deploy/compose/compose.yaml \ ps sudo docker compose \ --env-file /etc/sandbox/runtime.env \ -f deploy/compose/compose.yaml \ exec -T controller sh -lc \ 'SANDBOX_URL=http://127.0.0.1:8080 SANDBOX_TOKEN="$SANDBOX__SERVER__API_TOKEN" sandbox doctor'
1234sandbox create --tenant smoke --image alpine:3.22 --ttl 300 --network deny sandbox wait OPERATION_ID --timeout 120 sandbox exec SANDBOX_ID -- uname -a sandbox delete SANDBOX_ID --wait
OPERATION_ID and
SANDBOX_ID are placeholders, not literal input.8080 straight to the internet. Put the controller
behind an HTTPS reverse proxy or an outbound connector, then continue with
client setup. For wildcard service URLs and Cloudflare
Full (strict), use custom public domains./etc/sandbox/runtime.env. Do not commit it, paste it into an
issue, add it to an agent task, or send it through ordinary chat. Keep it
mode 0600 and rotate values if its boundary is ever in doubt.