mirror of
https://github.com/marcogll/omarchy_setup.git
synced 2026-01-13 21:35:16 +00:00
This is a major refactoring and documentation effort that touches every module in the project. - **Exhaustive In-Code Documentation:** Every module script in the `modules/` directory has been updated with detailed comments. This includes header descriptions, explanations for each function, and justifications for complex logic. This greatly improves the maintainability and readability of the code. - **Code Robustness and Optimization:** Several modules have been refactored to be more robust and efficient. This includes: - Optimizing package installations by grouping them into a single `pacman` command. - Improving dependency checks. - Standardizing the use of helper functions from `common.sh`. - Making network operations more resilient. - **Comprehensive `Readme.md` Update:** The main `Readme.md` has been rewritten to be a complete and professional guide to the project. It now includes: - A clear and detailed description of each module. - Information on what each module installs and how it works. - Instructions for installing the required Nerd Font for `oh-my-posh`. - An updated structure that is easier to navigate.
98 lines
4.1 KiB
Bash
Executable File
98 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ===============================================================
|
|
# docker.sh - Configuración de Docker y Portainer
|
|
# ===============================================================
|
|
#
|
|
# Este módulo se encarga de la instalación y configuración de Docker
|
|
# y, opcionalmente, de Portainer, una interfaz web para gestionar
|
|
# contenedores.
|
|
#
|
|
# Funciones principales:
|
|
# - Instala Docker y Docker Compose desde los repositorios oficiales.
|
|
# - Habilita e inicia los servicios de Docker.
|
|
# - Agrega el usuario actual al grupo `docker` para permitir la
|
|
# ejecución de comandos de Docker sin `sudo`.
|
|
# - Ofrece la opción de instalar Portainer.
|
|
#
|
|
# ===============================================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/common.sh"
|
|
|
|
# ---------------------------------------------------------------
|
|
# install_docker()
|
|
# ---------------------------------------------------------------
|
|
# Orquesta la instalación y configuración de Docker y Portainer.
|
|
# ---------------------------------------------------------------
|
|
install_docker() {
|
|
log_step "Configuración de Docker y Portainer"
|
|
|
|
# --- 1. Instalación de Docker ---
|
|
log_info "Instalando Docker y Docker Compose..."
|
|
if ! sudo pacman -S --noconfirm --needed docker docker-compose; then
|
|
log_error "No se pudo instalar Docker. Abortando."
|
|
return 1
|
|
fi
|
|
|
|
# --- 2. Configuración del Servicio de Docker ---
|
|
log_info "Habilitando e iniciando los servicios de Docker..."
|
|
# Habilita los servicios para que se inicien automáticamente con el sistema.
|
|
sudo systemctl enable docker.service
|
|
sudo systemctl enable containerd.service
|
|
# Inicia los servicios en la sesión actual.
|
|
sudo systemctl start docker.service
|
|
|
|
# --- 3. Configuración de Permisos de Usuario ---
|
|
# Agrega el usuario actual al grupo `docker` para evitar tener que usar `sudo`.
|
|
if ! groups "$USER" | grep -q docker; then
|
|
log_info "Agregando al usuario '$USER' al grupo 'docker'..."
|
|
if ! sudo usermod -aG docker "$USER"; then
|
|
log_error "No se pudo agregar el usuario al grupo 'docker'."
|
|
# No es un error fatal, así que solo se muestra una advertencia.
|
|
else
|
|
log_warning "Para que los cambios de grupo surtan efecto, debes cerrar sesión y volver a iniciarla."
|
|
fi
|
|
fi
|
|
|
|
# --- 4. Instalación Opcional de Portainer ---
|
|
echo ""
|
|
read -p "¿Deseas instalar Portainer (interfaz web para Docker)? [S/n]: " confirm_portainer
|
|
if [[ ! "${confirm_portainer}" =~ ^[Nn]$ ]]; then
|
|
log_info "Instalando Portainer..."
|
|
|
|
# Comprueba si el contenedor de Portainer ya existe para evitar errores.
|
|
if sudo docker ps -a --format '{{.Names}}' | grep -q "^portainer$"; then
|
|
log_info "El contenedor de Portainer ya existe. Se detendrá y eliminará para volver a crearlo."
|
|
sudo docker stop portainer >/dev/null 2>&1 || true
|
|
sudo docker rm portainer >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# Crea un volumen de Docker para persistir los datos de Portainer.
|
|
sudo docker volume create portainer_data >/dev/null 2>&1 || true
|
|
|
|
# Ejecuta el contenedor de Portainer.
|
|
if sudo docker run -d -p 8000:8000 -p 9443:9443 \
|
|
--name portainer \
|
|
--restart=always \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-v portainer_data:/data \
|
|
portainer/portainer-ce:latest; then
|
|
log_success "Portainer se ha instalado y está corriendo."
|
|
log_info "Puedes acceder a la interfaz web en: https://localhost:9443"
|
|
else
|
|
log_error "No se pudo instalar Portainer."
|
|
# No se devuelve un error aquí porque la instalación de Docker fue exitosa.
|
|
fi
|
|
else
|
|
log_info "Se omitió la instalación de Portainer."
|
|
fi
|
|
|
|
log_success "La configuración de Docker ha finalizado."
|
|
return 0
|
|
}
|
|
|
|
# Ejecutar si se llama directamente al script.
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
install_docker "$@"
|
|
fi
|