Writing

A Home Server Control Panel with Homepage

Saturday. Apr 25, 2026

Hosting Homepage with Docker

In the earlier posts in this series, I add a few services (Jellyfin, Audiobookshelf, etc.). At some point, typing IPs and ports starts to feel like juggling. This post is where I add Homepage — a clean dashboard that lives at one LAN URL and links out to everything else.

1. Create folders

I keep service configs under /srv/appdata/, so I make a spot for Homepage.

sudo mkdir -p /srv/appdata/homepage/config
sudo chown -R $USER:$USER /srv/appdata/homepage

2. Create docker-compose.yml

From /srv/appdata/homepage/, I create a compose file.

services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    ports:
      - "3000:3000"
    volumes:
      - /srv/appdata/homepage/config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      HOMEPAGE_ALLOWED_HOSTS: http://<server-ip>:3000
    restart: unless-stopped

3. Bring it up

docker compose up -d

Then I open: http://<server-ip>:3000

4. Add a minimal config (Settings, Services, Bookmarks, Widgets)

Homepage is configured with YAML files inside the config folder.

services.yaml

- Media:
    - Jellyfin:
        href: http://<server-ip>:8096
        description: movies + shows
    - Audiobookshelf:
        href: http://<server-ip>:13378
        description: audiobooks + podcasts
    - Immich:
        href: http://<server-ip>:2283
        description: photos

- Admin:
    - Router:
        href: http://192.168.1.1

widgets.yaml

- resources:
    label: Server
    cpu: true
    memory: true
    uptime: true

Hosting Homepage with Docker

In the earlier posts in this series, I add a few services (Jellyfin, Audiobookshelf, etc.). At some point, typing IPs and ports starts to feel like juggling. This post is where I add Homepage — a clean dashboard that lives at one LAN URL and links out to everything else.

1. Create folders

I keep service configs under /srv/appdata/, so I make a spot for Homepage.

sudo mkdir -p /srv/appdata/homepage/config
sudo chown -R $USER:$USER /srv/appdata/homepage

2. Create docker-compose.yml

From /srv/appdata/homepage/, I create a compose file.

services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    ports:
      - "3000:3000"
    volumes:
      - /srv/appdata/homepage/config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      HOMEPAGE_ALLOWED_HOSTS: http://<server-ip>:3000
    restart: unless-stopped

3. Bring it up

docker compose up -d

Then I open: http://<server-ip>:3000

4. Add a minimal config (Settings, Services, Bookmarks, Widgets)

Homepage is configured with YAML files inside the config folder.

services.yaml

- Media:
    - Jellyfin:
        href: http://<server-ip>:8096
        description: movies + shows
    - Audiobookshelf:
        href: http://<server-ip>:13378
        description: audiobooks + podcasts
    - Immich:
        href: http://<server-ip>:2283
        description: photos

- Admin:
    - Router:
        href: http://192.168.1.1

widgets.yaml

- resources:
    label: Server
    cpu: true
    memory: true
    disk: /mnt/srv
    uptime: true

I finish by bookmarking it. Now I’ve got one LAN tab that links to everything and shows the server’s basics at a glance.