Set Up a Website to Creep on Yourself with Docker
Foreword
Project Repo: Live-dashboard
All steps in this guide are done on a Linux server.
Getting Started
Make sure Docker is installed on your server before you begin.
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
One-Click Deployment
1. Generate Keys
# Device key (generate one per device and save it)
openssl rand -hex 16
# HASH_SECRET (for internal server use, only need one)
openssl rand -hex 32
2. Start the Container
DEVICE_TOKEN format is key:deviceID:deviceName:platform
If you only have one device:
docker run -d --name live-dashboard \
-p 3000:3000 \
-v dashboard_data:/data \
-e HASH_SECRET=<MY_SECRET> \
-e 'DEVICE_TOKEN_1=<MY_TOKEN>:my-pc:MyPC:windows' \
ghcr.io/monika-dream/live-dashboard:latest
Multiple devices:
docker run -d --name live-dashboard \
-p 3000:3000 \
-v dashboard_data:/data \
-e HASH_SECRET=<MY_SECRET> \
-e 'DEVICE_TOKEN_1=<TOKEN_A>:my-pc:My Computer:windows' \
-e 'DEVICE_TOKEN_2=<TOKEN_B>:my-phone:My Phone:android' \
ghcr.io/monika-dream/live-dashboard:latest
# ─────── ───── ──── ───────
# key▲ ID▲ name▲ platform▲
# ▲key: the random string generated in step 1, unique per device
# ▲ID: a custom English identifier (e.g., my-pc, phone-1), unique per device
# ▲name: the display name on the dashboard, supports Chinese (e.g., 我的电脑, 小米手机)
# ▲platform: only accepts windows / macos / android
Note: Each device must have its own DEVICE_TOKEN_N; both the key and device ID must be unique. If two devices share the same TOKEN, they will appear as a single device and their statuses will overwrite each other.
Need more devices? Just keep adding DEVICETOKEN3, DEVICETOKEN4… The numbering doesn't have to be consecutive.
Need to add a device to an existing container? Stop and remove the old container first, then recreate it with the new command. Data is stored in the
dashboard_datavolume, so nothing will be lost:
>docker stop live-dashboard && docker rm live-dashboard
> # Then run the docker run command with the new DEVICE_TOKEN included
3. Open Your Browser
Visit http://localhost:3000. If you see the dashboard page, the server is up and running (it will show night mode since there's no device data yet).
Custom Site Metadata
docker run -d --name live-dashboard \
-p 3000:3000 \
-v dashboard_data:/data \
-e HASH_SECRET=<MY_SECRET> \
-e DEVICE_TOKEN_1=<MY_TOKEN>:my-pc:MyPC:windows \
-e DISPLAY_NAME=Your Name \
ghcr.io/monika-dream/live-dashboard:latest
Besides the display name, you can also customize the browser tab title, page description, and favicon:
docker run -d --name live-dashboard \
-p 3000:3000 \
-v dashboard_data:/data \
-e HASH_SECRET=<MY_SECRET> \
-e DEVICE_TOKEN_1=<MY_TOKEN>:my-pc:MyPC:windows \
-e DISPLAY_NAME=Your Name \
-e SITE_TITLE="Your Name Now" \
-e SITE_DESC="See what I'm up to" \
-e SITE_FAVICON="/favicon.ico" \
ghcr.io/monika-dream/live-dashboard:latest
Agent Setup
Agent Setup - Windows
Download
live-dashboard-agent.exefrom the author's GitHub ReleasesDouble-click to run it. On first launch, a settings dialog will pop up automatically—just fill in your server address and token.
Once configured, the agent will start reporting automatically.
See the author's guide for details: Agent Setup - Windows
Agent Setup - macOS
Download
live-dashboard-agent-macos.zipfrom the author's GitHub ReleasesUnzip and run it directly. On first launch, a settings dialog will pop up automatically—just fill in your server address and token.
Once configured, the agent will start reporting automatically.
See the author's guide for details: Agent Setup - macOS
Agent Setup - Android
Download: LiveDashboard
After installing, open the app and go to the "Settings" page to enter your server address and token.
Go to the "Health" page, tap the "Authorize" button to grant
Health Connectpermissions, and select the data types you want to sync (all are selected by default).Important: On the "Status" page, authorize via
Shizuku(otherwise the app name cannot be retrieved).On the "Status" page, enable the keep-alive permission.
Demo

Demo
Afterword
Feel free to come creep on me: Moitr Now