A modern UI for Lighthouse Stack runner to manage projects, schedule CI audits, and view KPIs fast!!
1.8K
LHS Runner is a self‑hosted Lighthouse Stack that combines:
It provides a modern UI to manage projects, schedule audits, and view Lighthouse KPIs.
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
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
docker compose build
docker compose up -d
docker compose exec lh-runner python manage.py createsuperuser
https://localhost:443
Content type
Image
Digest
sha256:5451ee787…
Size
473.7 MB
Last updated
7 months ago
docker pull amirtq/lhs