Skip to content

Cacti Docker Container on Raspberry Pi 5

The following is a sample docker-compose.yml file intended for creating a Stack on Portainer.

Cacti - Docker Compose

# Cacti Docker Compose for Raspberry Pi 5 (ARM64)
# Based on joehorn/cacti with MariaDB backend
# Optimized for Portainer Stack deployment (no external config files needed)

services:
  cacti:
    image: joehorn/cacti:latest
    container_name: cacti
    hostname: cacti
    restart: unless-stopped
    ports:
      - "8080:80"
      - "8443:443"
    environment:
      - DB_HOST=db
      - DB_PORT=3306
      - DB_NAME=cacti
      - DB_USER=cacti
      - DB_PASS=cactipassword
      - DB_ROOT_PASS=rootpassword
      - INITIALIZE_DB=1
      - TZ=America/New_York
      - PHP_MEMORY_LIMIT=512M
      - PHP_MAX_EXECUTION_TIME=60
    volumes:
      - cacti_data:/cacti
      - cacti_spine:/spine
      - cacti_backups:/backups
      - cacti_rra:/var/lib/cacti/rra
      - /opt/cf-origin-cert/ocelot-coyotelabs-com-cf-origin.crt:/etc/ssl/certs/cacti.crt:ro
      - /opt/cf-origin-cert/ocelot-coyotelabs-com-cf-origin.key:/etc/ssl/certs/cacti.key:ro
    depends_on:
      db:
        condition: service_healthy
    networks:
      - cacti_network

  db:
    image: mariadb:10.11
    container_name: cacti_db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=cacti
      - MYSQL_USER=cacti
      - MYSQL_PASSWORD=cactipassword
      - TZ=America/New_York
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --max_connections=100
      - --max_allowed_packet=32M
      - --innodb_file_per_table=ON
      - --innodb_buffer_pool_size=512M
      - --innodb_doublewrite=ON
      - --innodb_lock_wait_timeout=50
      - --innodb_flush_log_at_timeout=3
      - --innodb_read_io_threads=16
      - --innodb_write_io_threads=8
      - --innodb_buffer_pool_instances=4
      - --innodb_io_capacity=1000
      - --innodb_io_capacity_max=2000
      - --max_heap_table_size=64M
      - --tmp_table_size=64M
      - --join_buffer_size=32M
      - --slow_query_log=0
      - --general_log=0
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - cacti_network

volumes:
  cacti_data:
  cacti_spine:
  cacti_backups:
  cacti_rra:
  db_data:

networks:
  cacti_network:
    driver: bridge

Cloudflare Origin Certificate

Generate a Cloudflare origin certificate and place the files under /opt/cf-origin-certs