mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-10-26 21:17:13 +09:00
Replace hardcoded repository URL from serverkit/serverkit to jhd3197/ServerKit across agent Dockerfile, README, packaging scripts (deb/rpm) and install scripts so downloads and metadata point to the correct repo. Backend install endpoints now replace the repo placeholder with the GITHUB_REPO constant, and the frontend Windows install command was adjusted to use the -Server parameter instead of -ServerUrl. These changes ensure install scripts, packages, and generated docs reference the intended repository and that generated installer commands match the agent's expected flags.
ServerKit Agent
A lightweight, cross-platform agent for remote server management. Connects to a ServerKit control plane to enable Docker management, system monitoring, and remote command execution.
Features
- Cross-Platform: Supports Linux (amd64, arm64, arm), Windows (amd64, arm64), and macOS (amd64, arm64)
- Lightweight: Single binary, ~15MB RAM typical usage
- Docker Integration: Full Docker API access for container management
- System Metrics: Real-time CPU, memory, disk, and network monitoring
- Secure Communication: TLS encryption with HMAC-SHA256 authentication
- Auto-Reconnect: Automatic reconnection with exponential backoff
- Self-Update: Built-in update mechanism (coming soon)
Quick Start
Linux (One-liner)
curl -fsSL https://your-serverkit.com/install.sh | sudo bash -s -- \
--token "sk_reg_your_token" \
--server "https://your-serverkit.com"
Windows (PowerShell as Administrator)
irm https://your-serverkit.com/install.ps1 | iex
Install-ServerKitAgent -Token "sk_reg_your_token" -Server "https://your-serverkit.com"
Docker (Recommended for containerized environments)
# Pull the image
docker pull serverkit/agent:latest
# Register the agent (one-time setup)
docker run --rm -v serverkit-agent-config:/etc/serverkit-agent \
serverkit/agent:latest register \
--token "sk_reg_your_token" \
--server "https://your-serverkit.com"
# Start the agent
docker run -d --name serverkit-agent \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v serverkit-agent-config:/etc/serverkit-agent \
serverkit/agent:latest
Or use Docker Compose:
# Clone and navigate to agent directory
cd agent
# Register (one-time setup)
docker compose run --rm agent register -s https://your-serverkit.com -t YOUR_TOKEN
# Start the agent
docker compose up -d
# View logs
docker compose logs -f
Package Installation
Debian/Ubuntu (.deb):
curl -LO https://github.com/jhd3197/ServerKit/releases/latest/download/serverkit-agent_VERSION_amd64.deb
sudo dpkg -i serverkit-agent_VERSION_amd64.deb
sudo serverkit-agent register --token "YOUR_TOKEN" --server "https://your-serverkit.com"
sudo systemctl start serverkit-agent
RHEL/CentOS/Fedora (.rpm):
sudo rpm -i https://github.com/jhd3197/ServerKit/releases/latest/download/serverkit-agent-VERSION-1.x86_64.rpm
sudo serverkit-agent register --token "YOUR_TOKEN" --server "https://your-serverkit.com"
sudo systemctl start serverkit-agent
Windows (.msi): Download and run the MSI installer from the releases page, then:
serverkit-agent register --token "YOUR_TOKEN" --server "https://your-serverkit.com"
Start-Service ServerKitAgent
Manual Installation
- Download the appropriate binary for your platform from the releases page
- Register the agent:
./serverkit-agent register --token "sk_reg_xxx" --server "https://your-serverkit.com" - Start the agent:
./serverkit-agent start
Building from Source
Prerequisites
- Go 1.21 or later
- Make (optional, for using Makefile)
Build
# Clone the repository
git clone https://github.com/serverkit/agent.git
cd agent
# Download dependencies
go mod download
# Build for current platform
make build
# Or build for all platforms
make build-all
Build Outputs
Binaries are placed in the dist/ directory:
serverkit-agent-{version}-linux-amd64serverkit-agent-{version}-linux-arm64serverkit-agent-{version}-windows-amd64.exeserverkit-agent-{version}-darwin-amd64serverkit-agent-{version}-darwin-arm64
Usage
Commands
serverkit-agent [command]
Available Commands:
start Start the agent service
register Register with a ServerKit instance
status Show agent status
config Configuration management
version Show version information
help Help about any command
Flags:
-c, --config string config file path
-d, --debug enable debug logging
-h, --help help for serverkit-agent
Register
serverkit-agent register \
--token "sk_reg_xxx" \
--server "https://your-serverkit.com" \
--name "my-server"
Start
# Foreground
serverkit-agent start
# With debug logging
serverkit-agent start --debug
Configuration
Configuration file location:
- Linux:
/etc/serverkit-agent/config.yaml - Windows:
C:\ProgramData\ServerKit\Agent\config.yaml
Example Configuration
server:
url: wss://your-serverkit.com/agent/ws
reconnect_interval: 5s
max_reconnect_interval: 5m
ping_interval: 30s
agent:
id: "auto-generated"
name: "my-server"
features:
docker: true
metrics: true
logs: true
file_access: false
exec: false
metrics:
enabled: true
interval: 10s
include_per_cpu: true
include_docker_stats: true
docker:
socket: /var/run/docker.sock
timeout: 30s
logging:
level: info
file: /var/log/serverkit-agent/agent.log
max_size_mb: 100
max_backups: 5
max_age_days: 30
compress: true
Security
Authentication
The agent uses HMAC-SHA256 signatures for authentication:
- During registration, the agent receives an API key and secret
- Each WebSocket connection is authenticated using HMAC-signed messages
- Session tokens are issued after successful authentication
Credentials Storage
Credentials are encrypted at rest using AES-256-GCM with a machine-specific key derived from:
- Hostname
- Machine ID (Linux) or computer/user name (Windows)
Network Security
- All communication uses TLS (WSS)
- Certificate validation is enforced in production
- Replay attack protection via timestamps and nonces
Systemd Service (Linux)
The installation script automatically creates a systemd service:
# Check status
systemctl status serverkit-agent
# View logs
journalctl -u serverkit-agent -f
# Restart
systemctl restart serverkit-agent
Windows Service
On Windows, the agent runs as a Windows Service:
# Check status
Get-Service ServerKitAgent
# View logs
Get-Content "C:\ProgramData\ServerKit\Agent\logs\agent.log" -Tail 50
# Restart
Restart-Service ServerKitAgent
Docker Deployment
Building the Image
cd agent
# Build with version info
docker build \
--build-arg VERSION=1.0.0 \
--build-arg BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
--build-arg GIT_COMMIT=$(git rev-parse --short HEAD) \
-t serverkit/agent:latest .
Running with Docker
# Register the agent first
docker run --rm \
-v serverkit-agent-config:/etc/serverkit-agent \
serverkit/agent:latest register \
--token "sk_reg_xxx" \
--server "https://your-serverkit.com" \
--name "my-server"
# Run the agent
docker run -d \
--name serverkit-agent \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v serverkit-agent-config:/etc/serverkit-agent \
-v serverkit-agent-logs:/var/log/serverkit-agent \
serverkit/agent:latest
Running with Docker Compose
# docker-compose.yml
services:
agent:
image: serverkit/agent:latest
container_name: serverkit-agent
restart: unless-stopped
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- serverkit-config:/etc/serverkit-agent
- serverkit-logs:/var/log/serverkit-agent
environment:
- TZ=UTC
volumes:
serverkit-config:
serverkit-logs:
# Register
docker compose run --rm agent register -s https://your-serverkit.com -t YOUR_TOKEN
# Start
docker compose up -d
# Logs
docker compose logs -f
# Stop
docker compose down
Environment Variables
| Variable | Description | Default |
|---|---|---|
TZ |
Timezone | UTC |
Volumes
| Path | Description |
|---|---|
/etc/serverkit-agent |
Configuration and credentials |
/var/log/serverkit-agent |
Log files |
/var/run/docker.sock |
Docker socket (mount read-only) |
Development
Project Structure
agent/
├── cmd/agent/ # Main entry point
├── internal/
│ ├── agent/ # Core agent logic
│ ├── auth/ # HMAC authentication
│ ├── config/ # Configuration management
│ ├── docker/ # Docker client wrapper
│ ├── logger/ # Structured logging
│ ├── metrics/ # System metrics collection
│ └── ws/ # WebSocket client
├── pkg/protocol/ # Message protocol definitions
├── scripts/ # Build and install scripts
├── Makefile
└── go.mod
Running Tests
make test
Code Formatting
make fmt
Troubleshooting
Agent won't connect
- Check the server URL is correct
- Verify the registration token is valid
- Check firewall allows outbound WebSocket connections
- Review logs:
journalctl -u serverkit-agent -n 50
Docker commands fail
- Ensure Docker is installed and running
- Verify the agent user has Docker permissions:
sudo usermod -aG docker serverkit-agent - Check Docker socket permissions
High CPU/Memory usage
- Increase the metrics interval in config
- Disable per-CPU metrics if not needed
- Check for log rotation issues
License
MIT License - see LICENSE file for details.