███████╗ ██████╗ ██████╗ ██████╗ ███████╗██╗ ██╗██╗ ██████╗███████╗███████╗
██╔════╝██╔════╝██╔═══██╗ ██╔══██╗██╔════╝██║ ██║██║██╔════╝██╔════╝██╔════╝
███████╗██║ ██║ ██║ ██║ ██║█████╗ ██║ ██║██║██║ █████╗ ███████╗
╚════██║██║ ██║▄▄ ██║ ██║ ██║██╔══╝ ╚██╗ ██╔╝██║██║ ██╔══╝ ╚════██║
███████║╚██████╗╚██████╔╝ ██████╔╝███████╗ ╚████╔╝ ██║╚██████╗███████╗███████║
╚══════╝ ╚═════╝ ╚══▀▀═╝ ╚═════╝ ╚══════╝ ╚═══╝ ╚═╝ ╚═════╝╚══════╝╚══════╝
███████╗ █████╗ ██╗███╗ ██╗██╗ ██╗
██╔════╝██╔══██╗███║████╗ ██║██║ ██╔╝
█████╗ ███████║╚██║██╔██╗ ██║█████╔╝
██╔══╝ ██╔══██║ ██║██║╚██╗██║██╔═██╗
███████╗██║ ██║ ██║██║ ╚████║██║ ██╗
2026 EA1NK-Docker-DXSpider High-Performance DX Cluster Stack with WebUI, MariaDB & Nginx
This repository provides a Microservices Stack designed to deploy a high-performance DXSpider node (Mojo branch), fully containerized and production-ready.
This project is heavily based on the excellent work by 9M2PJU in his 9M2PJU-DXSpider-Docker repository. It has been customized, optimized for Alpine 3.20, and expanded to include a full MariaDB/Nginx stack.
The web interface is powered by Spiderweb, an open-source DX Cluster web frontend developed by IU1BOW - Corrado Gerbaldo.
This project applies local patches to the Spiderweb interface during the image build process from the files stored in web_server/patches/. These patches are used to adapt Spiderweb behavior and presentation to this stack when needed.
The deployment consists of six interconnected components running within an isolated internal network:
- DXSpider Node (Mojo): The core cluster engine, optimized for asynchronous processes and low latency.
- MariaDB 10.11: Relational database engine for persistent storage of spots.
- Spiderweb (IU1BOW): A feature-rich web frontend for DX Cluster, displaying live spots, statistics, charts and propagation data. Developed by IU1BOW - Corrado Gerbaldo.
- WebUI (ttyd/Mojo Web): A tactical web-based interface for remote sysop administration and monitoring via browser.
- NGINX Reverse Proxy: Acts as a secure gateway, managing HTTP/Websocket traffic to the WebUI and providing an additional layer of protection.
- Telegram Bot (optional profile): Reads live spots from DXSpider and sends filtered alerts to Telegram users. It also supports
/lastqueries against MariaDB.
- Docker 24.0+
- Docker Compose v2
- A valid amateur radio callsign
git clone https://github.com/ea1nk/EA1NK-Docker-DxSpider.git
cd EA1NK-Docker-DxSpiderCopy or edit the .env file and fill in your details:
# Your cluster callsign (e.g. EA1NK-8)
CLUSTER_CALLSIGN=MYCALL-8
# Sysop details
CLUSTER_SYSOP_NAME=YourName
CLUSTER_SYSOP_CALLSIGN=MYCALL
CLUSTER_SYSOP_PASSWORD=your_sysop_password
# Location
CLUSTER_LATITUDE=40.41650
CLUSTER_LONGITUDE=-3.70357
CLUSTER_LOCATOR=IN80DO
CLUSTER_QTH=Madrid, Spain
# Contact
CLUSTER_SYSOP_EMAIL=[email protected]
# Hostname (used in telnet banner)
CLUSTER_DX_HOSTNAME=dx.yourdomain.com
CLUSTER_PORT=7300
CLUSTER_SYSOP_PORT=8050
# MariaDB — change these before first run
CLUSTER_DB_USER=sysop
CLUSTER_DB_PASS=change_me
CLUSTER_DB_ROOT_PASSWORD=change_me_root
CLUSTER_DB_NAME=spiderdb
# Spiderweb internal telnet user (auto-created)
CLUSTER_SPIDERWEB_USER=SPIDERWEBUSER
CLUSTER_SPIDERWEB_PASSWORD=change_me_web
# Telegram Bot (optional)
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
MY_CALL=MYCALL-BOT
DEBUG_TELNET=0
PYTHONUNBUFFERED=1
# Optional override (defaults to spider_database in compose)
CLUSTER_DB_HOST=spider_database
# Enable optional compose profile
COMPOSE_PROFILES=telegram_botNote:
CLUSTER_SPIDERWEB_USERandCLUSTER_SPIDERWEB_PASSWORDare created automatically in DXSpider at startup — you don't need to create them manually.
docker compose up -d --buildThe first run will build the DXSpider and Spiderweb images. This may take a few minutes.
docker compose psCore services should show Up or Up (healthy). If Telegram profile is enabled, dxspider-telegram-bot should also be Up.
| Service | URL |
|---|---|
| Spiderweb (DX spots & stats) | http://localhost/ |
| Sysop console (ttyd) | http://localhost/console |
| Telnet cluster access | telnet localhost 7300 |
# Stop
docker compose down
# Start again (no rebuild needed)
docker compose up -dData persistence: All spot data and user configuration is stored in
./database_data/(MariaDB volume) and./local_data/(DXSpider config). These directories are excluded from git.
The Telegram bot is included as the telegram_bot profile in docker-compose.yml.
Start stack with Telegram profile enabled:
docker compose --profile telegram_bot up -d --buildOr keep COMPOSE_PROFILES=telegram_bot in .env and run the normal command:
docker compose up -d --buildCheck bot logs:
docker compose logs -f telegram_botNotes:
- The bot token must be provided in
.envasTELEGRAM_BOT_TOKEN. /lastrequires MariaDB access variables (CLUSTER_DB_NAME,CLUSTER_DB_USER,CLUSTER_DB_PASS, and optionalCLUSTER_DB_HOST).- The integrated bot supports both DXSpider table schemas (
spotsand legacyspot) for/lastcompatibility. - Full bot command and filter documentation is available in
telegram_bot/README.md.