feat: Botón Guardar Todo en conceptos y mejoras Docker

Cambios realizados:
- concept_view.php: Agregado botón 'Guardar Todo' arriba y abajo de la tabla, eliminado botón individual por fila
- dashboard.php: Agregado endpoint save_all_concept_payments para guardar múltiples pagos
- docker-entrypoint.sh: Corregidos permisos de volúmenes para ZimaOS/CasaOS (cambia dueño a www-data)
- docker/Dockerfile: Corregida ruta del entrypoint
- build-and-push.sh: Script interactivo para crear imagen Docker con opción de caché/sin caché

Los cambios permiten guardar todos los pagos de conceptos de una sola vez y mejoran la compatibilidad con despliegues en ZimaOS.
This commit is contained in:
2026-02-13 23:09:45 -06:00
parent 8f2f04951f
commit 23b527d3f5
27 changed files with 1517 additions and 19 deletions

13
docker/.dockerignore Executable file
View File

@@ -0,0 +1,13 @@
# Archivos a excluir de Docker
.git
.gitignore
.env
.env.example
README.md
docs/
.DS_Store
Thumbs.db
*.log
*.tmp
uploads/*
!uploads/.gitkeep

85
docker/Dockerfile Executable file
View File

@@ -0,0 +1,85 @@
# Usar Ubuntu como base
FROM ubuntu:22.04
# Evitar interactividad durante instalación
ENV DEBIAN_FRONTEND=noninteractive
# Actualizar sistema e instalar dependencias
RUN apt-get update && apt-get install -y \
apache2 \
php8.1 \
php8.1-mysql \
php8.1-pdo \
php8.1-mbstring \
php8.1-xml \
php8.1-curl \
php8.1-gd \
php8.1-zip \
php8.1-tokenizer \
php8.1-bcmath \
php8.1-intl \
php8.1-ldap \
php8.1-soap \
php8.1-xsl \
php8.1-imagick \
libapache2-mod-php8.1 \
curl \
wget \
unzip \
git \
composer \
bash \
bash-completion \
readline-common \
nano \
less \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Habilitar módulos de Apache
RUN a2enmod rewrite \
&& a2enmod headers \
&& a2enmod expires
# Configurar Apache
RUN sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf \
&& sed -i 's/DocumentRoot \/var\/www\/html/DocumentRoot \/var\/www\/html\/ibiza/g' /etc/apache2/sites-available/000-default.conf
# Configurar PHP
RUN sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 64M/g' /etc/php/8.1/apache2/php.ini \
&& sed -i 's/post_max_size = 8M/post_max_size = 64M/g' /etc/php/8.1/apache2/php.ini \
&& sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php/8.1/apache2/php.ini \
&& sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.1/apache2/php.ini
# Crear directorio de la aplicación
WORKDIR /var/www/html/ibiza
# Copiar archivos de la aplicación con el owner correcto
COPY --chown=www-data:www-data . .
# Instalar dependencias de Composer
RUN composer install --no-dev --optimize-autoloader --no-interaction || true
# Crear directorios necesarios
RUN mkdir -p /var/www/html/ibiza/uploads
# Configurar permisos
RUN chown -R www-data:www-data /var/www/html/ibiza \
&& chmod -R 755 /var/www/html/ibiza \
&& chmod -R 777 /var/www/html/ibiza/uploads \
&& touch /var/www/html/ibiza/.env \
&& chown www-data:www-data /var/www/html/ibiza/.env
# Exponer puertos
EXPOSE 80 443
# Script de inicio
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Asegurar que Apache pueda correr como www-data
RUN sed -i 's/export APACHE_RUN_USER=www-data/export APACHE_RUN_USER=www-data/g' /etc/apache2/envvars \
&& sed -i 's/export APACHE_RUN_GROUP=www-data/export APACHE_RUN_GROUP=www-data/g' /etc/apache2/envvars
# Iniciar Apache
CMD ["docker-entrypoint.sh"]

102
docker/README.md Executable file
View File

@@ -0,0 +1,102 @@
# Docker - Archivos para crear imagen y registry
Este directorio contiene TODOS los archivos Docker organizados y centralizados.
## 🐳 Crear Imagen Docker
- `Dockerfile` - Configuración del contenedor Ubuntu + Apache + PHP
- `docker-entrypoint.sh` - Script de inicio para el contenedor
- `docker-compose.yml` - Para pruebas locales
- `.dockerignore` - Excluir archivos innecesarios
## 📦 Registry Docker Privado
- `daemon.json` - Configuración Docker para registry local
- Scripts para configuración en servidor remoto
## 🏠 CasaOS Installation
- `casaos-sin-env-completo.yml` - ✅ **RECOMENDADO** (sin errores)
- `casaos-sin-env.yml` - Versión simple sin .env
- `casaos-simple-final.yml` - Versión corregida
- `casaos-registry-corregido.yml` - Con metadatos completos
- Y otros archivos YAML para diferentes necesidades
## 🔧 Scripts y Configuración
- `corregir-forzado-registry.sh` - ✅ **DEFINITIVO** para error HTTP/HTTPS
- `diagnostico-registry.sh` - Script de diagnóstico completo
- `corregir-insecure-registry.sh` - Corrección rápida
- `configurar-servidor-remoto.sh` - Configuración básica
## 📖 Instrucciones
- `INSTRUCCIONES_SERVIDOR_REMOTO.txt` - Guía completa y actualizada
- `instrucciones_cortas.txt` - Versión rápida con comandos
## 📁 Estructura Completa
```
docker/
├── 🐳 Imagen Docker (4 archivos)
├── 🏠 CasaOS YAML (7 archivos)
├── 🔧 Scripts (4 archivos)
├── ⚙️ Configuración (1 archivo)
├── 📖 Documentación (2 archivos)
└── 📂 yamls/ (directorio extra)
```
**Total: 18 archivos organizados**
## 📁 Estructura
```
docker/
├── 🐳 Imagen Docker
│ ├── Dockerfile
│ ├── docker-entrypoint.sh
│ ├── docker-compose.yml
│ └── .dockerignore
├── 📦 Registry Privado
│ └── daemon.json
├── 🏠 CasaOS Installation
│ ├── casaos-simple-final.yml
│ ├── casaos-sin-env.yml
│ ├── casaos-sin-env-completo.yml
│ └── casaos-registry-corregido.yml
├── 🔧 Scripts y Configuración
│ ├── configurar-servidor-remoto.sh
│ ├── diagnostico-registry.sh
│ ├── corregir-insecure-registry.sh
│ └── corregir-forzado-registry.sh
└── 📖 Documentación
├── INSTRUCCIONES_SERVIDOR_REMOTO.txt
└── instrucciones_cortas.txt
```
## 🚀 Uso Rápido
### Crear imagen Docker localmente:
```bash
cd /var/www/html/ibiza/docker/
docker compose build
docker compose up -d
```
### Configurar registry en servidor remoto (10.10.4.17):
```bash
curl -s http://10.10.4.3:82/docker/corregir-forzado-registry.sh | bash
```
### Instalar en CasaOS (versión recomendada):
```bash
wget http://10.10.4.3:82/docker/casaos-sin-env-completo.yml
# Importar en CasaOS → Apps → Install App
```
### Acceder al sistema:
- Local: http://10.10.4.3:8080
- Remoto: http://10.10.4.17:8080
- Usuario: admin / Contraseña: admin123
---
*Todos los archivos centralizados y organizados en este directorio Docker.*

View File

@@ -0,0 +1,57 @@
# Comandos para crear y subir imagen a registry
# IMPORTANTE: Ejecutar desde /var/www/html/ibiza (directorio padre de docker/)
# ============================================================
# OPCIÓN 1: Usar tag :latest
# ============================================================
# 1. Hacer build de la imagen
docker build -t condominio_ibiza:latest -f docker/Dockerfile .
# 2. Taggear la imagen para el registry remoto
docker tag condominio_ibiza:latest 10.10.4.3:5000/condominio_ibiza:latest
# 3. Subir la imagen al registry
docker push 10.10.4.3:5000/condominio_ibiza:latest
# ============================================================
# OPCIÓN 2: Usar tag de versión (recomendado)
# ============================================================
# 1. Hacer build de la imagen
docker build -t condominio_ibiza:v2 -f docker/Dockerfile .
# 2. Taggear la imagen para el registry remoto
docker tag condominio_ibiza:v2 10.10.4.3:5000/condominio_ibiza:v2
# 3. Subir la imagen al registry
docker push 10.10.4.3:5000/condominio_ibiza:v2
# 4. (Opcional) Verificar que se subio correctamente
docker pull 10.10.4.3:5000/condominio_ibiza:v2
# ============================================================
# VARIABLES DE ENTORNO (configuradas en ibiza.yaml para CasaOS)
# ============================================================
# Las variables sensibles NO se incluyen en el .env copiado.
# Se pasan como environment variables en el contenedor:
#
# APP_ENV=production
# DB_HOST=10.10.4.17
# DB_NAME=ibiza_db
# DB_PASS=MiPo6425@@
# DB_PORT=3390
# DB_USER=nickpons666
# JWT_EXPIRATION=86400
# JWT_SECRET=ibiza_jwt_secret_key_CHANGE_IN_PRODUCTION_2025!@#
# SESSION_TIMEOUT=28800
# SITE_URL=https://condominioibiza.ddns.net
#
# El archivo .env se crea automáticamente en docker-entrypoint.sh
# usando estas variables de entorno.
# ============================================================
# Nota: Asegurese de que el daemon.json tenga configurado el registry como insecure
# Si no lo tiene, agregar "10.10.4.3:5000" a "insecure-registries" y reiniciar docker:
# sudo systemctl restart docker

View File

@@ -0,0 +1,16 @@
# Comandos para configurar Docker en el servidor remoto
# 1. Crear archivo de configuración
sudo mkdir -p /etc/docker
cat << 'EOF' | sudo tee /etc/docker/daemon.json
{
"insecure-registries": ["10.10.4.17:5000"]
}
EOF
# 2. Reiniciar Docker
sudo systemctl restart docker
# 3. Verificar configuración
sudo docker info | grep -A 10 "Insecure Registries"
EOF

View File

@@ -0,0 +1,24 @@
# Comandos para configurar Docker en el servidor remoto (10.10.4.17)
# 1. Crear archivo de configuración con IP correcta
sudo mkdir -p /etc/docker
cat << 'EOF' | sudo tee /etc/docker/daemon.json
{
"insecure-registries": ["10.10.4.3:5000"]
}
EOF
# 2. Reiniciar Docker
sudo systemctl restart docker
# 3. Verificar configuración
sudo docker info | grep -A 10 "Insecure Registries"
# 4. Probar conexión al registry
curl http://10.10.4.3:5000/v2/_catalog
# 5. Probar bajar la imagen
docker pull 10.10.4.3:5000/condominio_ibiza:latest
# 6. Listar imágenes para verificar
docker images | grep condominio_ibiza

View File

@@ -0,0 +1,104 @@
#!/bin/bash
# Script de corrección forzada para el problema de Docker registry
echo "=== CORRECCIÓN FORZADA DE DOCKER REGISTRY ==="
echo ""
echo "1. Eliminando configuración anterior..."
sudo rm -f /etc/docker/daemon.json
sudo rm -f /etc/docker/daemon.json.bak
echo ""
echo "2. Creando nueva configuración..."
sudo mkdir -p /etc/docker
# Método 1: Usando echo
echo '{"insecure-registries": ["10.10.4.3:5000"]}' | sudo tee /etc/docker/daemon.json
echo ""
echo "3. Verificando archivo creado..."
echo "Contenido de /etc/docker/daemon.json:"
sudo cat /etc/docker/daemon.json
echo ""
echo "4. Verificando sintaxis JSON..."
if python3 -c "import json; json.load(open('/etc/docker/daemon.json'))" 2>/dev/null; then
echo "✅ JSON válido"
else
echo "❌ JSON inválido"
fi
echo ""
echo "5. Reiniciando Docker..."
sudo systemctl restart docker
sudo systemctl status docker --no-pager -l
echo ""
echo "6. Esperando 10 segundos..."
sleep 10
echo ""
echo "7. Verificando configuración de Docker..."
sudo docker info | grep -A 15 "Insecure Registries"
echo ""
echo "8. Probando descarga de imagen..."
if sudo docker pull 10.10.4.3:5000/condominio_ibiza:latest; then
echo "✅ IMAGEN DESCARGADA EXITOSAMENTE"
echo ""
echo "Imágenes disponibles:"
sudo docker images | grep condominio
else
echo "❌ FALLÓ LA DESCARGA"
echo ""
echo "Intentando método alternativo..."
echo ""
# Método alternativo: Configuración directa
echo "9. Intentando método alternativo..."
sudo mkdir -p /etc/docker/systemd
sudo bash -c 'cat > /etc/docker/systemd/docker.service << "EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --insecure-registry=10.10.4.3:5000
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF'
echo ""
echo "10. Recargando systemd y reiniciando Docker..."
sudo systemctl daemon-reload
sudo systemctl restart docker
sleep 5
echo ""
echo "11. Intentando descarga final..."
if sudo docker pull 10.10.4.3:5000/condominio_ibiza:latest; then
echo "✅ MÉTODO ALTERNATIVO FUNCIONÓ"
sudo docker images | grep condominio
else
echo "❌ TODOS LOS MÉTODOS FALLARON"
echo "Requiere configuración manual"
fi
fi
echo ""
echo "=== FIN DE CORRECCIÓN FORZADA ==="

View File

@@ -0,0 +1,21 @@
# En el servidor remoto (10.10.4.17)
# 1. Verificar configuración actual
cat /etc/docker/daemon.json
# 2. Si está incorrecto, corregirlo
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << 'EOF'
{
"insecure-registries": ["10.10.4.3:5000"]
}
EOF
# 3. Reiniciar Docker (¡importante!)
sudo systemctl restart docker
# 4. Verificar que se aplicó
sudo docker info | grep -A 5 "Insecure Registries"
# 5. Probar de nuevo
docker pull 10.10.4.3:5000/condominio_ibiza:latest

3
docker/daemon.json Executable file
View File

@@ -0,0 +1,3 @@
{
"insecure-registries": ["10.10.4.17:5000"]
}

89
docker/diagnostico-registry.sh Executable file
View File

@@ -0,0 +1,89 @@
#!/bin/bash
# Script completo para diagnosticar y corregir el problema del registry
echo "=== DIAGNÓSTICO DE REGISTRY DOCKER ==="
echo "Servidor actual: $(hostname)"
echo "IP del registry: 10.10.4.3:5000"
echo ""
echo "1. Verificando archivo daemon.json..."
if [ -f /etc/docker/daemon.json ]; then
echo "Contenido actual de /etc/docker/daemon.json:"
cat /etc/docker/daemon.json
echo ""
else
echo "❌ No existe /etc/docker/daemon.json"
fi
echo ""
echo "2. Verificando configuración de Docker..."
if sudo docker info 2>/dev/null | grep -q "Insecure Registries"; then
echo "✅ Insecure Registries configurados:"
sudo docker info | grep -A 5 "Insecure Registries"
else
echo "❌ No hay Insecure Registries configurados"
fi
echo ""
echo "3. Probando conexión al registry..."
if curl -s http://10.10.4.3:5000/v2/_catalog >/dev/null 2>&1; then
echo "✅ Registry accesible: $(curl -s http://10.10.4.3:5000/v2/_catalog)"
else
echo "❌ No se puede acceder al registry"
fi
echo ""
echo "4. Corrigiendo configuración..."
sudo mkdir -p /etc/docker
# Eliminar archivo existente para evitar conflictos
sudo rm -f /etc/docker/daemon.json
# Crear nuevo archivo con formato exacto
sudo bash -c 'cat > /etc/docker/daemon.json << "EOF"
{
"insecure-registries": ["10.10.4.3:5000"]
}
EOF'
echo "✅ Archivo daemon.json actualizado"
echo ""
echo "5. Reiniciando Docker..."
sudo systemctl restart docker
echo "⏳ Esperando 5 segundos..."
sleep 5
echo ""
echo "6. Verificando que el archivo fue creado correctamente..."
if [ -f /etc/docker/daemon.json ]; then
echo "✅ Archivo daemon.json creado:"
cat /etc/docker/daemon.json
echo ""
else
echo "❌ No se pudo crear /etc/docker/daemon.json"
fi
echo ""
echo "7. Verificando configuración de Docker..."
if sudo docker info 2>/dev/null | grep -q "10.10.4.3:5000"; then
echo "✅ Insecure Registry correctamente configurado:"
sudo docker info | grep -A 10 "Insecure Registries"
else
echo "❌ Falló la configuración del registry"
echo "Mostrando todos los Insecure Registries:"
sudo docker info | grep -A 10 "Insecure Registries"
fi
echo ""
echo "7. Probando descargar imagen..."
if sudo docker pull 10.10.4.3:5000/condominio_ibiza:latest; then
echo "✅ Imagen descargada exitosamente"
sudo docker images | grep condominio_ibiza
else
echo "❌ Falló la descarga de la imagen"
fi
echo ""
echo "=== FIN DEL DIAGNÓSTICO ==="

37
docker/docker-compose.yml Executable file
View File

@@ -0,0 +1,37 @@
version: '3.8'
services:
condominio_ibiza:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: condominio_ibiza
ports:
- "8080:80"
- "8443:443"
environment:
# Entorno de aplicación
- APP_ENV=local
- SITE_URL=http://localhost:8080
# Configuración de base de datos (modificar según tu configuración)
- DB_HOST=10.10.4.17
- DB_PORT=3391
- DB_USER=nickpons666
- DB_PASS=MiPo6425@@
- DB_NAME=ibiza_db2
# Configuración de sesión
- SESSION_TIMEOUT=28800
- JWT_SECRET=ibiza_jwt_secret_key_CHANGE_IN_PRODUCTION_2025!@#
- JWT_EXPIRATION=86400
volumes:
- ./uploads:/var/www/html/ibiza/uploads
- ./.env:/var/www/html/ibiza/.env
restart: unless-stopped
networks:
- ibiza_network
networks:
ibiza_network:
driver: bridge

65
docker/docker-entrypoint.sh Executable file
View File

@@ -0,0 +1,65 @@
#!/bin/bash
# Script de entrada para Docker
set -e
# Función para crear archivo .env desde variables de entorno
create_env_file() {
if [ ! -f /var/www/html/ibiza/.env ] || [ ! -s /var/www/html/ibiza/.env ]; then
echo "Creando archivo .env desde variables de entorno..."
cat > /var/www/html/ibiza/.env << EOF
# Entorno de aplicación
APP_ENV=${APP_ENV:-local}
SITE_URL=${SITE_URL:-http://localhost}
# Base de datos
DB_HOST=${DB_HOST:-localhost}
DB_PORT=${DB_PORT:-3306}
DB_USER=${DB_USER:-root}
DB_PASS=${DB_PASS:-}
DB_NAME=${DB_NAME:-ibiza_db}
# Base de datos local/desarrollo
LOCAL_DB_HOST=${DB_HOST:-localhost}
LOCAL_DB_PORT=${DB_PORT:-3306}
LOCAL_DB_USER=${DB_USER:-root}
LOCAL_DB_PASS=${DB_PASS:-}
LOCAL_DB_NAME=${DB_NAME:-ibiza_db}
# Base de datos de producción
SERVER_DB_HOST=${DB_HOST:-localhost}
SERVER_DB_PORT=${DB_PORT:-3306}
SERVER_DB_USER=${DB_USER:-root}
SERVER_DB_PASS=${DB_PASS:-}
SERVER_DB_NAME=${DB_NAME:-ibiza_db}
# Configuración de sesión
SESSION_TIMEOUT=${SESSION_TIMEOUT:-28800}
JWT_SECRET=${JWT_SECRET:-ibiza_jwt_secret_key_CHANGE_IN_PRODUCTION_2025!@#}
JWT_EXPIRATION=${JWT_EXPIRATION:-86400}
EOF
echo "Archivo .env creado exitosamente"
chown www-data:www-data /var/www/html/ibiza/.env
fi
}
# Crear archivo .env si no existe
create_env_file
# Corregir permisos de volúmenes montados (importante para ZimaOS/CasaOS)
echo "Corrigiendo permisos de volúmenes montados..."
chown -R www-data:www-data /var/www/html/ibiza || true
chmod -R 755 /var/www/html/ibiza || true
chmod -R 777 /var/www/html/ibiza/uploads 2>/dev/null || true
chmod 777 /var/www/html/ibiza/.env 2>/dev/null || true
# Configurar Apache para correr como www-data
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
echo "Permisos corregidos. Iniciando Apache..."
# Iniciar Apache en primer plano
exec /usr/sbin/apache2ctl -D FOREGROUND

59
docker/ibiza.yaml Executable file
View File

@@ -0,0 +1,59 @@
name: condominio-ibiza
services:
app:
cpu_shares: 90
command: []
container_name: condominio_ibiza
deploy:
resources:
limits:
memory: 16655581184
reservations:
devices: []
environment:
- APP_ENV=production
- DB_HOST=10.10.4.17
- DB_NAME=ibiza_db
- DB_PASS=MiPo6425@@
- DB_PORT=3390
- DB_USER=nickpons666
- JWT_EXPIRATION=86400
- JWT_SECRET=ibiza_jwt_secret_key_CHANGE_IN_PRODUCTION_2025!@#
- SESSION_TIMEOUT=28800
- SITE_URL=https://condominioibiza.ddns.net
hostname: condominio_ibiza
image: 10.10.4.3:5000/condominio_ibiza:latest
labels:
icon: https://www.punta-diamante.saredesarrollo.com.mx/storage/img/condominios/6/VBgcKjrcQCCQ7gIlGousPfH9EECJ4UluHwAThjJ2.png
ports:
- target: 80
published: "8085"
protocol: tcp
- target: 443
published: "8443"
protocol: tcp
restart: unless-stopped
volumes:
- type: bind
source: /media/sda/AppData/condominioibiza/uploads
target: /var/www/html/ibiza/uploads
- type: bind
source: /media/sda/AppData/condominioibiza/logs
target: /var/www/html/ibiza/logs
devices: []
cap_add: []
network_mode: bridge
privileged: false
x-casaos:
author: self
category: self
hostname: ""
icon: https://www.punta-diamante.saredesarrollo.com.mx/storage/img/condominios/6/VBgcKjrcQCCQ7gIlGousPfH9EECJ4UluHwAThjJ2.png
index: /
is_uncontrolled: false
port_map: "8085"
scheme: http
store_app_id: condominio-ibiza
title:
custom: ibiza
en_us: app

View File

@@ -0,0 +1,8 @@
# Probar conexión al registry desde servidor remoto
curl http://10.10.4.17:5000/v2/_catalog
# Probar bajar la imagen
docker pull 10.10.4.17:5000/condominio_ibiza:latest
# Listar imágenes para verificar
docker images | grep condominio_ibiza

View File

@@ -0,0 +1,121 @@
COMANDOS PARA ACTUALIZAR GRUB DESPUÉS DE ELIMINAR WINDOWS
========================================================
COMANDOS PARA EJECUTAR DESDE LIVE CD/UBUNTU LIVE
================================================
PASO 1: IDENTIFICAR PARTICIÓN DE UBUNTU
--------------------------------------
sudo fdisk -l
Busca tu partición Linux (probablemente sda5 con formato ext4)
PASO 2: MONTAR PARTICIÓN DE UBUNTU
----------------------------------
sudo mkdir /mnt/ubuntu
sudo mount /dev/sda5 /mnt/ubuntu
PASO 3: MONTAR PARTICIONES NECESARIAS PARA CHROOT
---------------------------------------------------
sudo mount /dev/sda1 /mnt/ubuntu/boot/efi # Partición EFI
sudo mount --bind /dev /mnt/ubuntu/dev
sudo mount --bind /proc /mnt/ubuntu/proc
sudo mount --bind /sys /mnt/ubuntu/sys
sudo mount --bind /run /mnt/ubuntu/run
PASO 4: ACTIVAR SWAP (si es necesario)
-------------------------------------
sudo swapon /dev/sda6
PASO 5: ENTRAR AL SISTEMA UBUNTU (CHROOT)
-----------------------------------------
sudo chroot /mnt/ubuntu
AHORA DENTRO DE TU SISTEMA UBUNTU (ya no estás en Live CD):
=========================================================
PASO 6: ACTUALIZAR CONFIGURACIÓN DE GRUB
---------------------------------------
update-grub
Este comando buscará sistemas operativos y eliminará las entradas de Windows.
PASO 7: REINSTALAR GRUB EN EL DISCO
------------------------------------
grub-install /dev/sda
Esto reinstala GRUB correctamente después de los cambios de partición.
PASO 8: VERIFICAR CONFIGURACIÓN
-------------------------------
grub-mkconfig -o /boot/grub/grub.cfg
PASO 9: SALIR DEL CHROOT
------------------------
exit
PASO 10: DESMONTAR TODO CORRECTAMENTE
-------------------------------------
sudo umount -R /mnt/ubuntu
sudo swapoff /dev/sda6
PASO 11: REINICIAR EL SISTEMA
-----------------------------
reboot
COMANDOS DE VERIFICACIÓN (OPCIONAL)
==================================
PARA VERIFICAR ANTES DE REINICIAR (desde Live CD):
-------------------------------------------------
1. Verificar particiones montadas:
mount | grep /mnt/ubuntu
2. Verificar que se montó todo correctamente:
ls -la /mnt/ubuntu/boot/efi
3. Verificar GRUB desde chroot:
(chroot) dpkg -l | grep grub
TROUBLESHOOTING DESDE LIVE CD
=============================
SI EL MONTAJE FALLA:
-------------------
- Intenta: sudo fsck -f /dev/sda5
- Verifica que /dev/sda5 sea la partición correcta con: sudo blkid
SI CHROOT NO FUNCIONA:
---------------------
- Verifica que todas las monturas estén correctas:
sudo mount | grep /mnt/ubuntu
- Intenta montar /dev/pts también:
sudo mount --bind /dev/pts /mnt/ubuntu/dev/pts
SI GRUB-INSTALL FALLA:
--------------------
- Intenta: grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu /dev/sda
- O si usas BIOS: grub-install --target=i386-pc /dev/sda
SI UPDATE-GRUB NO DETECTA EL KERNEL:
-----------------------------------
- Desde chroot: apt update && apt install linux-image-generic
NOTAS CRÍTICAS PARA LIVE CD
===========================
- TODOS los comandos PASOS 1-5 se ejecutan en Live CD
- Los comandos PASOS 6-8 se ejecutan DENTRO del chroot
- Si no estás seguro de la partición, ejecuta: sudo lsblk -f
- La partición EFI siempre es /dev/sda1 (100MB)
- Tu partición Linux debería ser /dev/sda5 después de redimensionar
- Asegúrate de tener internet antes del chroot: sudo dhclient
VERIFICACIÓN FINAL
=================
Después de reiniciar en Ubuntu normal, ejecuta:
lsblk
df -h
grub-editenv list

View File

@@ -0,0 +1,112 @@
COMO SUBIR IMÁGENES A DOCKER REGISTRY
=====================================
1. ETIQUETAR LA IMAGEN
---------------------
Para subir una imagen al registry local, primero debes etiquetarla:
docker tag <nombre-imagen>:<tag> localhost:5000/<nombre-imagen>:<tag>
Ejemplo:
docker tag mi-app:latest localhost:5000/mi-app:latest
2. SUBIR LA IMAGEN AL REGISTRY
------------------------------
Una vez etiquetada, sube la imagen:
docker push localhost:5000/<nombre-imagen>:<tag>
Ejemplo:
docker push localhost:5000/mi-app:latest
3. VERIFICAR QUE LA IMAGEN ESTÁ EN EL REGISTRY
----------------------------------------------
Puedes verificar las imágenes en el registry usando:
curl -X GET http://localhost:5000/v2/_catalog
O accediendo a la UI web en: http://localhost:8081
4. DESCARGAR LA IMAGEN DESDE EL REGISTRY
----------------------------------------
Para descargar la imagen desde el registry:
docker pull localhost:5000/<nombre-imagen>:<tag>
Ejemplo:
docker pull localhost:5000/mi-app:latest
COMO SUBIR ACTUALIZACIONES DE LA IMAGEN
======================================
1. HACER CAMBIOS A TU IMAGEN
----------------------------
Realiza los cambios necesarios en tu Dockerfile o código fuente.
2. CONSTRUIR LA NUEVA VERSIÓN
------------------------------
Construye la nueva versión de la imagen:
docker build -t <nombre-imagen>:<nuevo-tag> .
Ejemplo con versión:
docker build -t mi-app:v2.0 .
O si quieres mantener el mismo tag:
docker build -t mi-app:latest .
3. ETIQUETAR PARA EL REGISTRY
------------------------------
Etiqueta la nueva versión para el registry:
docker tag <nombre-imagen>:<tag> localhost:5000/<nombre-imagen>:<tag>
Ejemplo:
docker tag mi-app:v2.0 localhost:5000/mi-app:v2.0
4. SUBIR LA ACTUALIZACIÓN
-------------------------
Sube la nueva versión al registry:
docker push localhost:5000/<nombre-imagen>:<tag>
Ejemplo:
docker push localhost:5000/mi-app:v2.0
5. VERIFICAR LA ACTUALIZACIÓN
-----------------------------
Verifica que la nueva versión esté disponible:
curl -X GET http://localhost:5000/v2/<nombre-imagen>/tags/list
Ejemplo:
curl -X GET http://localhost:5000/v2/mi-app/tags/list
NOTAS IMPORTANTES
================
- Siempre verifica que la imagen se construyó correctamente antes de subirla
- Puedes mantener múltiples versiones usando diferentes tags (v1.0, v1.1, v2.0, etc.)
- El tag 'latest' siempre apuntará a la última versión que subas con ese tag
- Para eliminar imágenes antiguas del registry, necesitarás usar la API de eliminación
- La UI web en http://localhost:8081 te permite ver todas las imágenes y sus tags
EJEMPLO COMPLETO DE WORKFLOW
============================
# 1. Construir imagen
docker build -t mi-app:1.0 .
# 2. Etiquetar para registry
docker tag mi-app:1.0 localhost:5000/mi-app:1.0
# 3. Subir a registry
docker push localhost:5000/mi-app:1.0
# 4. Para actualizar
docker build -t mi-app:1.1 .
docker tag mi-app:1.1 localhost:5000/mi-app:1.1
docker push localhost:5000/mi-app:1.1
# 5. Verificar
curl http://localhost:5000/v2/mi-app/tags/list

View File

@@ -0,0 +1,29 @@
version: '3.8'
services:
docker-registry:
image: registry:2.8.3
container_name: docker-registry
ports:
- "5000:5000"
environment:
- REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin=[http://localhost:8081]
- REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods=[HEAD,GET,OPTIONS,DELETE]
- REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials=[true]
- REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers=[Authorization,Accept,Origin,Destination,Content-Type,Docker-Content-Digest]
- REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers=[Docker-Content-Digest]
volumes:
- ./data:/var/lib/registry
restart: unless-stopped
registry-ui:
image: joxit/docker-registry-ui:latest
container_name: registry-ui
ports:
- "8081:80"
environment:
- REGISTRY_URL=http://docker-registry:5000
depends_on:
- docker-registry
restart: unless-stopped

View File

@@ -0,0 +1,11 @@
version: '3.8'
services:
registry-ui:
image: joxit/docker-registry-ui:latest
container_name: registry-ui
ports:
- "8081:80"
environment:
- REGISTRY_URL=http://localhost:5000
restart: unless-stopped