LLMChoice / README.md
Peacemanguy's picture
First commit
fe02ff1
|
raw
history blame
4.77 kB
# GPU Leaderboard Application - Docker Setup
This repository contains a Node.js application for GPU leaderboards with Docker configuration for easy deployment.
## Features
- Main server for user voting and interaction
- Admin server for managing entries
- Persistent data storage
- One vote per IP address per category
- Custom start script to run both servers in a single container
- **Weekly leaderboard archiving system**
- Automatic archiving at the end of each week
- Historical data stored in a catalogued format
- View archived results by week or date range
## Docker Setup
### Prerequisites
- Docker
- Docker Compose
### Running the Application
1. Clone this repository
2. Navigate to the project directory
3. Build and start the containers:
#### Option 1: Using the provided script
- Windows: Double-click the `docker-run.bat` file
- Linux/Mac: Run `./docker-run.sh` (make it executable first with `chmod +x docker-run.sh`)
#### Option 2: Using Docker Compose directly
```bash
docker-compose up -d
```
4. Access the application:
- Main application: http://localhost:3000
- Admin interface: http://localhost:6969/admin
- Default admin credentials:
- Username: admin
- Password: secure_password123 (you should change this in admin_server.js)
### Stopping the Application
```bash
docker-compose down
```
## Data Persistence
All data is stored in the `./data` directory, which is mounted as a volume in the Docker container. This ensures that your data persists even if the container is removed.
## Ports
- 3000: Main application server
- 6969: Admin server
## Environment Variables
You can customize the application by modifying the `.env` file:
```
# Main server configuration
PORT=3000
NODE_ENV=production
# Admin server configuration
ADMIN_PORT=6969
```
These variables are used in the `docker-compose.yml` file and passed to the application.
## Weekly Archiving System
The system automatically archives the current leaderboard data at the end of each week (Sunday at 23:59). Each archive includes:
- Week identifier (e.g., 2025-W17)
- Start and end dates of the week
- Timestamp when the archive was created
- Complete snapshot of the leaderboard data
### Accessing Archived Data
#### User Interface
Users can access archived leaderboards through the main interface by clicking the "Archives" button. From there, they can:
1. Select a specific week from the dropdown menu
2. Search archives by date range
3. View detailed results for each archived period
#### Admin Interface
Administrators have additional capabilities:
1. View all archived weeks
2. Search archives by date range
3. Manually trigger archiving of the current leaderboard
4. View detailed statistics for each archived period
### Running the Archiving System
```bash
# Start the weekly archiving scheduler
npm run start-scheduler
# Manually archive the current week
npm run archive-week
```
### API Endpoints for Archives
- `GET /api/archives/weeks` - Get list of all archived weeks
- `GET /api/archives/week/:weekId` - Get archived data for a specific week
- `GET /api/archives/week/:weekId/category/:category` - Get archived data for a specific week and category
- `GET /api/archives/range?startDate=<date>&endDate=<date>` - Get archived data for a date range
## Security Notes
- For production use, consider changing the admin credentials in `admin_server.js`
- Consider adding HTTPS for secure connections
- Review the session configuration in `admin_server.js` for production use
## Architecture
### Docker Setup
The application is containerized using Docker with the following components:
- **Dockerfile**: Builds a Node.js Alpine container with the application code
- **docker-compose.yml**: Orchestrates the container and sets up networking and volumes
- **docker-entrypoint.sh**: Initializes the data directory and files before starting the application
- **start.js**: Custom Node.js script that runs both the main server and admin server in a single container
### Custom Start Script
Instead of using npm scripts with concurrently, we use a custom Node.js script (`start.js`) to run both servers. This approach:
- Provides better process management in the Docker container
- Ensures proper handling of signals for graceful shutdown
- Simplifies logging by inheriting stdio from the parent process
- Avoids potential issues with npm scripts in containerized environments
### Data Persistence
All data is stored in JSON files in the `./data` directory, which is mounted as a volume in the Docker container. This ensures that:
- Data persists across container restarts and rebuilds
- Files can be backed up easily from the host machine
- Multiple containers can share the same data if needed
## License
ISC