diciembre 29, 2024
Tabla de Contenido

Cómo Migrar un Proyecto Docker de Local a un VPS

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:

  1. Exporta tu imagen Docker.
  2. Prepara tu VPS con Docker y Docker Compose.
  3. Transfiere y restaura la imagen.
  4. Configura contenedores con Docker Compose.
  5. Migra y configura la base de datos.
  6. 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. 🚀

Entradas relacionadas

Cómo Montar un Servidor de Node.js en Nginx

Cómo Migrar un Proyecto Docker de Local a un VPS

Cómo Implementar un Proyecto de Laravel en un VPS

Guía Definitiva para No Volverte Loco Configurando Firewalls

Guía Completa para Detectar Rootkits con RKHunter y Chkrootkit

Automatización de Backups en Servidores Linux con Rsync y Cron

Más Artículos

Cómo Migrar un Proyecto Docker de Local a un VPS

Cuando tienes un proyecto Docker funcionando perfectamente en tu entorno local y estás..

Cómo Implementar un Proyecto de Laravel en un VPS

Configurar un proyecto de Laravel en un VPS puede sonar como desactivar una..

Guía Definitiva para No Volverte Loco Configurando Firewalls

Configurar un firewall puede sonar tan aterrador como intentar desactivar una bomba en..

Translate »