ExamplesDeployment
Arbutus Cloud Deployment
Runbook for deploying Nextmini on Arbutus VMs with Docker, snapshots, and optional node auto-start.
This runbook condenses the original Arbutus setup notes into a deployment path you can repeat quickly.
Prerequisites
- Access to an Arbutus project and network.
- An Ubuntu VM with SSH access (floating IP or gateway access).
- This repository cloned on the VM.
Operational Constraints
- Arbutus root disks are usually small. Move Docker's data root to
/mnt/dockerbefore building images. - The dataplane config assumes
public_network_interface = "ens3"inexamples/arbutus/config.toml. examples/arbutus/docker-compose.ymlruns the node inprivilegedmode with host networking.- Before cloning a prepared VM, make sure the node command points to the controller VM address (not
127.0.0.1unless controller and node always share the same host).
Deployment Workflow
1. Prepare the first VM
ssh ubuntu@<floating-ip>
cd ~
git clone <your-nextmini-repo-url> nextmini
cd nextmini/examples/arbutus
sudo apt update
sudo apt install -y docker.io docker-compose net-toolsIf your default interface is not ens3, update config.toml:
ip -o link show | awk -F': ' '{print $2}'
# Edit config.toml and set public_network_interface accordingly.2. Relocate Docker root to /mnt (critical on Arbutus)
sudo systemctl stop docker
sudo mkdir -p /mnt/docker
sudo tee /etc/docker/daemon.json >/dev/null <<'JSON'
{
"data-root": "/mnt/docker"
}
JSON
sudo systemctl start docker
sudo docker info -f '{{.DockerRootDir}}'
sudo usermod -aG docker "$USER"Log out and back in after adding your user to the Docker group.
3. Build images and configure controller address
cd ~/nextmini/examples/arbutus
docker compose buildSet the controller address in docker-compose.yml (last command line for the node service):
CONTROLLER_IP=$(ip -4 -o addr show ens3 | awk '{print $4}' | cut -d/ -f1)
sed -i.bak "s#ws://127.0.0.1:80#ws://${CONTROLLER_IP}:80#" docker-compose.yml4. Start controller and node
cd ~/nextmini/examples/arbutus
# Controller only (sanity check)
docker compose up controller
# Node only (will retry until controller is up)
docker compose up node
# Normal operation
docker compose up5. Optional: auto-start node at boot
cd ~/nextmini/examples/arbutus
sudo cp strato-node.service /etc/systemd/system/
# Update ExecStart/ExecStop path if your repo is not /home/ubuntu/strato
sudo sed -i.bak 's#/home/ubuntu/strato#/home/ubuntu/nextmini#g' /etc/systemd/system/strato-node.service
sudo systemctl daemon-reload
sudo systemctl enable strato-node
sudo systemctl start strato-node
journalctl -u strato-node.service -f6. Clone additional nodes from the prepared VM
- In Arbutus UI, create a snapshot from the prepared instance.
- Launch additional instances from that snapshot on the same network.
- New nodes should reconnect automatically to the controller if the controller address was set correctly before snapshotting.
Verification
cd ~/nextmini/examples/arbutus
docker compose logs controller --tail=80
docker compose logs node --tail=80Look for node registration and route-install logs on the controller.
Cleanup Workflow
Stop runtime services
cd ~/nextmini/examples/arbutus
docker compose down
sudo systemctl disable --now strato-node || trueRemove optional local artifacts
sudo rm -f /etc/systemd/system/strato-node.service
sudo systemctl daemon-reload
# Optional, destructive for unused Docker artifacts:
# docker system prune -fRemove cloud resources
- Delete cloned instances.
- Delete snapshots created for cloning.
- Release/cleanup floating IP associations no longer needed.