|
Some checks failed
Build All Docker Images / changes (push) Has been cancelled
Build and Push App Docker Image / build (push) Has been cancelled
Build and Push Node Docker Image / build (push) Has been cancelled
Test and Lint / test-app (push) Has been cancelled
Test and Lint / test-node (push) Has been cancelled
Test and Lint / lint-dockerfiles (push) Has been cancelled
Test and Lint / security-scan (push) Has been cancelled
Build All Docker Images / build-app (push) Has been cancelled
Build All Docker Images / build-node (push) Has been cancelled
Build All Docker Images / summary (push) Has been cancelled
|
||
|---|---|---|
| .. | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| bun.lock | ||
| DEPLOYMENT.md | ||
| docker-compose.dev.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| health-check.ps1 | ||
| health-check.sh | ||
| home-server-agent.service | ||
| install-windows-service.ps1 | ||
| package.json | ||
| README.md | ||
| test-api.js | ||
| tsconfig.json | ||
node
Home Server Agent
A lightweight Node.js agent for managing game servers on your home server through Docker containers. This agent provides a secure REST API to start, stop, and monitor game servers remotely.
Features
- 🎮 Game Server Management: Start, stop, and monitor popular game servers (Minecraft, Valheim, Terraria)
- 🐳 Docker Integration: Leverages Docker for containerized game server deployment
- 🔒 Security: Token-based authentication for API access
- 📊 Monitoring: Real-time status monitoring and system statistics
- 🌐 REST API: Clean RESTful API for remote management
- 📝 Logging: Comprehensive logging with Winston
- 🔄 Auto-restart: Containers automatically restart on failure
- 💾 Data Persistence: Game data persisted in Docker volumes
Quick Start
Prerequisites
- Docker and Docker Compose installed
- Node.js 18+ (for development)
- Bun (optional, for development)
Development Setup
-
Clone the repository
git clone <repository-url> cd home-server-agent -
Install dependencies
bun install # or npm install -
Set up environment
cp .env.example .env # Edit .env with your configuration -
Start development server
bun run dev # or npm run dev
Production Deployment
-
Build and start with Docker Compose
docker-compose up -d -
Or start with just the agent for testing
docker-compose -f docker-compose.dev.yml up -d
API Endpoints
Authentication
All API endpoints (except /health) require authentication via Bearer token or X-API-Key header:
# Using Bearer token
curl -H "Authorization: Bearer your-secret-token-here" http://localhost:3000/api/status
# Using API key header
curl -H "X-API-Key: your-secret-token-here" http://localhost:3000/api/status
Available Endpoints
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check (no auth required) |
/api/status |
GET | Get overall server status |
/api/status/ports |
GET | Get active ports and services |
/api/gameserver/list |
GET | List all available game servers |
/api/gameserver/start/:serviceName |
POST | Start a game server |
/api/gameserver/stop/:serviceName |
POST | Stop a game server |
/api/gameserver/restart/:serviceName |
POST | Restart a game server |
/api/gameserver/:serviceName/status |
GET | Get specific server status |
Example Usage
# Get server status
curl -H "Authorization: Bearer your-secret-token-here" \
http://localhost:3000/api/status
# Start Minecraft server
curl -X POST -H "Authorization: Bearer your-secret-token-here" \
http://localhost:3000/api/gameserver/start/minecraft
# Stop Minecraft server
curl -X POST -H "Authorization: Bearer your-secret-token-here" \
http://localhost:3000/api/gameserver/stop/minecraft
# Get Minecraft server status
curl -H "Authorization: Bearer your-secret-token-here" \
http://localhost:3000/api/gameserver/minecraft/status
Supported Game Servers
Minecraft
- Image:
itzg/minecraft-server:latest - Default Port: 25565
- Features: Vanilla Minecraft server with configurable settings
Valheim
- Image:
lloesche/valheim-server:latest - Default Ports: 2456-2457 (UDP)
- Features: Dedicated Valheim server with world persistence
Terraria
- Image:
ryshe/terraria:latest - Default Port: 7777
- Features: Terraria server with world management
Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 3000 |
NODE_ENV |
Environment mode | development |
API_TOKEN |
Authentication token | Required |
LOG_LEVEL |
Logging level | info |
DOCKER_HOST |
Docker socket path | unix:///var/run/docker.sock |
Game Server Configuration
Game servers can be configured by modifying the environment variables in docker-compose.yml:
minecraft:
environment:
EULA: "TRUE"
TYPE: "VANILLA"
MEMORY: "2G"
DIFFICULTY: "normal"
MAX_PLAYERS: "20"
Security
- Authentication: All API endpoints require token authentication
- Docker Security: Containers run as non-root users where possible
- Network Isolation: Services run in isolated Docker networks
- Read-only Docker Socket: Docker socket is mounted read-only for security
Monitoring
The agent provides comprehensive monitoring capabilities:
- System Stats: Docker version, container counts, resource usage
- Port Monitoring: Active ports and their associated services
- Container Status: Real-time container health and uptime
- Logs: Structured logging with Winston
Development
Project Structure
src/
├── index.ts # Main application entry point
├── middleware/
│ └── auth.ts # Authentication middleware
├── routes/
│ ├── status.ts # Status and monitoring routes
│ └── gameServer.ts # Game server management routes
├── services/
│ └── dockerManager.ts # Docker container management
└── utils/
└── logger.ts # Logging configuration
Scripts
# Development
bun run dev # Start development server with hot reload
bun run build # Build the application
bun run start # Start production server
# Docker
bun run docker:build # Build Docker image
bun run docker:run # Run with Docker Compose
Docker Volumes
The following volumes are used for data persistence:
minecraft-data: Minecraft world data and configurationvalheim-data: Valheim world data and configurationterraria-data: Terraria world data and configuration./logs: Application logs (mounted from host)
Optional Services
The Docker Compose file includes optional management services:
Portainer (Docker Management UI)
docker-compose --profile management up -d portainer
Access at: http://localhost:9000
Watchtower (Auto-updates)
docker-compose --profile management up -d watchtower
Troubleshooting
Common Issues
-
Permission Denied (Docker Socket)
# Ensure Docker socket has proper permissions sudo chmod 666 /var/run/docker.sock -
Port Already in Use
# Check what's using the port netstat -tlnp | grep :3000 -
Container Start Failures
# Check container logs docker logs gameserver-minecraft
Logs
Application logs are available in:
./logs/combined.log- All logs./logs/error.log- Error logs only- Console output (development mode)
License
This project is licensed under the MIT License.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Support
For issues and questions:
- Check the troubleshooting section
- Review the logs for error messages
- Open an issue on GitHub with detailed informationall dependencies:
bun install
To run:
bun run index.ts
This project was created using bun init in bun v1.2.6. Bun is a fast all-in-one JavaScript runtime.