Install Just Dashboard
Set up the Docker Compose stack on the Linux server it will manage.
This guide covers Just Dashboard 0.8.4. Install it on the Linux server you want to manage; it controls that host's services, files, Docker Engine, firewall, and shell.
Before you begin
You need a Linux server, a user with sudo, and a way to SSH into it. Run the installer from a clone on that server. It checks for curl, OpenSSL, Certbot, Docker, and Docker Compose, and offers to install Docker if it is missing. It also tries to add the host tools the dashboard's Git, terminal and network pages use (git, git-lfs, gh, whois and traceroute); the dashboard runs without them, and a re-run tries again. The first build compiles the Go backend and Next.js frontend one at a time and can take a few minutes.
Decide how you want to reach the panel:
| Choice | What it needs | Address after setup |
|---|---|---|
| Tailscale (default) | A tailnet, or permission for the installer to connect this machine to one. Enable HTTPS under the tailnet's DNS settings for a trusted certificate. | Usually https://your-box.tailnet-name.ts.net:8443 |
| SSH tunnel | SSH access from the device where you will use the dashboard. | Usually http://localhost:8443 while the tunnel is open |
The installer may choose a different port if 8443 is already in use. Use the address and port it prints, rather than assuming the examples above.
Run the installer
git clone https://github.com/JustDashboard/Just-Dashboard.git
cd Just-Dashboard
sudo ./install.shThe installer works in four labelled stages: prepare the host, configure the dashboard, build and start the stack, and verify startup. ./install.sh --help previews them, and NO_COLOR=1 gives plain output.
Choose Tailscale or an SSH tunnel when prompted. Then choose the first administrator's username and either accept a generated password or enter your own (at least 12 characters, mixing three of upper case, lower case, digits and symbols). The installer asks whether to enable the web terminal and whether every account must use an authenticator app. With the terminal on, it also sets the web terminal to open zsh with history suggestions; SSH keeps your account's own shell. It writes a private .env, generates a master key, builds the Compose stack, and prints the sign-in URL and credentials.
Save the generated password when it appears. The installer prints it once. Do not replace the generated JD_MASTER_KEY after data has been stored: that key decrypts stored secrets. The installer's .env contains both settings and has mode 600; keep it out of version control.
The 0.8.4 release is on main, the repository's default branch, so the clone above needs no --branch. Settings → Version checks for and installs releases from JD_UPDATE_BRANCH, which defaults to main; leave it there, or set it to a fork or a branch of your own, then run docker compose up -d from the checkout to apply it. The installer does not write this variable.
Check the result
Open the exact URL printed at the end of setup. The sign-in page should appear. If you chose a tunnel, leave its SSH command running in a terminal on your device while you use the dashboard. Continue with first sign-in.
If the page does not open, start with the access guide and troubleshooting. The installer ends by listing terminal tools you run from the cloned directory on the server:
sudo ./scripts/manage.sh status # containers and their health
sudo ./scripts/manage.sh logs # follow the backend's log
./scripts/manage.sh --help # every command, including account recoveryThe installer can also link the server to your just-dashboard.com account, so its health and the way in show on the site. It asks once, with no as the default, and finishes the install either way; you can link later from Settings → just-dashboard.com or with sudo ./scripts/manage.sh link. See Linked servers.
docker compose ps and docker compose logs --tail=100 in the same directory work too. The logs can contain the one-time bootstrap password on a manual install, so redact credentials before sharing them.
Reinstall over existing data
The installer looks for what an earlier install left behind before it writes anything:
- An existing
.envin the checkout. It offers to keep it and just rebuild. That is the default; overwriting it makes every stored secret unreadable. - Settings kept by an uninstall. If you uninstalled with Keep for a reinstall and run the installer from a fresh clone, it offers to restore the kept settings, so the new install opens the old data with the old key.
- Data without its key. If
/var/lib/just-dashboardholds an earlier install's database but there is no.envfor it, the installer asks for the earlierJD_MASTER_KEY. Without it, the install continues with a new key: databases the dashboard finds in containers, and servers that need no password, reconnect by themselves, but other database passwords, deployment variables and backup credentials must be entered again, and accounts with two-factor sign in with a recovery code and enrol again.
Manual Compose setup
The guided installer is the recommended path. For a manual setup, copy .env.example to .env, set JD_MASTER_KEY to the output of openssl rand -hex 32, and choose JD_SITE, JD_TLS, and JD_ALLOWED_CIDRS for a private access path. The example file also sets JD_UPDATE_REPO and JD_UPDATE_BRANCH=main, which decide where update checks look; change them only to follow a fork or a branch of your own. Keep the file private, then build the stack:
cp .env.example .env
chmod 600 .env
openssl rand -hex 32
# Set JD_MASTER_KEY, your access options, and the two update variables in .env.
docker compose up -d --build
docker compose logs backendWhen JD_BOOTSTRAP_PASSWORD is empty, the backend prints a generated administrator password once in its log and requires it to be changed at first sign-in. A password you put in JD_BOOTSTRAP_PASSWORD is treated as one you chose. See the configuration reference before editing network or authentication settings.