Coolify
Project Go Straight, environment development, service project-gostraight-dev. Compose only, no git source, no domain.
project-gostraight is a local-only Rust repo (Streets of Rage 2, clean-room) at /home/daz/Code/project-gostraight on dbb-server. That server copy is the source of truth. main is dbd96db after the history scrub: colour tables are not in git. There is still no git remote. Creating private darrenbarklie/project-gostraight returned 403 createRepository, so nothing was pushed. A Cursor worker or Grok Build works in that path, then runs builds and tests with gostraight-dev. The host never gets a Rust toolchain. The Mac rsync into this tree is retired.
Coolify
Project Go Straight, environment development, service project-gostraight-dev. Compose only, no git source, no domain.
Network
network_mode: none. The container has a loopback interface and nothing else. cargo fetch runs in a separate throwaway container.
Limits
2 CPUs, 4 GB, CPU shares 128, 2048 processes. It stays up on sleep infinity and does not compete with other services.
| Item | Value |
|---|---|
| Project | Go Straight (zhn5cstkc4a6w4hsjb98jg0m) |
| Environment | development (hmku0t2gg82mlvqqsfj12ryk) |
| Service | project-gostraight-dev (rombpvt7yh12b79dekwdnb1f) |
| Panel | coolify.server.daz.dev (Tailscale-only) |
| Compose | platform/compose/project-gostraight-dev.yml |
| Command | platform/gostraight/gostraight-dev, installed to ~/.local/bin/gostraight-dev. ~/.local/bin/go-straight-dev is a symlink to it. |
| Create or update | platform/deploy-gostraight.sh [--start] |
| Local backup | Nightly git bundle --all at 03:30 Europe/Isle_of_Man into /home/daz/_backups-git/project-gostraight/ (mode 700), last 7 kept. Off-server copies come later with R2. |
The base is the official rust:1.99.1-slim-bookworm, pinned by tag and by digest sha256:f2c004e3d2d8b547e8cf7ffbc29205385f4e71d23e53e4e383065db5e9f822cd. A short inline Dockerfile in the compose file adds pkg-config, libasound2-dev and libudev-dev, which the crate’s cpal and gilrs dependencies need to build, plus user daz (uid and gid 1000). The built image is go-straight-dev:rust-1.99.1-bookworm. The image tag was kept through the path rename so Coolify does not rebuild it. The exceptions register in Conventions records the derived image.
The container runs as 1000:1000, so every file it writes in /work belongs to daz. Capabilities are all dropped and no-new-privileges is on. blkio_config.weight is 10. The disks use the none and mq-deadline schedulers, which ignore the weight, so CPU and memory are the limits that hold.
| Path in the container | Source | Purpose |
|---|---|---|
/work |
Bind mount of /home/daz/Code/project-gostraight (daz:daz, mode 750) |
The working tree. The server copy is the source of truth. |
/cargo-home |
Named volume <service uuid>_cargo-home |
CARGO_HOME: registry and git cache. |
/cargo-target |
Named volume <service uuid>_cargo-target |
CARGO_TARGET_DIR: build output, outside /work. |
No other mount exists. There is no ROM folder and no ROM mount. A ROM is not part of this service. A rename of the Coolify service keeps the same uuid, so the two named volumes stay and the cargo cache is not rebuilt.
The service sets network_mode: none. Coolify 4.x leaves a service with a network_mode out of its own networks, so the container joins nothing: no coolify network, no Docker bridge, no route. A DNS lookup and a TCP connection both fail. CARGO_NET_OFFLINE=true is set as well, and gostraight-dev test passes --offline.
gostraight-dev fetch is the only step with network. It starts a throwaway container (docker run --rm) from the same image, with the same volumes (--volumes-from), user, CPU and memory limits, all capabilities dropped, and the default bridge network. It runs cargo fetch --locked, which downloads crates into /cargo-home and runs no build scripts, proc macros or tests. The container is removed when the command exits.
The command needs sudo for Docker, which daz has without a password. It finds the container by the Coolify labels coolify.resourceName=project-gostraight-dev and com.docker.compose.service=rust, never by a uuid suffix.
gostraight-dev shell # bash in /work as uid 1000, no networkgostraight-dev test [args] # nice -n 19 cargo test --offline in /workgostraight-dev exec <cmd...> # any command in /work, no networkgostraight-dev fetch [args] # cargo fetch --locked, with network, then exitsgo-straight-dev is a symlink to the same command. From a Rex session on dbb-rex, use the full path. The Rex server starts with a PATH that has no ~/.local/bin, so a session shell may not find the bare name:
~/.local/bin/gostraight-dev fetch # after Cargo.lock changes~/.local/bin/gostraight-dev test~/.local/bin/gostraight-dev shellA system timer runs as daz at 03:30 Europe/Isle_of_Man and writes git bundle create --all into /home/daz/_backups-git/project-gostraight/ (mode 700). The file name is project-gostraight-YYYYMMDD.bundle. A second run on the same day replaces that file. The last 7 dated bundles are kept. The script is platform/backup-project-gostraight.sh, installed to ~/.local/lib/dbb/backup-project-gostraight.sh so the timer does not follow the dbb-platform checkout’s current branch. It bundles the local repo only. It is not pointed at a GitHub remote. Off-server copies come later with R2.
The timer was not started on 11 Nov 2026. A run that day would replace project-gostraight-20261111.bundle. The next run is 12 Nov 2026 at 03:30 and writes a new dated file. Two files still hold the pre-scrub palettes, and Darren decides whether they stay: pre-scrub-20261111.bundle (outside the 7-day dated retention) and project-gostraight-20261111.bundle.
git bundle verify /home/daz/_backups-git/project-gostraight/project-gostraight-YYYYMMDD.bundleEdit the tag, the digest and the image name in the compose file, then run platform/deploy-gostraight.sh --start from a checkout. The script updates the Coolify service and recreates the container. The two volumes stay.