Homepage (Dashboard)

The Homepage Dashboard is my browser-based entry point to my homelab.

A user interface shows an overview of applications and tools in categories such as Apps, Lab, Hosting, and Business. It lists programs for media management, data visualization, and home automation, along with current user and device statistics.

I created the following files:

.
|-- bookmarks.yaml
|-- custom.css
|-- custom.js
|-- docker.yaml
|-- kubernetes.yaml
|-- logs
|   `-- homepage.log
|-- services.yaml
|-- settings.yaml
`-- widgets.yaml

The .yaml files contain the configuration for the individual dashboard components.
Configuration is handled through one or more YAML files. Since you will need to customize this for your own homelab anyway, I will simply refer you to the official documentation: https://gethomepage.dev/configs/

Homepage comes with a large collection of icons. I could find an icon in the library for almost every service I use.

docker-compose.yml

services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    env_file: .env
    restart: unless-stopped
    ports:
      - 80:3000
    volumes:
      - ./config:/app/config
      - ./images:/app/public/images
      - ./icons:/app/public/icons

  nginx:
    image: nginx:latest
    container_name: nginx
    restart: unless-stopped
    ports:
      - 443:443
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./certs:/etc/nginx/certs:ro
    depends_on:
      - homepage

Nginx Configuration

I also want to use HTTPS on my network, so I placed an Nginx server in front of the dashboard.

server {
  listen 443 ssl;
  server_name homepage.muench.lan;

  ssl_certificate /etc/nginx/certs/homepage.muench.lan.pem;
  ssl_certificate_key /etc/nginx/certs/homepage.muench.lan.key;

  # Consider adding SSL settings for better security
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'HIGH:!aNULL:!MD5';
  ssl_session_cache shared:SSL:10m;

  location / {
    proxy_pass http://homepage:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # Optionally set the X-Forwarded-Proto header for SSL
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}