Quickstart
Quickstart
Install
Homebrew, on macOS. Nothing else needed, no Go toolchain:
brew install arnelirobles/tap/baryovm
That works on a cold machine because the qualified name tells Homebrew where to look. If you would rather add the tap once and type less afterwards:
brew tap arnelirobles/tap
brew install baryovm
A release archive, on Linux or if you do not use Homebrew. Every release carries linux and
darwin builds for amd64 and arm64, plus checksums.txt:
VERSION=0.3.0; OS=$(uname -s | tr A-Z a-z); ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
curl -fsSLO https://github.com/BaryoDev/BaryoVM/releases/download/v$VERSION/baryovm_${VERSION}_${OS}_${ARCH}.tar.gz
curl -fsSLO https://github.com/BaryoDev/BaryoVM/releases/download/v$VERSION/checksums.txt
shasum -a 256 -c checksums.txt --ignore-missing # verify before you run it
tar xzf baryovm_${VERSION}_${OS}_${ARCH}.tar.gz && sudo mv baryovm /usr/local/bin/
From source, which needs Go 1.25 or newer:
go install github.com/BaryoDev/BaryoVM/cmd/baryovm@latest # -> $(go env GOPATH)/bin
Then, however you got it:
baryovm version
baryovm doctor # what is missing before your first release
State lives in ~/.baryovm/fleet.json (override with BARYOVM_HOME), written
owner-only (0600). It stores hostnames, users and SSH key paths, never key
contents or secrets. See SECURITY.md.
Each command also appends one line to ~/.baryovm/activity.jsonl (what ran, on which VM, how it
ended). Turn it off with BARYOVM_ACTIVITY=off. See docs/activity-log.md.
stack release syncs your source to the VM with local rsync (and ssh
as its transport) when rsync is on your PATH. Without rsync it writes a tar
archive with Go and streams it over the SSH session, then removes files you
deleted locally, so a machine with no rsync (Windows, a minimal image) can
still release to a Linux host. baryovm doctor shows which one a release will
use, and baryovm doctor --fix installs rsync where it can. Everything else
(vm add, vm ping, stack add, stack deploy, stack backup) needs
neither.
Quickstart
# 1) Register a VM you already have (agentless, uses your SSH key)
baryovm vm add oracle --host <your-vm-ip> --user opc --key ~/.ssh/id_ed25519
baryovm vm ping oracle # SSH in, report host + Docker version
baryovm vm bootstrap oracle # install Docker if missing
baryovm vm harden oracle # SSH hardening: per-source penalties + fail2ban
baryovm vm threats oracle # who is attacking it, and what got in
# 2) Register a compose stack (a project dir on that VM), with backup + release config
baryovm stack add app --vm oracle --path /home/deploy/app/deploy \
--db-container app-postgres-1 --db-name app --env-file .env \
--release-file ./baryovm.release.json
# 3) Deploy: sync source -> build images on the VM -> compose up (backs up first)
baryovm stack release app
# 4) Backups, any time
baryovm stack backup app
baryovm stack restore app --yes