Cuando tienes un proyecto Docker funcionando perfectamente en tu entorno local y estás listo para llevarlo a la gloria de un VPS, el proceso puede parecer un poco intimidante. En esta guía, te mostraré cómo exportar tu imagen Docker, preparar el VPS, restaurarla y dejar tu proyecto funcionando al 100%, con certificado SSL incluido. ¡Vamos a desmitificar este proceso paso a paso y con buen humor! 😎
Lo que Necesitarás
- Un VPS funcional (Ubuntu o Debian preferentemente).
- Docker y Docker Compose instalados en tu entorno local y en el VPS.
- Acceso SSH al VPS.
- La imagen Docker que quieres migrar (y sus configuraciones).
- Si tu proyecto incluye una base de datos, asegúrate de exportarla y migrarla también.
Pro tip: Asegúrate de que tu proyecto está completamente probado en tu entorno local antes de migrarlo. Subir algo roto es como entregar una pizza quemada: nadie quedará feliz. 🍕
Paso 1: Exportar tu Imagen Docker Local
Listar las Imágenes Disponibles
Primero, identifica la imagen que deseas exportar:
docker images
Toma nota del IMAGE ID
de la imagen que deseas exportar.
Exportar la Imagen
Usa el comando docker save
para exportar tu imagen:
docker save -o tu_proyecto.tar tu_imagen:tag
Esto generará un archivo llamado tu_proyecto.tar
que contiene tu imagen Docker.
Pro tip: Usa un nombre descriptivo para el archivo, como mi_proyecto_laravel.tar
, para evitar confusiones. 🗂️
Exportar la Base de Datos (si aplica)
Si tu proyecto utiliza una base de datos dentro de un contenedor Docker, necesitas exportarla por separado:
Paso 1: Crear un Backup de la Base de Datos
Conecta al contenedor de la base de datos:
docker exec -it nombre_del_contenedor_db bash
Dentro del contenedor, realiza un dump de la base de datos:
mysqldump -u usuario -p nombre_base_datos > backup.sql
Sal del contenedor y copia el archivo al host:
docker cp nombre_del_contenedor_db:/ruta/al/backup.sql ./
Paso 2: Preparar para la Transferencia
Asegúrate de transferir el archivo backup.sql
junto con tu imagen Docker al VPS en el paso siguiente.
Paso 2: Preparar el VPS
Actualizar el VPS
Comienza por actualizar los paquetes:
sudo apt update && sudo apt upgrade -y
Instalar Docker y Docker Compose
Instalar Docker:
sudo apt install docker.io -y
Habilita y verifica Docker:
sudo systemctl enable docker
sudo systemctl start docker
sudo docker --version
Instalar Docker Compose:
sudo apt install docker-compose -y
Humor tech: Instalar Docker es como contratar un chef profesional para tu cocina: todo se vuelve más organizado y eficiente. 👨🍳
Configurar un Usuario no Root
Por seguridad, crea un usuario y agrégalo al grupo docker
:
adduser tu_usuario
usermod -aG docker tu_usuario
Inicia sesión como este usuario:
su - tu_usuario
Configurar el Firewall
Permite el tráfico esencial:
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw allow 80
sudo ufw allow 443
Paso 3: Transferir la Imagen al VPS
Usar SCP para Transferir el Archivo
En tu máquina local, usa el comando scp
para copiar el archivo al VPS:
scp tu_proyecto.tar tu_usuario@ip_del_vps:/home/tu_usuario/
scp backup.sql tu_usuario@ip_del_vps:/home/tu_usuario/
Esto guardará los archivos en el directorio de inicio del usuario en el VPS.
Pro tip: Si tu conexión es lenta, usa rsync
para una transferencia más eficiente. 🚀
Paso 4: Restaurar la Imagen en el VPS
Cargar la Imagen Docker
En el VPS, carga la imagen usando docker load
:
docker load -i /home/tu_usuario/tu_proyecto.tar
Verifica que la imagen se cargó correctamente:
docker images
Restaurar la Base de Datos
Si tu proyecto depende de una base de datos, crea un nuevo contenedor para ella y luego importa el backup:
Paso 1: Crear un Contenedor de Base de Datos
Ejemplo con MySQL:
docker run --name db -e MYSQL_ROOT_PASSWORD=tu_root_password -e MYSQL_DATABASE=laravel_db -e MYSQL_USER=laravel_user -e MYSQL_PASSWORD=tu_contraseña_segura -d mysql:5.7
Paso 2: Importar el Backup
Copia el archivo al contenedor:
docker cp /home/tu_usuario/backup.sql db:/backup.sql
Conecta al contenedor y restaura la base de datos:
docker exec -it db bash
mysql -u root -p laravel_db < /backup.sql
exit
Humor tech: Subir una base de datos sin restaurar el backup es como subir una torta sin el relleno: incompleta y triste. 🎂
Paso 5: Configurar el Proyecto Docker en el VPS
Crear un Archivo Docker Compose
En el VPS, crea un archivo docker-compose.yml
para manejar tu contenedor. Ejemplo básico para un proyecto Laravel:
version: '3.8'
services:
app:
image: tu_imagen:tag
ports:
- "80:80"
- "443:443"
volumes:
- .:/var/www/html
environment:
- APP_ENV=production
- APP_DEBUG=false
- DB_HOST=db
db:
image: mysql:5.7
environment:
MYSQL_DATABASE=laravel_db
MYSQL_USER=laravel_user
MYSQL_PASSWORD=tu_contraseña_segura
MYSQL_ROOT_PASSWORD=tu_root_password
Levantar los Contenedores
Ejecuta el siguiente comando:
docker-compose up -d
Esto creará y ejecutará tus contenedores en segundo plano.
Pro tip: Usa docker-compose logs -f
para monitorear los logs en tiempo real. Es como tener una ventana al alma de tu proyecto. 👀
Paso 6: Configurar SSL con Let’s Encrypt
Instalar Certbot
Instala Certbot para manejar SSL:
sudo apt install certbot -y
Generar el Certificado SSL
Asegúrate de que el contenedor de tu app esté escuchando en el puerto 80 y ejecuta:
sudo certbot certonly --standalone -d tu_dominio.com
Esto generará un certificado en /etc/letsencrypt/live/tu_dominio.com/
.
Configurar SSL en Docker Compose
Edita tu archivo docker-compose.yml
para usar los certificados SSL:
volumes:
- /etc/letsencrypt/live/tu_dominio.com/fullchain.pem:/etc/ssl/certs/ssl-cert.pem
- /etc/letsencrypt/live/tu_dominio.com/privkey.pem:/etc/ssl/private/ssl-cert.key
Reinicia los contenedores:
docker-compose down && docker-compose up -d
Humor tech: HTTPS no es opcional; es como llevar cinturón de seguridad en el coche. Nadie quiere que el navegador diga «No Seguro». 🚦
Paso 7: Verificar tu Proyecto
Abre tu navegador y accede a https://tu_dominio.com
. Si todo está configurado correctamente, deberías ver tu proyecto funcionando con SSL. 🎉
Pro tip: Usa herramientas como SSL Labs para verificar que tu certificado SSL esté bien configurado.
Resumen
Migrar un proyecto Docker de local a un VPS no tiene por qué ser complicado si sigues estos pasos:
- Exporta tu imagen Docker.
- Prepara tu VPS con Docker y Docker Compose.
- Transfiere y restaura la imagen.
- Configura contenedores con Docker Compose.
- Migra y configura la base de datos.
- Agrega SSL para proteger tu sitio.
🔥 Pro tip final: Con una configuración bien hecha, tu proyecto será tan robusto como un tanque y tan seguro como una caja fuerte. 🚀