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