From 103a138e2750b25b455ab1a820edceec153ccb88 Mon Sep 17 00:00:00 2001 From: ZUHOWKS Date: Tue, 15 Apr 2025 20:03:35 +0200 Subject: [PATCH] Fix volume binding --- docker-compose.yml | 28 ++++++++ src/main.rs | 9 --- src/services/helpers/docker_helper.rs | 93 --------------------------- 3 files changed, 28 insertions(+), 102 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 602e4c7..b38ef30 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,5 +9,33 @@ services: - .env volumes: - /var/run/docker.sock:/var/run/docker.sock + - prometheus_data:/app/prometheus + - nephelios_data:/app/config/prometheus + - registry_data:/var/lib/nephelios/registry + - grafana_data:/var/lib/nephelios/grafana + - grafana_provisioning:/app/config/grafana + - grafana_dashboard:/app/config/dashboards ports: - "3030:3030" + +volumes: + grafana_data: + name: grafana_data + + grafana_provisioning: + name: grafana_provisioning + + grafana_dashboard: + name: grafana_dashboard + + letsencrypt: + name: letsencrypt + + prometheus_data: + name: prometheus_data + + registry_data: + name: registry_data + + nephelios_data: + name: nephelios_data diff --git a/src/main.rs b/src/main.rs index 489e651..96997f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,8 +18,6 @@ use warp::Filter; mod metrics; use crate::metrics::{CONTAINER_CPU, CONTAINER_MEM, CONTAINER_NET_IN, CONTAINER_NET_OUT, REGISTRY}; -use self::services::helpers::docker_helper::ensure_volumes; - /// Entry point for the application. /// /// Initializes and starts the Warp server. The server listens on `127.0.0.1:3030` @@ -91,13 +89,6 @@ async fn main() { Err(e) => eprintln!("❌ Failed to prune Docker images: {}", e), } - println!("🚀 Ensuring Docker volumes exist..."); - let res_ensure_volumes = ensure_volumes().await; - match res_ensure_volumes { - Ok(_) => println!("✅ Docker volumes ensured successfully"), - Err(e) => eprintln!("❌ Failed to ensure Docker volumes: {}", e), - } - println!("🚀 Check if Docker Swarm is initialized..."); let is_alive = check_swarm(); match is_alive { diff --git a/src/services/helpers/docker_helper.rs b/src/services/helpers/docker_helper.rs index bbef7d3..7caa8ed 100644 --- a/src/services/helpers/docker_helper.rs +++ b/src/services/helpers/docker_helper.rs @@ -983,92 +983,6 @@ pub fn check_swarm() -> Result { Ok(String::from_utf8_lossy(&swarm_info.stdout).contains("Swarm: active")) } -/// Ensures that all required Docker volumes exist for Nephelios. -/// If any volume doesn't exist, it will be created. -/// -/// # Returns -/// * `Ok(())` if all volumes were successfully checked/created -/// * `Err(String)` if there was an error during the process -pub async fn ensure_volumes() -> Result<(), String> { - let docker = Docker::connect_with_local_defaults() - .map_err(|e| format!("Failed to connect to Docker: {}", e))?; - - let required_volumes = vec![ - NepheliosVolume { - name: "grafana_data", - mount_path: "/var/lib/nephelios/grafana", - }, - NepheliosVolume { - name: "grafana_provisioning", - mount_path: "/app/config/grafana", - }, - NepheliosVolume { - name: "grafana_dashboard", - mount_path: "/app/config/dashboards", - }, - NepheliosVolume { - name: "prometheus_data", - mount_path: "/app/prometheus", - }, - NepheliosVolume { - name: "registry_data", - mount_path: "/var/lib/nephelios/registry", - }, - NepheliosVolume { - name: "nephelios_data", - mount_path: "/app/config/prometheus", - }, - ]; - - for volume in required_volumes { - // Check if volume exists - let filters: HashMap> = { - let mut map = HashMap::new(); - map.insert("name".to_string(), vec![volume.name.to_string()]); - map - }; - - let options = bollard::volume::ListVolumesOptions { filters }; - - let volumes = docker - .list_volumes(Some(options)) - .await - .map_err(|e| format!("Failed to list volumes: {}", e))?; - - if volumes.volumes.is_none() || volumes.volumes.as_ref().unwrap().is_empty() { - println!("Creating volume: {}", volume.name); - - // Créer le volume avec les options de montage - let mountpoint = volume.mount_path.to_string(); - let mut labels = HashMap::new(); - labels.insert("com.nephelios.mountpoint", mountpoint.as_str()); - - let options = bollard::volume::CreateVolumeOptions { - name: volume.name, - labels: labels, - ..Default::default() - }; - - docker - .create_volume(options) - .await - .map_err(|e| format!("Failed to create volume {}: {}", volume.name, e))?; - - println!( - "✅ Volume {} created successfully (mount: {})", - volume.name, volume.mount_path - ); - } else { - println!( - "✅ Volume {} already exists (mount: {})", - volume.name, volume.mount_path - ); - } - } - - Ok(()) -} - /// Prunes unused Docker images. /// /// Connects to the local Docker daemon and removes all dangling images. @@ -1251,10 +1165,3 @@ fn parse_memory(val: &str) -> f64 { .parse::() .unwrap_or(0.0) } - -/// Structure définissant un volume Nephelios et son point de montage -#[derive(Debug)] -struct NepheliosVolume { - name: &'static str, - mount_path: &'static str, -}