Shubham Ranpise

Back

Homelab Portal

Deploy a lightweight dashboard to access internal homelab services from a single page.

As more services are added to a homelab, remembering ports and URLs becomes inconvenient.
For example:

https://pi.local:11443  → AdGuard
https://pi.local:12443  → FileBrowser
https://pi.local:13443  → Portainer
plaintext

A simple portal solves this by providing one landing page that lists all internal services with clean links and icons.

Instead of remembering multiple ports, everything can be accessed from:

http://pi.local
plaintext

The portal itself is a static web page, so it does not require any application runtime. A lightweight web server is sufficient.

Nginx is used because it is efficient, minimal, and well suited for serving static content.


Install Nginx#

Update package lists and install the Nginx web server.

sudo apt update
sudo apt install nginx -y
bash

Enable and start the service so it runs automatically at boot.

sudo systemctl enable nginx
sudo systemctl start nginx
bash

Verify that the service is running.

sudo systemctl status nginx
bash

Create the Website Directory#

The portal files will be stored under /var/www.

Create a dedicated directory for the portal.

sudo mkdir -p /var/www/pi-portal
bash

Set proper ownership and permissions so the web server can read the files.

sudo chown -R www-data:www-data /var/www/pi-portal
sudo chmod -R 755 /var/www/pi-portal
bash

Place the portal files inside this directory.

Example structure:

/var/www/pi-portal

├── index.html
└── assets
    ├── favicon.png
    ├── adguard.png
    ├── filebrowser.png
    └── portainer.png
plaintext

Configure the Nginx Site#

Create a new site configuration.

sudo nano /etc/nginx/sites-available/pi-portal
bash

Add the following configuration:

This configuration:

  • serves files from /var/www/pi-portal
  • responds to the hostname pi.local
  • disables directory indexing
  • adds basic browser security protections

Disable the Default Nginx Site#

The default configuration is removed to avoid conflicts.

sudo rm /etc/nginx/sites-enabled/default
bash

Enable the Portal Site#

Nginx only loads configurations located in sites-enabled. Enable the new site by creating a symbolic link.

sudo ln -s /etc/nginx/sites-available/pi-portal /etc/nginx/sites-enabled/
bash

Validate the Configuration#

Before reloading Nginx, check the configuration syntax.

sudo nginx -t
bash

If the test is successful, reload the server.

sudo systemctl reload nginx
bash

Verify Nginx is Listening#

Confirm that Nginx is listening on port 80.

sudo ss -tulpn | grep :80
bash

Expected output should indicate that Nginx is bound to port 80.


Access the Portal#

The dashboard should now be accessible via:

http://pi.local
plaintext

If local DNS is configured (for example using AdGuard DNS rewrite), the hostname will resolve automatically within the network.

Otherwise the portal can also be accessed using the Raspberry Pi IP address.