Do you have so many self-hosted services running in your homelab that it’s hard to keep track of them all? Do you hate typing the IP/port for each one? You could use DNS, but a nice dashboard would make it easier too! Today I’m setting that up with Dashy, a beautiful and easy to edit homelab dashboard tool. It’s not the lightest weight tool in the world, but the look is worth it for me.

Video

Thumbnail

Install Script

Start with a Debian 11 (Bullseye) LXC container, and run this all as root. Feel free to go section by section if you want, or copy and paste the whole thing and yolo it.

#NodeJS 16
wget -O - https://deb.nodesource.com/setup_16.x | bash -
#apt update
apt update
#apt install stuff (nodejs version should track Nodesource now)
apt install -y nodejs git
#NPM install stuff (need a newer version of yarn than in apt)
npm install --global yarn

#Move to dashy dir, clone the git repo
cd /opt
git clone https://github.com/Lissy93/dashy.git
cd dashy

#Do the yarn
yarn
yarn build

#Create systemd service for Dashy
cat > /etc/systemd/system/dashy.service << EOF
[Unit]
Description=Dashy homelab dashboard
After=network-online.target

[Service]
Environment="PORT=80"
Environment="HOST=::"
ExecStart=/usr/bin/yarn --cwd=/opt/dashy start
Restart=always

[Install]
WantedBy=multi-user.target
EOF

#Create systemd service to rebuild dashy on config change
cat > /etc/systemd/system/dashy-rebuild.service << EOF
[Unit]
Description=Rebuild Dashy on Config Changes

[Service]
Type=oneshot
ExecStart=/usr/bin/yarn --cwd=/opt/dashy build
EOF

#Create systemd path to call service on config file change
cat > /etc/systemd/system/dashy-rebuild.path << EOF
[Unit]
Description=Monitor Dashy Config for Changes

[Path]
PathChanged=/opt/dashy/public/conf.yml

[Install]
WantedBy=multi-user.target
EOF

#Make systemd aware that we just changed stuff
systemctl daemon-reload

#And start our services!
systemctl enable --now dashy
systemctl enable --now dashy-rebuild.path