A robust Go binary for managing PocketBase instances on Linux with automated deployment, systemd service creation, Caddy reverse proxy configuration, and a comprehensive REST API for service management.
hljs βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β React UI ββββββ Go Binary ββββββ PocketBase β
β (Embedded) β β (Orchestrator) β β Instance β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β
βββββββββββββββββββββββΌββββββββββββββββββββββ
β β β
ββββββΌβββββ βββββββΌββββββ βββββββΌββββββ
β SystemD β β Caddy β β File β
βManager β β Manager β β System β
βββββββββββ βββββββββββββ βββββββββββββ
Create /etc/sudoers.d/pockestrator:
# Allow pockestrator user to manage systemd services
pockestrator ALL=(ALL) NOPASSWD: /bin/systemctl, /usr/bin/systemctl
pockestrator ALL=(ALL) NOPASSWD: /bin/journalctl, /usr/bin/journalctl
pockestrator ALL=(ALL) NOPASSWD: /usr/bin/systemd-analyze
# Clone the repository
git clone <repository-url>
cd pockestrator
# Build the dashboard
cd dashboard
pnpm install
pnpm build
cd ..
# Build the Go binary
go build
# Run Pockestrator
./pockestrator serve --http="127.0.0.1:8091"
See API_DOCUMENTATION.md for comprehensive endpoint documentation.
GET /api/pockestrator/system/health - System health checkGET /api/pockestrator/system/info - System informationPOST /api/pockestrator/services - Create new serviceGET /api/pockestrator/services - List all servicesGET /api/pockestrator/services/{id}/status - Get service statusGET /api/pockestrator/services/{id}/logs - Get service logsPOST /api/pockestrator/services/{id}/control - Control service (start/stop/restart)hljs pockestrator/
βββ main.go # Main application entry point
βββ dashboard/ # React dashboard (embedded)
β βββ src/ # Dashboard source code
β βββ dist/ # Built dashboard (embedded)
βββ internal/ # Internal packages
β βββ service/ # Service management
β βββ systemd/ # SystemD integration
β βββ caddy/ # Caddy configuration
β βββ validation/ # System validation
β βββ database/ # Database operations
βββ pkg/ # Public packages
β βββ orchestrator.go # Main orchestration logic
βββ test/ # Tests
internal/service/): Handles PocketBase service lifecycleinternal/systemd/): Manages systemd service files and operationsinternal/caddy/): Manages Caddy reverse proxy configurationinternal/validation/): Validates system requirements and configurationsinternal/database/): Handles database operations and recordspkg/orchestrator.go): Coordinates all operationscd dashboard
pnpm install
pnpm build # Creates dist/ folder that gets embedded
go test ./...
BaseDir: "/home/ubuntu" # Base directory for services
SystemdDir: "/lib/systemd/system" # SystemD service files location
CaddyConfig: "/etc/caddy/Caddyfile" # Caddy configuration file
DefaultDomain: "tigawanna.vip" # Default domain for services
POCKESTRATOR_BASE_DIR: Override base directoryPOCKESTRATOR_SYSTEMD_DIR: Override systemd directoryPOCKESTRATOR_CADDY_CONFIG: Override Caddy config pathPOCKESTRATOR_DEFAULT_DOMAIN: Override default domainIf you encounter permission errors:
GET /api/pockestrator/system/healthThis project is licensed under the MIT License.
Built with β€οΈ for the PocketBase community