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

docker-compose up -d
  1. Access the application:

Stopping the Application

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

# 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