Homelab Dashboard: Difference between revisions

From Sea of Fate
Jump to navigationJump to search
Tag: Manual revert
 
(22 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Introduction==
==Introduction==


We have decided to setup a homelab dashboard to monitor and administer the entire estate of Virtual machines, Proxmox hosts and all of the services that we have created. initially we will use the dashy dashboard but may well change for something else if dashy proves to be to difficult or in some way unsuitable.
We have decided to setup a '''[[Home Lab]]''' dashboard to monitor and administer the entire estate of '''[[Virtual Machines]]''', '''[[Proxmox Server | Proxmox]]''' hosts and all of the services that we have created. initially we will use the dashy dashboard but may well change for something else if dashy proves to be to difficult or in some way unsuitable.


==Dashy Setup==
==Dashy Setup==
Line 15: Line 15:
     container_name: dashy
     container_name: dashy
     restart: unless-stopped
     restart: unless-stopped
    # We map 443 on the host to 443 in the container for standard HTTPS
     ports:
     ports:
       - "443:443"
       - 443:443
     volumes:
     volumes:
       - ./conf.yml:/app/public/conf.yml
      # Use the path that we proved works:
       # Mount your Let's Encrypt certs (synced from Raisin to Blackberry)
       - /mnt/archive_data/docker_data/stacks/dashy/conf.yml:/app/public/conf.yml
       # SSL Certificates (Synced from Raisin)
       - /etc/nginx/ssl/seaoffate.net/fullchain.pem:/etc/ssl/certs/fullchain.pem:ro
       - /etc/nginx/ssl/seaoffate.net/fullchain.pem:/etc/ssl/certs/fullchain.pem:ro
       - /etc/nginx/ssl/seaoffate.net/privkey.pem:/etc/ssl/private/privkey.pem:ro
       - /etc/nginx/ssl/seaoffate.net/privkey.pem:/etc/ssl/private/privkey.pem:ro
     environment:
     environment:
       - NODE_ENV=production
       - NODE_ENV=production
      # Force Dashy to use the standard HTTPS port and specific cert paths
       - DOCKGE_ENABLE_CONSOLE=true
       - PORT=443
       - SSL_PUB_KEY_PATH=/etc/ssl/certs/fullchain.pem
       - SSL_PUB_KEY_PATH=/etc/ssl/certs/fullchain.pem
       - SSL_PRIV_KEY_PATH=/etc/ssl/private/privkey.pem
       - SSL_PRIV_KEY_PATH=/etc/ssl/private/privkey.pem
 
      - NODE_OPTIONS=--max-old-space-size=2048
networks: {}


===Post-Installation Steps ===
===Post-Installation Steps ===
Line 35: Line 35:
====Certificate Synchronization Hook====
====Certificate Synchronization Hook====


Before the container will start correctly in SSL mode, we must have a basic conf.yml in the same directory as our compose.yaml. This file defines our users and our "Fruit Cluster" links.  
Before the container will start correctly in SSL mode, we must have a basic conf.yml in the same directory as our compose.yaml. This file defines our users and our "Fruit Cluster" links. It is better to be sure that the docker app has the correct permissions for the yml, especially if it is in a non standard location.
  touch /opt/dockge/stacks/dashy/conf.yml
  touch sudo nano /mnt/archive_data/docker_data/stacks/dashy/conf.yml
sudo chown 1000:1000 /mnt/archive_data/docker_data/stacks/dashy/conf.yml
sudo chmod 644 /mnt/archive_data/docker_data/stacks/dashy/conf.yml
'''''Note''' we are using a non standard directory for our stacks, the more common location for the conf.yml is /opt/dockge/stacks/dashy/conf.yml''
 
To ensure Dashy stays updated when Raisin renews the Wildcard certs, make sure the deploy-wildcard.sh script on Raisin includes the Blackberry sync. It should have the Blackberry host in the servers list and the dashy restart in the if statements something like
To ensure Dashy stays updated when Raisin renews the Wildcard certs, make sure the deploy-wildcard.sh script on Raisin includes the Blackberry sync. It should have the Blackberry host in the servers list and the dashy restart in the if statements something like
   # Restart Dashy (Blackberry)
   # Restart Dashy (Blackberry)
Line 46: Line 50:
====Authentication Hardening====
====Authentication Hardening====


To fulfill the "Secure Application" requirement, we enable Dashy’s internal authentication. Even with a valid SSL cert, no data is visible without a login.
To fulfill the "Secure Application" requirement, we enable Dashy’s internal authentication. Even with a valid SSL cert, no data is visible without a login. Dashy requires a SHA-256 hash for the admin password. Run this on any terminal:
echo -n "YourSecretPassword" | sha256sum
'''''Note''' the quotes are only needed if there is spaces or similar in the password and the quotation marks are not part of the password''
Take the resulting string and place it in the auth section of your conf.yml on Blackberry
nano /mnt/archive_data/docker_data/stacks/dashy/conf.yml
A sample conf is as follows ( including the password YourSecretPassword it is assumed that the user will change the hash to some other password):
<nowiki>appConfig:
  title: SeaOfFate Command
  statusCheck: true
  auth:
    enable: true
    enableGuestAccess: false
    users:
      - user: nigel
        hash: '790e294c25e704e042c899bb4dbb696b9daa2ed330d270082599f8591dc62b96'
        type: admin
sections:
  - name: Infrastructure
    items:
      - title: Vaultwarden
        url: https://vault.seaoffate.net/alive
        icon: hl-bitwarden</nowiki>
 
'''💡 Why /alive'''
 
if you just ping the main URL, Dashy might get a 401 Unauthorized or a redirect, which can sometimes show up as a "Yellow" or "Red" dot even if the service is fine. The /alive path is specifically designed for health checks like this and always returns a simple 200 OK
 
====Verification====
 
Once started, you can verify the "Full-Chain TLS" by visiting:
* Internal(inside Pfsence): https://192.168.100.85 (Should show the valid seaoffate.net certificate from letsencrypt ).
* Internal(inside Pfsence): https://blackberry  (Assuming the internal nameserver ctns1 has the DNS entry for blackberry set should show the valid seaoffate.net certificate from letsencrypt).
* Internal(inside Pfsence): https://dashy.seaoffate.net (Assuming the internal nameserver ctns1 has the DNS entry for dashy set should show the valid seaoffate.net certificate from letsencrypt).
* Internal:(outside Pfsence) https://dashy.seaoffate.net (Assuming the DNS rewrite foe seaoffate.net on adguard set and Raisin reverse proxy rule is set, should show the valid seaoffate.net certificate from letsencrypt).
* External(though mobile phone Internet): https://dashy.seaoffate.net (Assuming the DNS for dashy is set on Cloudflare's control panel and dashy is proxied through Raisin it should show the Cloudflare SSL certificate).
When we have proved that the the dashboard works and that the login screen is displayed first we can move on to adding items to the dashboard.
 
==Configuring the Dashboard==

Latest revision as of 18:50, 20 April 2026

Introduction

We have decided to setup a Home Lab dashboard to monitor and administer the entire estate of Virtual Machines, Proxmox hosts and all of the services that we have created. initially we will use the dashy dashboard but may well change for something else if dashy proves to be to difficult or in some way unsuitable.

Dashy Setup

in the interests of security for this sensitive project we are extending your "Full-Chain TLS" SME standard to Blackberry. This ensures that even if a client bypasses the proxy (Raisin) and hits Blackberry directly on the network, the traffic is still encrypted and presents the valid *.seaoffate.net certificate. It will also mean that within the Pfsense side of the LAN any client will still meet the same secure SSL certificate system provided by Letsencrypt. 🛡️We will mount our existing SSL certificates (synced from Raisin) directly into the Dashy container and configure Dashy to serve HTTPS natively. Details of how the Certs are downloaded and installed can be found here.

Installation on Blackberry

🛠️ The "Dockge-Way" Setup, on our Dockge UI on Blackberry, create a new stack called dashy, and use this single, hardened configuration

services:
  dashy:
    image: lissy93/dashy:latest
    container_name: dashy
    restart: unless-stopped
    ports:
      - 443:443
    volumes:
      # Use the path that we proved works:
      - /mnt/archive_data/docker_data/stacks/dashy/conf.yml:/app/public/conf.yml
      # SSL Certificates (Synced from Raisin)
      - /etc/nginx/ssl/seaoffate.net/fullchain.pem:/etc/ssl/certs/fullchain.pem:ro
      - /etc/nginx/ssl/seaoffate.net/privkey.pem:/etc/ssl/private/privkey.pem:ro
    environment:
      - NODE_ENV=production
      - DOCKGE_ENABLE_CONSOLE=true
      - SSL_PUB_KEY_PATH=/etc/ssl/certs/fullchain.pem
      - SSL_PRIV_KEY_PATH=/etc/ssl/private/privkey.pem
      - NODE_OPTIONS=--max-old-space-size=2048
networks: {}

Post-Installation Steps

Certificate Synchronization Hook

Before the container will start correctly in SSL mode, we must have a basic conf.yml in the same directory as our compose.yaml. This file defines our users and our "Fruit Cluster" links. It is better to be sure that the docker app has the correct permissions for the yml, especially if it is in a non standard location.

touch sudo nano /mnt/archive_data/docker_data/stacks/dashy/conf.yml
sudo chown 1000:1000 /mnt/archive_data/docker_data/stacks/dashy/conf.yml
sudo chmod 644 /mnt/archive_data/docker_data/stacks/dashy/conf.yml

Note we are using a non standard directory for our stacks, the more common location for the conf.yml is /opt/dockge/stacks/dashy/conf.yml

To ensure Dashy stays updated when Raisin renews the Wildcard certs, make sure the deploy-wildcard.sh script on Raisin includes the Blackberry sync. It should have the Blackberry host in the servers list and the dashy restart in the if statements something like

 # Restart Dashy (Blackberry)
 if [ \$(docker ps -q -f name=dashy) ]; then
     echo '  Restarting Dashy...'
     docker restart dashy
 fi

Authentication Hardening

To fulfill the "Secure Application" requirement, we enable Dashy’s internal authentication. Even with a valid SSL cert, no data is visible without a login. Dashy requires a SHA-256 hash for the admin password. Run this on any terminal:

echo -n "YourSecretPassword" | sha256sum

Note the quotes are only needed if there is spaces or similar in the password and the quotation marks are not part of the password Take the resulting string and place it in the auth section of your conf.yml on Blackberry

nano /mnt/archive_data/docker_data/stacks/dashy/conf.yml

A sample conf is as follows ( including the password YourSecretPassword it is assumed that the user will change the hash to some other password):

appConfig:
   title: SeaOfFate Command
   statusCheck: true
   auth:
     enable: true
     enableGuestAccess: false
     users:
       - user: nigel
         hash: '790e294c25e704e042c899bb4dbb696b9daa2ed330d270082599f8591dc62b96'
         type: admin
 sections:
   - name: Infrastructure
     items:
       - title: Vaultwarden
         url: https://vault.seaoffate.net/alive
         icon: hl-bitwarden

💡 Why /alive

if you just ping the main URL, Dashy might get a 401 Unauthorized or a redirect, which can sometimes show up as a "Yellow" or "Red" dot even if the service is fine. The /alive path is specifically designed for health checks like this and always returns a simple 200 OK

Verification

Once started, you can verify the "Full-Chain TLS" by visiting:

  • Internal(inside Pfsence): https://192.168.100.85 (Should show the valid seaoffate.net certificate from letsencrypt ).
  • Internal(inside Pfsence): https://blackberry (Assuming the internal nameserver ctns1 has the DNS entry for blackberry set should show the valid seaoffate.net certificate from letsencrypt).
  • Internal(inside Pfsence): https://dashy.seaoffate.net (Assuming the internal nameserver ctns1 has the DNS entry for dashy set should show the valid seaoffate.net certificate from letsencrypt).
  • Internal:(outside Pfsence) https://dashy.seaoffate.net (Assuming the DNS rewrite foe seaoffate.net on adguard set and Raisin reverse proxy rule is set, should show the valid seaoffate.net certificate from letsencrypt).
  • External(though mobile phone Internet): https://dashy.seaoffate.net (Assuming the DNS for dashy is set on Cloudflare's control panel and dashy is proxied through Raisin it should show the Cloudflare SSL certificate).

When we have proved that the the dashboard works and that the login screen is displayed first we can move on to adding items to the dashboard.

Configuring the Dashboard