This guide provides a complete Ansible playbook to install Dashdot using Docker with proper configuration for server status dashboard and metrics visualization.
Current Dashdot version: Latest (Docker image)
Create a file named dashdot.yml:
---
- name: Install and Configure Dashdot
hosts: dashdot
become: true
vars:
dashdot_version: "latest"
dashdot_port: 3001
dashdot_data_dir: "/opt/dashdot/data"
dashdot_config_dir: "/opt/dashdot/config"
tasks:
- name: Create Dashdot directories
file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: '0755'
loop:
- "{{ dashdot_data_dir }}"
- "{{ dashdot_config_dir }}"
- name: Create Docker Compose file
copy:
dest: "{{ dashdot_data_dir }}/docker-compose.yml"
owner: root
group: root
mode: '0644'
content: |
version: '3.8'
services:
dashdot:
image: mauricenino/dashdot:{{ dashdot_version }}
container_name: dashdot
restart: unless-stopped
ports:
- "{{ dashdot_port }}:3001"
volumes:
- {{ dashdot_config_dir }}:/app/config
- /:/mnt/host:ro
privileged: true
environment:
- MAX_LOG_SIZE=10
- LOG_LEVEL=info
cap_add:
- SYS_ADMIN
networks:
- dashdot_net
networks:
dashdot_net:
driver: bridge
- name: Start Dashdot container
community.docker.docker_compose:
project_src: "{{ dashdot_data_dir }}"
state: present
build: false
pull: true
- name: Wait for Dashdot to start
wait_for:
port: "{{ dashdot_port }}"
delay: 5
timeout: 120
- name: Configure firewall (UFW)
ufw:
rule: allow
port: "{{ dashdot_port }}"
proto: tcp
comment: "Dashdot web interface"
when: ansible_os_family == "Debian"
failed_when: false
- name: Configure firewall (firewalld)
firewalld:
port: "{{ dashdot_port }}/tcp"
permanent: true
immediate: true
state: enabled
when: ansible_os_family == "RedHat"
failed_when: false
- name: Verify Dashdot is running
uri:
url: "http://localhost:{{ dashdot_port }}/"
method: GET
status_code: 200
register: health_check
retries: 3
delay: 5
until: health_check.status == 200
- name: Display Dashdot status
debug:
msg: |
Dashdot {{ dashdot_version }} installed successfully!
Web Interface: http://{{ ansible_default_ipv4.address | default(ansible_host) }}:{{ dashdot_port }}
Data directory: {{ dashdot_data_dir }}
Config directory: {{ dashdot_config_dir }}
---
dashdot:
hosts:
dashdot-server:
ansible_host: 192.168.1.124
ansible_user: ansible
ansible_become: true
# Test connectivity
ansible all -i inventory.yml -m ping
# Run the Dashdot playbook
ansible-playbook -i inventory.yml dashdot.yml
# Check container status
ssh dashdot-server "docker ps | grep dashdot"
# View container logs
ssh dashdot-server "docker logs dashdot"
# Test web interface
curl http://dashdot-server:3001/
# Access web UI
# http://dashdot-server:3001
- name: Configure Dashdot settings
hosts: dashdot
become: true
vars:
dashdot_config_dir: "/opt/dashdot/config"
tasks:
- name: Create custom configuration
copy:
dest: "{{ dashdot_config_dir }}/config.json"
owner: root
group: root
mode: '0644'
content: |
{
"title": "Server Dashboard",
"description": "Real-time server monitoring",
"theme": "dark",
"refreshInterval": 5000,
"showHostname": true,
"showIP": true,
"showUptime": true,
"showCPU": true,
"showMemory": true,
"showDisk": true,
"showNetwork": true
}
- name: Restart Dashdot
community.docker.docker_compose:
project_src: "{{ dashdot_data_dir }}"
state: present
restarted: true
# Check container logs
docker logs dashdot
# Check container status
docker ps -a | grep dashdot
# Check privileged mode
docker inspect dashdot | grep Privileged
# Check host mount
docker exec dashdot ls -la /mnt/host
# Check permissions
docker exec dashdot cat /mnt/host/proc/loadavg
# Restart container
docker-compose -f /opt/dashdot/data/docker-compose.yml restart
# Check container resources
docker stats dashdot
# Adjust refresh interval in config
# Edit config.json: "refreshInterval": 10000
We develop tailored automation solutions for:
Let’s discuss your requirements: office@linux-server-admin.com | Contact