Installation

🐳 Docker

Installation

  • Docker installed and running on the target machine.
  • That’s it β€” no manual nginx or systemd setup, no config file to write by hand.

The version to install is required, via IMAGE_TAG: latest for the very newest, or a specific release (e.g. 0.1.0).

>_ Terminal
$ curl -fsSL https://raw.githubusercontent.com/joakim-ribier/axeos-dashboard/main/docker-install.sh | IMAGE_TAG=latest HTTP_PORT=81 bash

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1174  100  1174    0     0   2541      0 --:--:-- --:--:-- --:--:--  2546
>>> Image tag: latest
[+] pull 10/10
 βœ” Image ghcr.io/joakim-ribier/axeos-dashboard/axeos-services:latest  Pulled                                                                           12.7s
 βœ” Image ghcr.io/joakim-ribier/axeos-dashboard/axeos-dashboard:latest Pulled                                                                            9.6s
[+] up 3/3
 βœ” Network axeos-dashboard_default Created                                                                                                              0.0s
 βœ” Container axeos-services        Started                                                                                                              0.2s
 βœ” Container axeos-dashboard       Started                                                                                                              0.2s
>>> Done. Open http://<this-machine-ip>:<port>/ from any device on your LAN
    (see the PORTS column below for <port>, unless you passed HTTP_PORT):
NAME              IMAGE                                                          COMMAND                  SERVICE     CREATED                  STATUS                  PORTS
axeos-dashboard   ghcr.io/joakim-ribier/axeos-dashboard/axeos-dashboard:latest   "/docker-entrypoint.…"   dashboard   Less than a second ago   Up Less than a second   0.0.0.0:81->80/tcp, [::]:81->80/tcp
axeos-services    ghcr.io/joakim-ribier/axeos-dashboard/axeos-services:latest    "/entrypoint.sh"         services    Less than a second ago   Up Less than a second

Safe to re-run later β€” it never overwrites an existing config/dashboard.yml, and the port you chose (HTTP_PORT) is remembered from one run to the next.

πŸ’‘ Tip β€” install a specific release rather than latest

>_ Terminal
$ curl -fsSL https://raw.githubusercontent.com/joakim-ribier/axeos-dashboard/main/docker-install.sh | IMAGE_TAG=0.1.0 bash

Structure

Directory tree created wherever you ran the command:

axeos-dashboard/
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ .env
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ dashboard.yml
β”‚   └── mail-templates/  # the mails' texts, created by the mailer
└── storage/            # filled in once the services are running
    β”œβ”€β”€ logs/
    β”‚   β”œβ”€β”€ dashboard-api.log
    β”‚   β”œβ”€β”€ feeder.log
    β”‚   └── mailer.log
    └── data/
        β”œβ”€β”€ bitaxes/
        β”‚   └── <mac>/
        β”‚       β”œβ”€β”€ latest.json
        β”‚       └── YYYY-MM-DD.jsonl
        β”œβ”€β”€ audit/
        β”œβ”€β”€ mail/
        └── firmware_cache.json

Startup

Open http://localhost:81/ (the port from the example above), then:

Automatic miner detection

Update

Re-run the exact same install command, or from the axeos-dashboard/ folder:

>_ Terminal
$ docker compose pull && docker compose up -d

πŸ’» Native

A native-install.sh script will be shipped to make installing the individual services easier.


βš™οΈ Config file

dashboard.yml is a static file, read once at startup β€” any change requires restarting the binaries to take effect.

>_ dashboard.yml
global:
  env: dev

server:
  port: "8080"

mailer:
  port: "8082"

storage:
  dataDir: resources

feeder:
  interval: 2m

healthCheck:
  interval: 15s

endpoints:
  timeout: 5s
  info:    api/system/info
  system:  api/system
  restart: api/system/restart

firmware:
  cacheTTL: 24h
  • global.env β€” dev only shows logs on the console; any other value also writes log files.
  • server.port β€” dashboard-api’s listening port.
  • mailer.port β€” the port of the mailer, the service sending the mails; reached by dashboard-api on the machine itself only.
  • storage.dataDir β€” root data folder (miners, history, firmware cache).
  • feeder.interval β€” how often each miner is polled.
  • healthCheck.interval β€” how often reachability is checked.
  • endpoints β€” endpoint paths called on each miner (read, write pool, restart).
  • firmware.cacheTTL β€” how long the GitHub β€œlatest version” response is cached.

The miner list, electricity rate, notifications and pools are all managed directly from the app (Configuration page) β€” no need to hand-edit a file for that.

Go to Configuration β†’