A lightweight service manager that works over SSH.
yeet is a client-side utility for catch, a simple service manager designed to deploy and manage services on remote Linux machines without requiring systemd configuration. It provides a streamlined workflow to deploy binaries and containers via SSH and manage them as services.
The system consists of two main components:
- yeet - The client-side utility used to deploy and manage services
- catch - The core service manager that runs on the remote server
To install the yeet client:
go install github.com/yeetrun/yeet/cmd/yeet@latest
Initialize a new remote server:
# Install catch on a remote host
yeet init <remote>
# Push and run a Docker container
yeet push <service> <image>
# Run a local binary on the remote server
yeet run <service> <binary>
yeet [command]
Core commands:
init <remote>
- Install catch on a remote hostpush <svc> <image>
- Push a container image to the remotedocker-host
- Print out the docker hostupdate
- Update catch on the remote server
Service management:
<service> start
- Start a service<service> stop
- Stop a service<service> restart
- Restart a service<service> status
- Show service status<service> logs
- View service logs<service> remove
- Remove a service
Yeet supports all catch commands (env, edit, stage, etc.) and runs them against a remote catch server.
yeet supports different networking modes that can be configured with the --net
flag:
# Deploy with Tailscale networking
yeet run myservice --net=ts --ts-auth-key=tskey-123
# Deploy with macvlan networking
yeet run myservice --net=macvlan --macvlan-parent=eth0
If you prefer to use SSH directly instead of the yeet client, you can use the following methods:
# Deploy by copying a binary
scp <binary> <service>@<host>:
# Deploy from stdin with arguments
cat <binary> | ssh <service>@<host> run [flags] [args...]
Example:
scp myservice myservice@server:
# or with arguments
cat myservice | ssh myservice@server run --restart=true --net=ts
SSH to your service to use these commands:
ssh <service>@<host> <command>
Core commands:
run
- Install a service with the binary received from stdinstart
- Start a servicestop
- Stop a servicerestart
- Restart a servicestatus
- Show service statuslogs
- View service logsremove
- Remove a service
Configuration:
env
- Manage environment variablesedit
- Edit service configurationstage
- Stage service configuration changesstage show
- Show staged configurationstage clear
- Clear staged configurationstage commit
- Apply staged configuration
Network options:
ip
- Manage IP address configurationts
- Manage Tailscale networkingmount
- Mount a filesystemumount
- Unmount a filesystem
Service management:
enable
- Enable service autostartdisable
- Disable service autostartrollback
- Rollback to previous service versioncron
- Manage scheduled tasksevents
- View service eventsversion
- Show the catch version
Update catch on the remote server:
# Using yeet
yeet update
# Or using SSH directly
go build ./cmd/catch && cat catch | ssh root@catch@remote update