Skip to content

Setup Homepage

Overview

A modern, fully static, fast, secure fully proxied, highly customizable application dashboard with integrations for over 100 services and translations into multiple languages. Easily configured via YAML files or through docker label discovery.

Changelog

2025-01-26

  • Changed docker-compose.yml and .env-sample to support using tailsacale as the main network.
  • Added appdata/ts-homepage/config/homepage.json to documentation and allowing it to sync into git.
  • Verified functionality and is working properly.

Important Tailscale File

homepage.json
{
    "TCP": {
      "443": {
        "HTTPS": true
      }
    },
    "Web": {
      "${TS_CERT_DOMAIN}:443": {
        "Handlers": {
          "/": {
            "Proxy": "http://home:3000"
          }
        }
      }
    },
    "AllowFunnel": {
      "${TS_CERT_DOMAIN}:443": false
    }
  }

Important Docker Files

.env file

.env
NAME=homepage
TZ=America/New_York
ID=1000
DOMAIN=
APPDATA=
SUB=home
PORT=3000
AUTHKEY=

docker-compose.yml file

docker-compose.yml
services:
  ts-homepage:
    image: tailscale/tailscale
    container_name: ts-${NAME}
    hostname: ${SUB}
    restart: always
    networks:
      - main
      - internal
    environment:
      TS_AUTHKEY: ${AUTHKEY}
      TS_ACCEPT_DNS: true
      TS_EXTRA_ARGS: --advertise-tags=tag:${NAME}
      TS_SERVE_CONFIG: /config/${NAME}.json
      TS_STATE_DIR: /var/lib/tailscale
      TS_USERSPACE: false
    devices:
      - /dev/net/tun:/dev/net/tun
    cap_add:
      - net_admin
    volumes:
      - ${APPDATA}/ts-${NAME}/state:/var/lib/tailscale
      - ${APPDATA}/ts-${NAME}/config:/config
    labels:
      com.centurylinklabs.watchtower.enable: true
  homepage:
    image: ghcr.io/gethomepage/homepage:main
    container_name: ${NAME}
    restart: always
    network_mode: service:ts-${NAME}
    volumes:
      - ${APPDATA}/${NAME}/config:/app/config
      - ${APPDATA}/${NAME}/icons:/app/public/icons
    environment:
      PUID: ${ID}
      PGID: ${ID}
    labels:
      com.centurylinklabs.watchtower.enable: true
  homepage-socket-proxy:
    image: lscr.io/linuxserver/socket-proxy
    container_name: ${NAME}-socket-proxy
    restart: unless-stopped
    networks:
      - internal
    read_only: true
    tmpfs:
      - /run
    environment:
      CONTAINERS: 1
      SERVICES: 1
      TASKS: 1
      POST: 0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    labels:
      com.centurylinklabs.watchtower.enable: true
networks:
  main:
    external: true
  internal:
    external: true

Start the Container

Start the Container
docker compose up -d