Sign inSign up

amirtq/lhs

By amirtq

Updated 7 months ago

A modern UI for Lighthouse Stack runner to manage projects, schedule CI audits, and view KPIs fast!!

Image
0

1.8K

amirtq/lhs repository overview

Overview

LHS Runner is a self‑hosted Lighthouse Stack that combines:

  • lh-runner (Django admin + Lighthouse worker)
  • lh-server (LHCI dashboard/API)
  • mariadb (SQL storage)

It provides a modern UI to manage projects, schedule audits, and view Lighthouse KPIs.


Docker Compose (sample)

services:
  mariadb:
    image: mariadb:10.11
    container_name: lh-mariadb
    restart: unless-stopped
    hostname: ${MARIADB_HOST}
    environment:
      - TZ=${TZ:-Europe/London}
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
      - MARIADB_DATABASE=${MARIADB_DATABASE}
      - MARIADB_USER=${MARIADB_USER}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD}
    ports:
      - "${MARIADB_PORT:-3306}:3306"
    volumes:
      - ./data/mariadb:/var/lib/mysql

  lh-server:
    image: patrickhulce/lhci-server:latest
    platform: linux/amd64
    container_name: lh-server
    restart: unless-stopped
    ports:
      - "9001:9001"
    volumes:
      - ./data:/data
    depends_on:
      mariadb:
        condition: service_healthy
    environment:
      - TZ=${TZ:-Europe/London}
      - LHCI_STORAGE__STORAGE_METHOD=sql
      - LHCI_STORAGE__SQL_DIALECT=mysql
      - LHCI_STORAGE__SQL_CONNECTION_URL=mysql://${MARIADB_USER}:${MARIADB_PASSWORD}@${MARIADB_HOST}:3306/${MARIADB_DATABASE}
      - LHCI_BASIC_AUTH__USERNAME=${LHCI_BASIC_AUTH_USERNAME:-}
      - LHCI_BASIC_AUTH__PASSWORD=${LHCI_BASIC_AUTH_PASSWORD:-}

  lh-runner:
    build:
      context: .
      dockerfile: runner/Dockerfile
    platform: linux/amd64
    container_name: lh-runner
    restart: unless-stopped
    cap_add:
      - SYS_ADMIN
    ports:
      - "443:443"
    depends_on:
      mariadb:
        condition: service_healthy
      lh-server:
        condition: service_started
    environment:
      - TZ=${TZ:-Europe/London}
      - DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY}
      - DJANGO_DEBUG=${DJANGO_DEBUG}
      - DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS}
      - MARIADB_HOST=${MARIADB_HOST}
      - MARIADB_DATABASE=${MARIADB_DATABASE}
      - MARIADB_PORT=${MARIADB_PORT}
      - MARIADB_USER=${MARIADB_USER}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD}
      - LH_SERVER_URL=${LH_SERVER_URL}
      - LHCI_BASIC_AUTH_USERNAME=${LHCI_BASIC_AUTH_USERNAME:-}
      - LHCI_BASIC_AUTH_PASSWORD=${LHCI_BASIC_AUTH_PASSWORD:-}
      - TEST_SCHEDULE_MINIMUM_INTERVAL_MINUTES=${TEST_SCHEDULE_MINIMUM_INTERVAL_MINUTES}
      - EXTRA_CHROME_FLAGS=${EXTRA_CHROME_FLAGS}
    volumes:
      - ./runner/backend/certs:/app/runner/backend/certs
      - ./.env:/app/.env:ro

Bring it up

  1. Create your environment file
touch .env

Edit .env and set at least:

# ============================================================================
# Lighthouse CI Stack - Environment Configuration
# ============================================================================
# This is the production environment file.
# Any new variables added here during development must also be added to .env.example
#
# Setup:
#   cp .env.example .env
#   # Then edit .env with your actual configuration
# ============================================================================


# ============================================================================
# 1. GENERAL APPLICATION SETTINGS
# ============================================================================

# Timezone used for logs, scheduling, and timestamps
TZ=GMT


# ============================================================================
# 2. DATABASE SETTINGS (MariaDB)
# ============================================================================
# MariaDB is used as the persistent storage for LHCI and Django

# Database hostname (container name in docker-compose)
MARIADB_HOST=lh-mariadb

# Database name for storing Lighthouse CI data
MARIADB_DATABASE=lhci

# Database port (exposed to host machine)
MARIADB_PORT=3306

# Application database user credentials
MARIADB_USER=lhci
MARIADB_PASSWORD=lhci-password

# Root password for MariaDB (required by the official MariaDB Docker image)
# IMPORTANT: Change this to a secure password in production!
MARIADB_ROOT_PASSWORD=iR;0ek"_A@bj[#O>,~@;GK`E'2V3hcc^&lk7zT>HT-+dsxSaiC


# ============================================================================
# 3. DJANGO BACKEND SETTINGS
# ============================================================================
# Configuration for the Django-based backend/API server

# Secret key for Django cryptographic signing (sessions, tokens, etc.)
# IMPORTANT: Generate a unique secret key for production!
# Generate with: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
DJANGO_SECRET_KEY=change-me

# Enable/disable Django debug mode
# Set to 'false' in production for security
DJANGO_DEBUG=true

# Comma-separated list of allowed hostnames
# Use specific domains in production (e.g., "example.com,www.example.com")
DJANGO_ALLOWED_HOSTS=*


# ============================================================================
# 4. LIGHTHOUSE SERVER SETTINGS
# ============================================================================
# Configuration for the Lighthouse (LH) server


# Internal URL for Django to communicate with the LH server (reverse proxy)
LH_SERVER_URL=http://lh-server:9001



# ============================================================================
# 5. AUTHENTICATION SETTINGS
# ============================================================================
# HTTP Basic Authentication for the LH   dashboard

# Username for Basic Auth access to the dashboard
LHCI_BASIC_AUTH_USERNAME=admin

# Password for Basic Auth access to the dashboard
# IMPORTANT: Change this to a secure password!
LHCI_BASIC_AUTH_PASSWORD=your-secure-password-here


# ============================================================================
# 6. LIGHTHOUSE PERFORMANCE SETTINGS
# ============================================================================
# Network throttling and test configuration for Lighthouse audits

# Minimum allowed schedule interval in minutes (default: 60)
TEST_SCHEDULE_MINIMUM_INTERVAL_MINUTES=60

# Number of Lighthouse runs per URL (default: 3)
# More runs provide more accurate median results but increase test duration
# NUMBER_OF_RUNS=3

# Network bandwidth throttling in Kbps (default: 5000)
# Simulates network conditions for performance testing
DEFAULT_BANDWIDTH_KBPS=5000

# Network latency in milliseconds (default: 100)
# Added delay to simulate real-world network conditions
LATENCY_MS=100

# Upload throughput as percentage of download bandwidth (default: 45)
# Typical mobile networks have asymmetric upload/download speeds
UPLOAD_THROUGHPUT_PERCENTAGE=45




  1. Build and start all containers
docker compose build
docker compose up -d
  1. Create the first admin user
docker compose exec lh-runner python manage.py createsuperuser
  1. Open the UI
https://localhost:443

Tag summary

Content type

Image

Digest

sha256:5451ee787

Size

473.7 MB

Last updated

7 months ago

docker pull amirtq/lhs