406 lines
13 KiB
Markdown
406 lines
13 KiB
Markdown
# ACC Server Manager
|
|
|
|
A comprehensive web-based management system for Assetto Corsa Competizione (ACC) dedicated servers. This application provides a modern, secure interface for managing multiple ACC server instances with advanced features like automated Steam integration, firewall management, and real-time monitoring.
|
|
|
|
## 🚀 Features
|
|
|
|
### Core Server Management
|
|
- **Multi-Server Support**: Manage multiple ACC server instances from a single interface
|
|
- **Configuration Management**: Web-based configuration editor with validation
|
|
- **Service Integration**: Windows Service management via NSSM
|
|
- **Port Management**: Automatic port allocation and firewall rule creation
|
|
- **Real-time Monitoring**: Live server status and performance metrics
|
|
|
|
### Steam Integration
|
|
- **Automated Installation**: Automatic ACC server installation via SteamCMD
|
|
- **Credential Management**: Secure Steam credential storage with AES-256 encryption
|
|
- **Update Management**: Automated server updates and maintenance
|
|
|
|
### Security Features
|
|
- **JWT Authentication**: Secure token-based authentication system
|
|
- **Role-Based Access**: Granular permission system with user roles
|
|
- **Rate Limiting**: Protection against brute force and DoS attacks
|
|
- **Input Validation**: Comprehensive input sanitization and validation
|
|
- **Security Headers**: OWASP-compliant security headers
|
|
- **Password Security**: Bcrypt password hashing with strength validation
|
|
|
|
### Monitoring & Analytics
|
|
- **State History**: Track server state changes and player activity
|
|
- **Performance Metrics**: Server performance and usage statistics
|
|
- **Activity Logs**: Comprehensive logging and audit trails
|
|
- **Dashboard**: Real-time overview of all managed servers
|
|
|
|
## 🏗️ Architecture
|
|
|
|
### Technology Stack
|
|
- **Backend**: Go 1.23.0 with Fiber web framework
|
|
- **Database**: SQLite with GORM ORM
|
|
- **Authentication**: JWT tokens with bcrypt password hashing
|
|
- **API Documentation**: Swagger/OpenAPI integration
|
|
- **Dependency Injection**: Uber Dig container
|
|
|
|
### Project Structure
|
|
```
|
|
acc-server-manager/
|
|
├── cmd/
|
|
│ └── api/ # Application entry point
|
|
├── local/
|
|
│ ├── api/ # API route definitions
|
|
│ ├── controller/ # HTTP request handlers
|
|
│ ├── middleware/ # Authentication and security middleware
|
|
│ ├── model/ # Database models and business logic
|
|
│ ├── repository/ # Data access layer
|
|
│ ├── service/ # Business logic services
|
|
│ └── utl/ # Utilities and shared components
|
|
│ ├── cache/ # Caching utilities
|
|
│ ├── command/ # Command execution utilities
|
|
│ ├── common/ # Common utilities
|
|
│ ├── configs/ # Configuration management
|
|
│ ├── db/ # Database connection and migration
|
|
│ ├── jwt/ # JWT token management
|
|
│ ├── logging/ # Logging utilities
|
|
│ ├── network/ # Network utilities
|
|
│ ├── password/ # Password hashing utilities
|
|
│ ├── regex_handler/ # Regular expression utilities
|
|
│ ├── server/ # HTTP server configuration
|
|
│ └── tracking/ # Server state tracking
|
|
├── docs/ # Documentation
|
|
├── logs/ # Application logs
|
|
└── vendor/ # Go dependencies
|
|
```
|
|
|
|
## 📋 Prerequisites
|
|
|
|
### System Requirements
|
|
- **Operating System**: Windows 10/11 or Windows Server 2016+
|
|
- **Go**: Version 1.23.0 or later
|
|
- **SteamCMD**: For ACC server installation and updates
|
|
- **NSSM**: Non-Sucking Service Manager for Windows services
|
|
- **PowerShell**: Version 5.0 or later
|
|
|
|
### Dependencies
|
|
- ACC Dedicated Server files
|
|
- Valid Steam account (for server installation)
|
|
- Administrative privileges (for service and firewall management)
|
|
|
|
## ⚙️ Installation
|
|
|
|
### 1. Clone the Repository
|
|
```bash
|
|
git clone <repository-url>
|
|
cd acc-server-manager
|
|
```
|
|
|
|
### 2. Install Dependencies
|
|
```bash
|
|
go mod download
|
|
```
|
|
|
|
### 3. Generate Environment Configuration
|
|
We provide scripts to automatically generate secure secrets and create your `.env` file:
|
|
|
|
**Windows (PowerShell):**
|
|
```powershell
|
|
.\scripts\generate-secrets.ps1
|
|
```
|
|
|
|
**Linux/macOS (Bash):**
|
|
```bash
|
|
./scripts/generate-secrets.sh
|
|
```
|
|
|
|
**Manual Setup:**
|
|
If you prefer to set up manually:
|
|
```bash
|
|
copy .env.example .env
|
|
```
|
|
|
|
Then generate secure secrets:
|
|
```bash
|
|
# JWT Secret (64 bytes, base64 encoded)
|
|
openssl rand -base64 64
|
|
|
|
# Application secrets (32 bytes, hex encoded)
|
|
openssl rand -hex 32
|
|
|
|
# Encryption key (16 bytes, hex encoded = 32 characters)
|
|
openssl rand -hex 16
|
|
```
|
|
|
|
Edit `.env` with your generated secrets:
|
|
```env
|
|
# Security Settings (REQUIRED)
|
|
JWT_SECRET=your-generated-jwt-secret-here
|
|
APP_SECRET=your-generated-app-secret-here
|
|
APP_SECRET_CODE=your-generated-secret-code-here
|
|
ENCRYPTION_KEY=your-generated-32-character-hex-key
|
|
|
|
# Core Application Settings
|
|
PORT=3000
|
|
CORS_ALLOWED_ORIGIN=http://localhost:5173
|
|
DB_NAME=acc.db
|
|
PASSWORD=change-this-default-admin-password
|
|
```
|
|
|
|
### 4. Build the Application
|
|
```bash
|
|
go build -o api.exe cmd/api/main.go
|
|
```
|
|
|
|
### 5. Run the Application
|
|
```bash
|
|
./api.exe
|
|
```
|
|
|
|
The application will be available at `http://localhost:3000`
|
|
|
|
## 🔧 Configuration
|
|
|
|
### Environment Variables
|
|
|
|
The application uses minimal environment variables, with most settings managed through the web interface:
|
|
|
|
| Variable | Required | Default | Description |
|
|
|----------|----------|---------|-------------|
|
|
| `JWT_SECRET` | Yes | - | JWT signing secret (64+ chars, base64) |
|
|
| `APP_SECRET` | Yes | - | Application secret key (32 bytes, hex) |
|
|
| `APP_SECRET_CODE` | Yes | - | Application secret code (32 bytes, hex) |
|
|
| `ENCRYPTION_KEY` | Yes | - | AES-256 encryption key (32 hex chars) |
|
|
| `PORT` | No | 3000 | HTTP server port |
|
|
| `DB_NAME` | No | acc.db | SQLite database filename |
|
|
| `CORS_ALLOWED_ORIGIN` | No | http://localhost:5173 | CORS allowed origin |
|
|
| `PASSWORD` | No | - | Default admin password for initial setup |
|
|
|
|
**⚠️ Important**: All required secrets are automatically generated by the provided scripts in `scripts/` directory.
|
|
|
|
### System Configuration (Web Interface)
|
|
|
|
Advanced settings are managed through the web interface and stored in the database:
|
|
- **Steam Integration**: SteamCMD path and credentials
|
|
- **Service Management**: NSSM path and service settings
|
|
- **Server Settings**: Default ports, firewall rules
|
|
- **Security Policies**: Rate limits, session timeouts
|
|
- **Monitoring**: Logging levels, performance tracking
|
|
- **Backup Settings**: Automatic backup configuration
|
|
|
|
Access these settings through the admin panel after initial setup.
|
|
|
|
## 🔒 Security
|
|
|
|
This application implements comprehensive security measures:
|
|
|
|
### Authentication & Authorization
|
|
- **JWT Tokens**: Secure token-based authentication
|
|
- **Password Security**: Bcrypt hashing with strength validation
|
|
- **Role-Based Access**: Granular permission system
|
|
- **Session Management**: Configurable timeouts and lockouts
|
|
|
|
### Protection Mechanisms
|
|
- **Rate Limiting**: Multiple layers of rate limiting
|
|
- **Input Validation**: Comprehensive input sanitization
|
|
- **Security Headers**: OWASP-compliant HTTP headers
|
|
- **CORS Protection**: Configurable cross-origin restrictions
|
|
- **Request Limits**: Size and timeout limitations
|
|
|
|
### Monitoring & Logging
|
|
- **Security Events**: Authentication and authorization logging
|
|
- **Audit Trail**: Comprehensive activity logging
|
|
- **Threat Detection**: Suspicious activity monitoring
|
|
|
|
For detailed security information, see [SECURITY.md](docs/SECURITY.md).
|
|
|
|
## 📚 API Documentation
|
|
|
|
The application includes comprehensive API documentation via Swagger UI:
|
|
- **Local Development**: http://localhost:3000/swagger/
|
|
- **Interactive Testing**: Test API endpoints directly from the browser
|
|
- **Schema Documentation**: Complete request/response schemas
|
|
|
|
### Key API Endpoints
|
|
|
|
#### Authentication
|
|
- `POST /api/v1/auth/login` - User authentication
|
|
- `POST /api/v1/auth/register` - User registration
|
|
- `GET /api/v1/auth/me` - Get current user
|
|
|
|
#### Server Management
|
|
- `GET /api/v1/servers` - List all servers
|
|
- `POST /api/v1/servers` - Create new server
|
|
- `GET /api/v1/servers/{id}` - Get server details
|
|
- `PUT /api/v1/servers/{id}` - Update server
|
|
- `DELETE /api/v1/servers/{id}` - Delete server
|
|
|
|
#### Configuration
|
|
- `GET /api/v1/servers/{id}/config/{file}` - Get configuration file
|
|
- `PUT /api/v1/servers/{id}/config/{file}` - Update configuration
|
|
- `POST /api/v1/servers/{id}/restart` - Restart server
|
|
|
|
## 🖥️ Frontend Integration
|
|
|
|
This backend is designed to work with a modern web frontend. Recommended stack:
|
|
- **React/Vue/Angular**: Modern JavaScript framework
|
|
- **TypeScript**: Type safety and better development experience
|
|
- **Axios/Fetch**: HTTP client for API communication
|
|
- **WebSocket**: Real-time server status updates
|
|
|
|
### CORS Configuration
|
|
Configure `CORS_ALLOWED_ORIGIN` to match your frontend URL:
|
|
```env
|
|
CORS_ALLOWED_ORIGIN=http://localhost:3000,https://yourdomain.com
|
|
```
|
|
|
|
## 🛠️ Development
|
|
|
|
### Running in Development Mode
|
|
```bash
|
|
# Install air for hot reloading (optional)
|
|
go install github.com/cosmtrek/air@latest
|
|
|
|
# Run with hot reload
|
|
air
|
|
|
|
# Or run directly with go
|
|
go run cmd/api/main.go
|
|
```
|
|
|
|
### Database Management
|
|
```bash
|
|
# View database schema
|
|
sqlite3 acc.db ".schema"
|
|
|
|
# Backup database
|
|
copy acc.db acc_backup.db
|
|
```
|
|
|
|
### Testing
|
|
```bash
|
|
# Run all tests
|
|
go test ./...
|
|
|
|
# Run tests with coverage
|
|
go test -cover ./...
|
|
|
|
# Run specific test package
|
|
go test ./local/service/...
|
|
```
|
|
|
|
## 🚀 Production Deployment
|
|
|
|
### 1. Generate Production Secrets
|
|
```bash
|
|
# Use the secret generation script for production
|
|
.\scripts\generate-secrets.ps1 # Windows
|
|
./scripts/generate-secrets.sh # Linux/macOS
|
|
```
|
|
|
|
### 2. Build for Production
|
|
```bash
|
|
# Build optimized binary
|
|
go build -ldflags="-w -s" -o acc-server-manager.exe cmd/api/main.go
|
|
```
|
|
|
|
### 3. Security Checklist
|
|
- [ ] Generate unique production secrets (use provided scripts)
|
|
- [ ] Configure production CORS origins in `.env`
|
|
- [ ] Change default admin password immediately after first login
|
|
- [ ] Enable HTTPS with valid certificates
|
|
- [ ] Set up proper firewall rules
|
|
- [ ] Configure system paths via web interface
|
|
- [ ] Set up monitoring and alerting
|
|
- [ ] Test all security configurations
|
|
|
|
### 3. Service Installation
|
|
```bash
|
|
# Create Windows service using NSSM
|
|
nssm install "ACC Server Manager" "C:\path\to\acc-server-manager.exe"
|
|
nssm set "ACC Server Manager" DisplayName "ACC Server Manager"
|
|
nssm set "ACC Server Manager" Description "Assetto Corsa Competizione Server Manager"
|
|
nssm start "ACC Server Manager"
|
|
```
|
|
|
|
### 4. Monitoring Setup
|
|
- Configure log rotation
|
|
- Set up health check monitoring
|
|
- Configure alerting for critical errors
|
|
- Monitor resource usage and performance
|
|
|
|
## 🔧 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
#### "JWT_SECRET environment variable is required"
|
|
**Solution**: Set the JWT_SECRET environment variable with a secure 32+ character string.
|
|
|
|
#### "Failed to connect database"
|
|
**Solution**: Ensure the application has write permissions to the database directory.
|
|
|
|
#### "SteamCMD not found"
|
|
**Solution**: Install SteamCMD and update the `STEAMCMD_PATH` environment variable.
|
|
|
|
#### "Permission denied creating firewall rule"
|
|
**Solution**: Run the application as Administrator for firewall management.
|
|
|
|
### Log Locations
|
|
- **Application Logs**: `./logs/app.log`
|
|
- **Error Logs**: `./logs/error.log`
|
|
- **Security Logs**: `./logs/security.log`
|
|
|
|
### Debug Mode
|
|
Enable debug logging:
|
|
```env
|
|
LOG_LEVEL=debug
|
|
DEBUG_MODE=true
|
|
```
|
|
|
|
## 🤝 Contributing
|
|
|
|
### Development Setup
|
|
1. Fork the repository
|
|
2. Create a feature branch: `git checkout -b feature/amazing-feature`
|
|
3. Make your changes and add tests
|
|
4. Ensure all tests pass: `go test ./...`
|
|
5. Commit your changes: `git commit -m 'Add amazing feature'`
|
|
6. Push to the branch: `git push origin feature/amazing-feature`
|
|
7. Open a Pull Request
|
|
|
|
### Code Style
|
|
- Follow Go best practices and conventions
|
|
- Use `gofmt` for code formatting
|
|
- Add comprehensive comments for public functions
|
|
- Include tests for new functionality
|
|
|
|
### Security Considerations
|
|
- Never commit secrets or credentials
|
|
- Follow secure coding practices
|
|
- Test security features thoroughly
|
|
- Report security issues privately
|
|
|
|
## 📝 License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## 🙏 Acknowledgments
|
|
|
|
- **Fiber Framework**: High-performance HTTP framework
|
|
- **GORM**: Powerful ORM for Go
|
|
- **Assetto Corsa Competizione**: The amazing racing simulation
|
|
- **Community**: Contributors and users who make this project possible
|
|
|
|
## 📞 Support
|
|
|
|
### Documentation
|
|
- [Security Guide](docs/SECURITY.md)
|
|
- [API Documentation](http://localhost:3000/swagger/)
|
|
- [Configuration Guide](docs/CONFIGURATION.md)
|
|
|
|
### Community
|
|
- **Issues**: Report bugs and request features via GitHub Issues
|
|
- **Discussions**: Join community discussions
|
|
- **Wiki**: Community-maintained documentation and guides
|
|
|
|
### Professional Support
|
|
For professional support, consulting, or custom development, please contact the maintainers.
|
|
|
|
---
|
|
|
|
**Happy Racing! 🏁** |