From 6f0ff9094e2dc505408d28489cb665b5eb06167a Mon Sep 17 00:00:00 2001 From: Coby Powers Date: Mon, 3 Apr 2023 15:48:07 -0500 Subject: [PATCH] Added Grafana & Prometheus --- compose.yml | 82 +++++++++++++++++++++++++++++++++++++++++--- scripts/backup-db.sh | 29 ++++++++++++++++ 2 files changed, 107 insertions(+), 4 deletions(-) create mode 100755 scripts/backup-db.sh diff --git a/compose.yml b/compose.yml index afeba69..6e7a680 100644 --- a/compose.yml +++ b/compose.yml @@ -7,7 +7,8 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - service_network - portainer: + + portainer: # Portainer (visualizes docker stack) container_name: portainer image: portainer/portainer-ce:latest restart: unless-stopped @@ -18,6 +19,67 @@ services: - service_network expose: - 9000 + + node-exporter: # Node Exporter (collects metrics from the host) + container_name: node-exporter + image: quay.io/prometheus/node-exporter:latest + restart: always + command: --path.rootfs=/host + pid: host + volumes: + - /:/host:ro,rslave + networks: + - service_network + expose: + - 9100 + + cadvisor: # cAdvisor (collects metrics from docker) + container_name: cadvisor + image: gcr.io/cadvisor/cadvisor:latest + restart: always + command: + - --housekeeping_interval=30s + - --disable_metrics=disk,diskIO,network,tcp,udp,percpu,sched,process + - --docker_only=true + devices: + - /dev/kmsg + volumes: + - /:/rootfs:ro + - /var/run:/var/run:ro + - /sys:/sys:ro + - /var/lib/docker:/var/lib/docker:ro + - /dev/disk:/dev/disk:ro + networks: + - service_network + expose: + - 8080 + + prometheus: # Prometheus (collects logs & metrics) + container_name: prometheus + image: prom/prometheus:latest + restart: unless-stopped + command: --config.file=/config/prometheus.yml + user: 1001:0 + volumes: + - ./data/prometheus/config:/config + - ./data/prometheus/data:/prometheus + networks: + - service_network + expose: + - 9090 + + grafana: # Grafana (visualizes Prometheus logs & metrics) + container_name: grafana + image: grafana/grafana-oss:latest + restart: unless-stopped + user: 1001:0 + volumes: + - ./data/grafana:/var/lib/grafana + networks: + - service_network + expose: + - 3000 + npm: # Nginx Proxy Manager (handles proxies) container_name: npm image: jc21/nginx-proxy-manager:latest @@ -33,10 +95,12 @@ services: - 80:80 - 81:81 - 443:443 + nextcloud: # Nextcloud (hosts file server) container_name: nextcloud image: nextcloud:latest restart: unless-stopped + user: 1001:0 env_file: ./env/nextcloud.env volumes: - ./data/nextcloud:/var/www/html @@ -49,6 +113,7 @@ services: depends_on: - nextcloud-db - nextcloud-cache + nextcloud-db: container_name: nextcloud-db image: mariadb:10.6 @@ -59,12 +124,14 @@ services: - ./data/nextcloud-db:/var/lib/mysql networks: - nextcloud_network + nextcloud-cache: container_name: nextcloud-cache image: redis:alpine restart: always networks: - nextcloud_network + pterodactyl: # Pterodactyl (hosts game servers) container_name: pterodactyl image: ghcr.io/pterodactyl/panel:latest @@ -80,6 +147,7 @@ services: depends_on: - pterodactyl-db - pterodactyl-cache + pterodactyl-db: container_name: pterodactyl-db image: mariadb:10.5 @@ -90,12 +158,14 @@ services: - ./data/pterodactyl-db:/var/lib/mysql networks: - pterodactyl_network + pterodactyl-cache: container_name: pterodactyl-cache image: redis:alpine restart: always networks: - pterodactyl_network + photoprism: # Photoprism (manages photo and video library) container_name: photoprism image: photoprism/photoprism:latest @@ -109,7 +179,7 @@ services: devices: - /dev/dri/card0:/dev/dri/card0 - /dev/dri/renderD128:/dev/dri/renderD128 - working_dir: "/photoprism" + working_dir: /photoprism volumes: - ./data/photoprism:/photoprism/storage - /mnt/storage/photoprism/import:/photoprism/import @@ -121,6 +191,7 @@ services: - 2342 depends_on: - photoprism-db + photoprism-db: container_name: photoprism-db image: mariadb:10.10 @@ -131,6 +202,7 @@ services: - ./data/photoprism-db:/var/lib/mysql networks: - photoprism_network + jellyfin: # Jellyfin (manages movies, shows, & books) container_name: jellyfin image: jellyfin/jellyfin:latest @@ -154,6 +226,7 @@ services: service_network: exposed_service_network: ipv4_address: 192.168.1.104 + gitea: # Gitea (hosts git server) container_name: gitea image: gitea/gitea:latest @@ -168,6 +241,7 @@ services: - 3000 depends_on: - gitea-db + gitea-db: container_name: gitea-db image: mysql:8 @@ -177,6 +251,7 @@ services: - ./data/gitea-db:/var/lib/mysql networks: - gitea_network + homer: # Homer (displays all self-hosted services) container_name: homer image: b4bz/homer:latest @@ -189,6 +264,7 @@ services: - service_network expose: - 8080 + uptime-kuma: # Uptime Kuma (displays uptime for all self-hosted services) container_name: uptime-kuma image: louislam/uptime-kuma:latest @@ -199,8 +275,6 @@ services: - service_network expose: - 3001 - depends_on: - - npm networks: diff --git a/scripts/backup-db.sh b/scripts/backup-db.sh new file mode 100755 index 0000000..2433ded --- /dev/null +++ b/scripts/backup-db.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +COMPOSE_PATH=/root/new-services + + +databases=$(docker compose -f ${COMPOSE_PATH}/compose.yml ps | grep '\-db' | awk '{print $1}' | tr '\n' ' ') + +for db in $databases; do + db_env_path=${COMPOSE_PATH}/env/${db}.env + + if [ ! -f $db_env_path ]; then + echo "Could not find the environment file for database '$db'" + continue + fi + + db_service=${db/\-db/} + db_passwd=$(cat $db_env_path | grep MYSQL_ROOT_PASSWORD | tr '=' ' ' | awk '{print $NF}' | tr -d '"') + db_dmp_cmd="mysqldump --password=${db_passwd} ${db_service} > /root/${db_service}.sql" + + echo -e "\nDumping database '${db}'" + docker exec ${db} sh -c "$db_dmp_cmd" &> /dev/null + + echo "Copying database dump '${db_service}.sql' to '${COMPOSE_PATH}/sql/${db_service}.sql'" + docker cp ${db}:/root/${db_service}.sql ${COMPOSE_PATH}/sql/${db_service}.sql &> /dev/null + + chown -R root:root ${COMPOSE_PATH}/sql +done + +echo -e "\nDumping complete!"