En mi travesía de pasar a ser un usuarios mas de PROXMOX, me tocó realizar un backup de todos los servicios que tenia corriendo en mi PC Linux para posterior restaurar en un contenedor LXC (docker) de proxmox. Uno de estos servicios era Nextcloud que tenia corriendo bajo docker y hoy les quiero compartir.
Backup
1.- Realizar backup de la BD
Ubicamos la imagen de la BD docker y ejecutamos el siguiente comando:
docker exec my-mysql-bd-nextcloud sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /path-backup/backup-nextcloud.sql
docker exec
:docker exec
se utiliza para ejecutar un comando en un contenedor Docker que ya está en ejecución.my-mysql-bd-nextcloud
es el nombre del contenedor en el que deseas ejecutar el comando. Este contenedor debe estar corriendo.
sh -c
: Aquí se utiliza el shell (sh
) para ejecutar el comandomysqldump
dentro del contenedor. La opción-c
indica que el siguiente argumento es un comando completo que debe ejecutarse./path-backup/backup-nextcloud.sql
: Este es el archivo en el sistema de archivos del host donde se guardará la copia de seguridad de las bases de datos. Aquí, debes reemplazar/path-backup/
con la ruta en tu sistema donde quieras almacenar el archivobackup-nextcloud.sql
2.- Realizar backup del sistema de archivos
tar -czpvf backup.tar.gz nextcloud/
-c
: Crea un nuevo archivotar
.-z
: Comprime usando gzip.-p
: Preserva los permisos.-v
: Muestra detalles de los archivos que se están empaquetando.-f
: Especifica el nombre del archivo de salida (backup.tar.gz
).
Guardamos estos 2 backups en un lugar seguro y estamos listos para realizar un restore.
Restore
1.- Restore de la BD
Copiamos nuestro backup-nextcloud.sql al host nuevo en el path donde tenemos nuestro docker-compose.yaml
Debemos modificar nuestro docker-compose.yaml para indicar al servicio de BD que emplee nuestro backup-nextcloud.sql al iniciar por primera vez .
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
- ./nextcloud-backup.sql:/docker-entrypoint-initdb.d/nextcloud-backup.sql
2.- Restore del sistema de archivos
Copiamos nuestro backup.tar.gz al host nuevo en el path donde tenemos nuestro docker-compose.yaml y procedemos a descomprimir:
tar -xzpvf backup.tar.gz
-x
: Extrae los archivos del archivo comprimido.
3.- Ejecutar nuestro docker compose
docker compose up -d
Ejemplo de docker compose nextcloud
services:
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
- ./nextcloud-backup.sql:/docker-entrypoint-initdb.d/nextcloud-backup.sql
restart: always
environment:
MYSQL_ROOT_PASSWORD: admin
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: admin
redis-nextcloud:
image: redis:alpine
restart: always
app:
image: nextcloud:26.0.1
ports:
- "80:80"
volumes:
- ./nextcloud:/var/www/html
restart: always
links:
- db
depends_on:
- redis-nextcloud
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: admin
REDIS_HOST: redis-nextcloud
#NEXTCLOUD_TRUSTED_DOMAINS: midominio.com
#TRUSTED_PROXIES: proxy ejm ip nginx-proxy
#APACHE_DISABLE_REWRITE_IP: 1 #si se tiene un proxy nginx
volumes:
db_data:
Espero les sea de utilidad esta guia, saludos.