A CLI tool that syncs local projects to remote servers via rsync/SSH and runs Podman Compose workloads — with a local SQLite deployment registry for container lifecycle tracking.
Each container deployment is assigned a unique identifier derived from the local machine's MAC address and project path. This UID is persisted in a local SQLite database, enabling status queries regardless of container runtime availability. Lifecycle states (starting → running → failed → removed) are tracked independently of whether containers are currently running.
The same CLI command can target either Podman Compose (rootless container workloads) or k3s (Kubernetes semantic environments) via the --type flag, eliminating the need to maintain separate toolchains for each runtime.
Local project files are synchronized to the remote server via rsync and compose commands are executed over SSH using sshpass. The remote target machine requires no additional CLI tooling beyond SSH access and a container runtime.
Install
go install github.com/pardnchiu/go-podrun/cmd/cli@latest
Full documentation → doc/doc.md
graph LR
CLI["CLI (Local)"] -->|rsync + SSH| Remote["Remote Server"]
CLI -->|HTTP POST| API["API Server :8080"]
API -->|SQLite| DB[(Deployment Registry)]
Remote -->|Podman Compose| C["Containers"]
Remote -->|k3s| K["Pods"]
go-podrun/
├── cmd/
│ ├── api/main.go # API server entry
│ └── cli/main.go # CLI entry
├── internal/
│ ├── command/ # CLI deploy logic
│ ├── database/ # SQLite operations
│ ├── handler/ # HTTP route handlers
│ ├── model/ # Pod / Record types
│ └── utils/ # SSH, env, IP helpers
├── sql/create.sql # Schema DDL
└── go.mod
This project is licensed under the GNU Affero General Public License v3.0.
©️ 2025 pardnchiu