Despliegue de Dokku en un VPS: PaaS similar a Heroku para el despliegue rápido de aplicaciones
TL;DR
En esta guía detallada, configuraremos Dokku en su servidor privado virtual (VPS), transformándolo en una potente plataforma como servicio (PaaS) similar a Heroku. Dokku permite a los desarrolladores desplegar, escalar y gestionar aplicaciones fácilmente con un simple comando git push, utilizando contenedores Docker. Obtendrá control total sobre su infraestructura, ahorro de costos en comparación con las PaaS en la nube y la capacidad de lanzar proyectos rápidamente.
- Instalación de Dokku: Transformamos un VPS limpio en una PaaS completa con soporte Docker.
- Despliegue automático: Despliegue aplicaciones simplemente enviando código a un repositorio Git en su servidor.
- Gestión de aplicaciones: Añada fácilmente bases de datos, cachés, configure variables de entorno y certificados SSL.
- Control total: Usted posee toda la infraestructura, los datos y las configuraciones, evitando la dependencia de un proveedor de nube específico.
- Ahorro de recursos: Uso óptimo de los recursos de su VPS para múltiples aplicaciones.
- Actualidad: Todos los pasos y versiones de software son actuales para 2026, asegurando una aplicabilidad a largo plazo.
Qué configuramos y por qué
En esta guía, configuraremos Dokku, una PaaS (Platform as a Service) ligera que le permite ejecutar y gestionar aplicaciones en su propio servidor, aprovechando las ventajas de Docker. A menudo se denomina a Dokku como el "Heroku para VPS", ya que ofrece una experiencia de despliegue similar: simplemente envía su código a un repositorio Git en el servidor, y Dokku lo compila automáticamente en una imagen Docker, lo ejecuta y lo gestiona.
Al final, obtendrá una plataforma completamente funcional para el despliegue de aplicaciones web en varios lenguajes de programación (Node.js, Python, Ruby, Go, PHP y otros) con un esfuerzo mínimo. Es una solución ideal para desarrolladores, startups y equipos pequeños que buscan la simplicidad de Heroku, pero con control total sobre la infraestructura y costos más bajos.
¿Por qué Dokku?
- Simplicidad de despliegue: El despliegue de aplicaciones se reduce al comando
git push. - Eficiencia de recursos: Dokku funciona en un solo servidor, lo que lo convierte en una solución económica.
- Flexibilidad: Soporte para múltiples lenguajes y frameworks gracias a Buildpacks y Dockerfiles.
- Extensibilidad: Un rico ecosistema de plugins para bases de datos (PostgreSQL, MySQL, Redis), brokers de mensajes y otros servicios.
- Control: Usted mantiene el control total sobre su servidor, datos y configuraciones, a diferencia de las PaaS en la nube totalmente gestionadas.
Alternativas: Cloud-managed vs. Self-hosted
Existen varios enfoques para el despliegue de aplicaciones:
-
PaaS gestionada en la nube (por ejemplo, Heroku, Render, Netlify):
- Pros: Máxima simplicidad, no es necesario gestionar la infraestructura, escalado automático.
- Contras: Alto costo, menor control, dependencia del proveedor, opciones de personalización limitadas.
-
PaaS autoalojada (por ejemplo, Dokku, CapRover, Coolify):
- Pros: Ahorro significativo de costos, control total sobre el servidor y los datos, flexibilidad en la elección de la configuración, posibilidad de instalar en cualquier VPS.
- Contras: Requiere configuración inicial y mantenimiento mínimo del servidor, el escalado puede ser más complejo que en las soluciones gestionadas en la nube.
-
Despliegue manual en un VPS (sin PaaS):
- Pros: Máximo control y flexibilidad, adecuado para tareas muy específicas.
- Contras: El proceso más laborioso, requiere conocimientos profundos de administración de sistemas, gestión manual de cada componente (servidor web, base de datos, CI/CD).
Dokku se sitúa en un punto intermedio, ofreciendo la simplicidad de una PaaS con el control y el ahorro de una solución autoalojada. Es la elección ideal para aquellos que desean desplegar aplicaciones rápidamente sin sumergirse en las complejidades de Kubernetes o la gestión manual de contenedores Docker.
Qué configuración de VPS se necesita para esta tarea
La elección de la configuración de VPS adecuada para Dokku depende de la cantidad y el tipo de aplicaciones que planee desplegar. Dokku en sí mismo es bastante ligero, pero cada aplicación desplegada y sus servicios asociados (bases de datos, cachés) consumen recursos.
Requisitos mínimos (para 1-2 aplicaciones pequeñas, sin bases de datos pesadas):
- CPU: 2 vCPU
- RAM: 4 GB
- Disco: 80 GB SSD (para el sistema, Dokku y varias aplicaciones)
- Red: Puerto de 1 Gbit/s, tráfico ilimitado o un límite alto (por ejemplo, 1 TB/mes)
Configuración recomendada (para 3-5 aplicaciones medianas, con varias bases de datos):
- CPU: 4 vCPU
- RAM: 8 GB
- Disco: 160 GB NVMe SSD (para un mejor rendimiento de las operaciones de disco)
- Red: Puerto de 1 Gbit/s, tráfico ilimitado
Para un trabajo cómodo con varias aplicaciones y bases de datos, se puede considerar un VPS con 4 vCPU, 8 GB de RAM y 160 GB de SSD. Esto proporcionará una reserva de rendimiento suficiente para la mayoría de las tareas de desarrollo y proyectos de producción pequeños.
Cuándo se necesita un servidor dedicado, no un VPS
Se debe considerar un servidor dedicado si:
- Alta carga: Sus aplicaciones esperan miles de usuarios simultáneos o requieren recursos computacionales significativos.
- Gran volumen de datos: Necesita almacenar cientos de gigabytes o terabytes de datos, lo que puede ser costoso o ineficiente en un VPS.
- Requisitos específicos de rendimiento: Se necesita acceso directo al hardware para un rendimiento máximo de discos, red o CPU, lo que un VPS no siempre puede garantizar debido a la virtualización.
- Requisitos de seguridad y cumplimiento: Algunas normativas pueden requerir el aislamiento físico del servidor.
- Escalado: Si planea desplegar más de 10-15 aplicaciones medianas o varias muy grandes, un servidor dedicado puede ser una solución más económica y de mayor rendimiento que varios VPS potentes. En este caso, es posible que necesite un servidor dedicado adecuado.
Para la mayoría de las tareas relacionadas con Dokku, un VPS potente será más que suficiente, ofreciendo un excelente equilibrio entre rendimiento y costo.
Ubicación: en qué influye
La elección de la ubicación del VPS tiene varios aspectos clave:
- Latencia: Aloje el servidor lo más cerca posible de su audiencia principal o de los usuarios para minimizar las latencias al acceder a la aplicación.
- Legislación: Si su aplicación maneja datos sensibles, es importante considerar las leyes de protección de datos (por ejemplo, GDPR en Europa) del país donde se encuentra físicamente el servidor.
- Precio: El costo de un VPS puede variar ligeramente en diferentes regiones.
- Disponibilidad: Algunos proveedores ofrecen una gama más amplia de servicios o una infraestructura más estable en ciertos centros de datos.
Generalmente se recomienda elegir un centro de datos en la misma región geográfica que la mayoría de sus usuarios, o en una adyacente.
Preparación del servidor
Preparación del servidor
Antes de instalar Dokku, es necesario realizar una configuración básica y reforzar la seguridad de su VPS. Utilizaremos Ubuntu Server 24.04 LTS (Noble Numbat) como la versión más actual y estable para el año 2026.
1. Conexión al servidor
Conéctese a su VPS por SSH, utilizando las credenciales proporcionadas por el proveedor. Normalmente, es el usuario root y una contraseña, o una clave SSH.
ssh root@ВАШ_IP_АДРЕС_VPS
Reemplace ВАШ_IP_АДРЕС_VPS con la dirección IP real de su servidor.
2. Actualización del sistema
Siempre comience actualizando la lista de paquetes y los paquetes instalados a las últimas versiones. Esto garantiza que tenga las correcciones de seguridad y funcionalidades más recientes.
sudo apt update && sudo apt upgrade -y
Actualiza la lista de paquetes disponibles e instala todas las actualizaciones sin solicitar confirmación.
3. Creación de un nuevo usuario con permisos sudo
Trabajar como usuario root no se recomienda para tareas diarias por razones de seguridad. Cree un nuevo usuario y otórguele permisos sudo.
adduser dokkuadmin
Crea un nuevo usuario dokkuadmin y solicita una contraseña e información adicional.
usermod -aG sudo dokkuadmin
Añade el usuario dokkuadmin al grupo sudo, dándole la capacidad de ejecutar comandos con privilegios de superusuario.
4. Configuración de claves SSH para el nuevo usuario
Se recomienda usar claves SSH para la autenticación en lugar de contraseñas. Esto aumenta significativamente la seguridad.
En su máquina local, si aún no tiene un par de claves SSH, genérelas:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Luego, copie la clave pública al servidor para el nuevo usuario:
ssh-copy-id dokkuadmin@ВАШ_IP_АДРЕС_VPS
Este comando añadirá su clave pública al archivo ~/.ssh/authorized_keys en el servidor. Después de esto, podrá iniciar sesión como dokkuadmin sin contraseña.
Ahora, salga de la sesión root e inicie sesión como dokkuadmin:
exit
ssh dokkuadmin@ВАШ_IP_АДРЕС_VPS
5. Refuerzo de la seguridad SSH
Edite el archivo de configuración del servidor SSH para deshabilitar el inicio de sesión para root y la autenticación por contraseña (si está seguro de que las claves SSH funcionan).
sudo nano /etc/ssh/sshd_config
Busque y cambie (o añada) las siguientes líneas:
PermitRootLogin no
PasswordAuthentication no
Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X). Luego, reinicie el servicio SSH:
sudo systemctl restart ssh
Importante: Asegúrese de poder iniciar sesión como dokkuadmin con una clave SSH antes de deshabilitar PermitRootLogin y PasswordAuthentication, de lo contrario, corre el riesgo de perder el acceso al servidor.
6. Configuración del firewall (UFW)
UFW (Uncomplicated Firewall) es una interfaz conveniente para gestionar iptables. Configúrelo para permitir solo los puertos necesarios.
sudo apt install ufw -y
Instala la utilidad UFW.
sudo ufw allow OpenSSH
Permite conexiones entrantes al puerto SSH (por defecto 22).
sudo ufw allow http
Permite conexiones entrantes al puerto HTTP (80).
sudo ufw allow https
Permite conexiones entrantes al puerto HTTPS (443).
sudo ufw enable
Habilita el firewall. Confirme la acción presionando y.
sudo ufw status
Verifica el estado del firewall y la lista de reglas permitidas.
7. Instalación de Fail2ban
Fail2ban ayuda a protegerse contra ataques de fuerza bruta, bloqueando las direcciones IP desde las que se producen numerosos intentos fallidos de inicio de sesión.
sudo apt install fail2ban -y
Instala Fail2ban.
Fail2ban está configurado por defecto para proteger SSH. Se puede realizar una configuración adicional copiando el archivo de configuración predeterminado:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora puede editar /etc/fail2ban/jail.local para cambiar parámetros como el tiempo de bloqueo o el número de intentos.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Habilita el inicio automático de Fail2ban al arrancar y lo inicia.
8. Configuración del nombre de host (Hostname)
Establezca un nombre de host comprensible para su servidor. Esto ayudará en la identificación.
sudo hostnamectl set-hostname dokku-server
Establece el nombre de host dokku-server.
echo "127.0.0.1 dokku-server" | sudo tee -a /etc/hosts
Añade una entrada al archivo /etc/hosts para la resolución correcta del nuevo nombre de host.
Ahora su VPS está listo para la instalación de Dokku.
Instalación del software Dokku
Una vez preparado el servidor, se puede proceder con la instalación de Dokku. Utilizaremos el repositorio oficial de Dokku, lo que garantiza la obtención de versiones actualizadas y estables.
1. Adición del repositorio Dokku
Para empezar, instale las utilidades necesarias para trabajar con repositorios y añada la clave GPG de Dokku.
# Устанавливаем необходимые пакеты для работы с HTTPS-репозиториями
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
Instala las utilidades para trabajar con repositorios seguros y determinar la versión de la distribución.
# Добавляем GPG-ключ Dokku
curl -fsSL https://packagecloud.io/dokku/dokku/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/dokku-archive-keyring.gpg
Descarga la clave GPG pública de Dokku y la guarda para verificar la autenticidad de los paquetes.
# Добавляем репозиторий Dokku в список источников
echo "deb [signed-by=/usr/share/keyrings/dokku-archive-keyring.gpg] https://packagecloud.io/dokku/dokku/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/dokku.list
Añade el repositorio oficial de Dokku para Ubuntu 24.04 LTS (Noble Numbat) a la lista de fuentes de paquetes.
# Обновляем список пакетов после добавления нового репозитория
sudo apt update
Actualiza la caché de paquetes para que el sistema conozca los nuevos paquetes del repositorio Dokku.
2. Instalación de Dokku
Ahora que el repositorio ha sido añadido, se puede instalar Dokku. Para el año 2026, Dokku será la versión 0.30.x o posterior.
# Устанавливаем Dokku. Это также установит Docker и все необходимые зависимости.
sudo apt install dokku -y
Instala Dokku y todas sus dependencias, incluyendo Docker Engine, que es la base del funcionamiento de Dokku.
3. Configuración inicial de Dokku (a través de la interfaz web)
Después de la instalación, Dokku requiere una configuración inicial. Esto se puede hacer a través de la interfaz web, que está disponible inmediatamente después de la instalación.
Abra en el navegador http://ВАШ_IP_АДРЕС_VPS. Verá la página de configuración de Dokku.
En esta página deberá:
- Public Key: Pegue su clave SSH pública que utilizó para iniciar sesión en el servidor (
cat ~/.ssh/id_rsa.puben su máquina local). Esto le permitirá desplegar aplicaciones a través de Git. - Hostname: Introduzca el nombre de dominio que desea usar para Dokku (por ejemplo,
dokku.yourdomain.com). Asegúrese de haber configurado un registro DNS (registro A o CNAME) para este dominio, apuntando a la dirección IP de su VPS. - Use Virtual Host Naming: Deje esta opción activada. Permite a Dokku enrutar automáticamente las solicitudes a sus aplicaciones basándose en el nombre de dominio.
Haga clic en "Finish Setup". Después de esto, Dokku estará listo para funcionar.
4. Verificación de la instalación de Dokku (a través de SSH)
Puede verificar que Dokku está instalado y funcionando correctamente ejecutando el comando:
dokku version
La salida debería mostrar la versión actual de Dokku, por ejemplo: dokku version 0.30.x.
También verifique el estado de Dokku y Docker:
sudo systemctl status dokku
sudo systemctl status docker
Ambos servicios deben estar en estado active (running).
5. Adición de su clave SSH a Dokku (si no lo hizo a través de la interfaz web)
Si omitió el paso de añadir la clave SSH en la interfaz web, puede hacerlo manualmente:
# На вашей локальной машине:
cat ~/.ssh/id_rsa.pub
Copie la salida de este comando.
# На сервере Dokku (через SSH):
dokku ssh-keys:add my_local_key "ssh-rsa AAAAB3NzaC..."
Reemplace my_local_key por cualquier nombre para su clave y "ssh-rsa AAAAB3NzaC..." por la clave pública que copió.
Ahora Dokku está completamente instalado y listo para desplegar sus primeras aplicaciones.
Configuración y despliegue de aplicaciones
Después de instalar Dokku, el siguiente paso será desplegar su primera aplicación y configurarla. Dokku simplifica este proceso al máximo utilizando el concepto de despliegue Git.
1. Creación de una nueva aplicación
Antes de desplegar el código, debe crear un "slot" para su aplicación en Dokku.
dokku apps:create my-web-app
Crea una nueva aplicación con el nombre my-web-app. Este nombre se utilizará en comandos posteriores.
2. Configuración de DNS para la aplicación
Si desea que su aplicación sea accesible a través de su propio nombre de dominio (por ejemplo, app.yourdomain.com), debe configurar un registro DNS. En el panel de control de su registrador de dominios, cree un registro A (o CNAME, si utiliza un subdominio de Dokku) que apunte a la dirección IP de su VPS.
Luego, informe a Dokku sobre el dominio de su aplicación:
dokku domains:add my-web-app app.yourdomain.com
Añade el dominio app.yourdomain.com a la aplicación my-web-app. Ahora Dokku enrutará el tráfico para este dominio a su aplicación.
3. Despliegue de la aplicación
El proceso de despliegue en Dokku es muy similar al de Heroku. Usted añade un repositorio Git remoto y envía su código a él.
En su máquina local, en el directorio de su proyecto:
# Inicialice el repositorio Git, si aún no existe
git init
# Añada el repositorio remoto de Dokku
git remote add dokku dokku@ВАШ_IP_АДРЕС_ИЛИ_ДОМЕН_DOKKU:my-web-app
# Envíe su código a Dokku
git push dokku master
El comando git push dokku master enviará su código al servidor Dokku. Dokku detectará automáticamente el tipo de su aplicación (Node.js, Python, PHP, etc.) utilizando Buildpacks, construirá una imagen Docker, la ejecutará y la hará accesible.
4. Gestión de variables de entorno
Para datos confidenciales, como claves API, credenciales de bases de datos y otros secretos, utilice variables de entorno. Dokku permite gestionarlas fácilmente.
dokku config:set my-web-app MY_API_KEY="your_secret_api_key_here" DATABASE_URL="postgres://user:pass@host:port/db"
Establece las variables de entorno para la aplicación my-web-app. Estas variables estarán disponibles para su aplicación durante la ejecución.
dokku config:unset my-web-app MY_API_KEY
Elimina una variable de entorno.
dokku config:get my-web-app MY_API_KEY
Obtiene el valor de una variable específica (si no es una variable secreta que está oculta por defecto).
dokku config my-web-app
Muestra todas las variables de entorno para la aplicación.
5. Instalación y conexión de bases de datos (Plugins de Dokku)
Dokku soporta una gran variedad de plugins para diferentes servicios, incluyendo bases de datos. Por ejemplo, para PostgreSQL:
# Instalamos el plugin de PostgreSQL
sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
Instala el plugin de Dokku para la gestión de bases de datos PostgreSQL.
# Creamos una nueva base de datos
dokku postgres:create my-web-app-db
Crea una instancia de base de datos PostgreSQL con el nombre my-web-app-db.
# Vinculamos la base de datos a la aplicación
dokku postgres:link my-web-app-db my-web-app
Vincula la base de datos a la aplicación my-web-app. Esto establece automáticamente la variable de entorno DATABASE_URL en la aplicación, que contiene los datos de conexión.
De manera similar, se pueden instalar plugins para MySQL, Redis, MongoDB y otros servicios.
6. Configuración de TLS/HTTPS con Let's Encrypt
Para garantizar la seguridad y la confianza en su aplicación, es crucial utilizar HTTPS. Dokku tiene una excelente integración con Let's Encrypt para la obtención y renovación automática de certificados SSL.
# Instalamos el plugin de Let's Encrypt
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git letsencrypt
Instala el plugin de Dokku para trabajar con certificados Let's Encrypt.
# Establecemos el email para notificaciones de Let's Encrypt
dokku letsencrypt:set my-web-app email [email protected]
Especifica su dirección de correo electrónico que Let's Encrypt utilizará para notificaciones importantes sobre el certificado.
# Habilitamos Let's Encrypt para la aplicación
dokku letsencrypt:enable my-web-app
Solicita e instala un certificado SSL para my-web-app. Asegúrese de que el registro DNS para app.yourdomain.com ya apunte a su VPS, de lo contrario, la solicitud del certificado fallará.
Dokku configurará automáticamente Nginx (o Caddy, si utiliza el plugin correspondiente) para usar el certificado y redirigir HTTP a HTTPS.
7. Verificación del funcionamiento de la aplicación
Después del despliegue y la configuración, asegúrese de que su aplicación funcione correctamente.
dokku apps:report my-web-app
Muestra un informe detallado sobre el estado de la aplicación, su URL, dominios, puertos utilizados, etc.
dokku logs my-web-app --tail 100
Muestra las últimas 100 líneas de los logs de la aplicación. Esto es extremadamente útil para la depuración.
curl -I https://app.yourdomain.com
Realiza una solicitud HTTP HEAD a su aplicación para verificar su disponibilidad y el estado de la respuesta (por ejemplo, HTTP/1.1 200 OK).
ping app.yourdomain.com
Verifica la accesibilidad de red del dominio de su aplicación.
También puede configurar health-checks personalizados para Dokku, de modo que determine de manera más inteligente la operatividad de la aplicación después del despliegue:
dokku ps:set my-web-app deploy-wait-period 30
dokku ps:set my-web-app deploy-wait-healthcheck /health
Estos comandos establecen un período de espera de 30 segundos después de iniciar un nuevo contenedor e indican la URL /health para la verificación de estado. Si la aplicación no responde a esta URL dentro de 30 segundos, el despliegue se considerará fallido.
Copias de seguridad y mantenimiento
Incluso con Dokku, las copias de seguridad y el mantenimiento regular son cruciales para garantizar la fiabilidad y seguridad de sus aplicaciones. Esta es su responsabilidad como propietario de un PaaS autoalojado.
1. Qué respaldar
Para una instalación de Dokku, es necesario respaldar varias categorías de datos:
- Configuración de Dokku: Archivos de configuración de Dokku, claves SSH, información sobre aplicaciones y plugins. Normalmente se encuentra en
/etc/dokkuy/home/dokku. - Datos de las aplicaciones: Si su aplicación utiliza volúmenes persistentes para almacenar archivos (por ejemplo, imágenes subidas por los usuarios), estos deben ser respaldados. Dokku monta los volúmenes en
/var/lib/dokku/data/APP_NAME. - Bases de datos: Datos de todas las bases de datos vinculadas (PostgreSQL, MySQL, Redis, etc.). Los plugins de Dokku proporcionan comandos convenientes para la exportación.
2. Script simple de copia de seguridad automática
Crearemos un script simple que archivará los datos clave y las bases de datos. Para el almacenamiento, se puede usar un directorio local con posterior sincronización a un almacenamiento externo.
Cree el archivo /usr/local/bin/dokku-backup.sh:
#!/bin/bash
# Каталог для временного хранения бэкапов
BACKUP_BASE_DIR="/mnt/backups/dokku"
DATE=$(date +%Y%m%d%H%M%S)
LOG_FILE="/var/log/dokku_backup.log"
# Создаем директорию для бэкапов, если ее нет
mkdir -p "$BACKUP_BASE_DIR"
echo "--- Dokku Backup Started: $DATE ---" >> "$LOG_FILE"
# 1. Бэкап конфигурации Dokku
echo "Backing up Dokku configuration..." >> "$LOG_FILE"
sudo tar -czf "$BACKUP_BASE_DIR/dokku_config_$DATE.tar.gz" /etc/dokku /home/dokku 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
echo "Dokku config backup successful." >> "$LOG_FILE"
else
echo "Dokku config backup failed!" >> "$LOG_FILE"
fi
# 2. Бэкап всех приложений Dokku
echo "Backing up Dokku applications and databases..." >> "$LOG_FILE"
dokku apps:list --quiet | while read APP_NAME; do
if [ -z "$APP_NAME" ]; then
continue
fi
echo " Processing app: $APP_NAME" >> "$LOG_FILE"
# Бэкап постоянных томов приложения (если есть)
dokku storage:export "$APP_NAME" > "$BACKUP_BASE_DIR/${APP_NAME}_storage_${DATE}.tar" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
echo " Storage for $APP_NAME backed up." >> "$LOG_FILE"
else
echo " Storage backup for $APP_NAME failed or no storage configured." >> "$LOG_FILE"
fi
# Бэкап баз данных, привязанных к приложению
# PostgreSQL
if dokku postgres:linked "$APP_NAME" &>/dev/null; then
DB_NAME=$(dokku postgres:linked "$APP_NAME" | head -n 1)
echo " Backing up PostgreSQL database $DB_NAME for $APP_NAME..." >> "$LOG_FILE"
dokku postgres:export "$DB_NAME" > "$BACKUP_BASE_DIR/${APP_NAME}_${DB_NAME}_${DATE}.sql" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
echo " PostgreSQL database $DB_NAME for $APP_NAME backed up." >> "$LOG_FILE"
else
echo " PostgreSQL database $DB_NAME backup failed!" >> "$LOG_FILE"
fi
fi
# MySQL
if dokku mysql:linked "$APP_NAME" &>/dev/null; then
DB_NAME=$(dokku mysql:linked "$APP_NAME" | head -n 1)
echo " Backing up MySQL database $DB_NAME for $APP_NAME..." >> "$LOG_FILE"
dokku mysql:export "$DB_NAME" > "$BACKUP_BASE_DIR/${APP_NAME}_${DB_NAME}_${DATE}.sql" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
echo " MySQL database $DB_NAME for $APP_NAME backed up." >> "$LOG_FILE"
else
echo " MySQL database $DB_NAME backup failed!" >> "$LOG_FILE"
fi
fi
# Redis (может быть экспортирован как RDB-файл или через AOF)
if dokku redis:linked "$APP_NAME" &>/dev/null; then
REDIS_NAME=$(dokku redis:linked "$APP_NAME" | head -n 1)
echo " Backing up Redis instance $REDIS_NAME for $APP_NAME..." >> "$LOG_FILE"
# Для Redis обычно рекомендуется делать snapshot через SAVE команду или копировать RDB файл
# Этот пример просто демонстрирует, что можно что-то сделать.
# Реальный бэкап Redis требует более сложной логики (например, копирование RDB файла из контейнера)
echo " (Redis backup requires direct access to container or SAVE command)" >> "$LOG_FILE"
# Пример: dokku redis:cli $REDIS_NAME SAVE
# Затем скопировать файл .rdb из /var/lib/dokku/services/redis/$REDIS_NAME/data/dump.rdb
fi
done >> "$LOG_FILE" 2>&1
# 3. Очистка старых бэкапов (например, храним бэкапы за последние 7 дней)
echo "Cleaning old backups (older than 7 days)..." >> "$LOG_FILE"
find "$BACKUP_BASE_DIR" -type f -name ".tar.gz" -mtime +7 -delete 2>> "$LOG_FILE"
find "$BACKUP_BASE_DIR" -type f -name ".tar" -mtime +7 -delete 2>> "$LOG_FILE"
find "$BACKUP_BASE_DIR" -type f -name ".sql" -mtime +7 -delete 2>> "$LOG_FILE"
echo "Old backups cleaned." >> "$LOG_FILE"
echo "--- Dokku Backup Finished: $DATE ---" >> "$LOG_FILE"
Haga el script ejecutable:
sudo chmod +x /usr/local/bin/dokku-backup.sh
3. Dónde almacenar las copias de seguridad
Almacenar las copias de seguridad en el mismo servidor que los datos originales es extremadamente arriesgado. En caso de fallo del disco o compromiso del servidor, perderá tanto los datos como las copias de seguridad.
Opciones recomendadas para el almacenamiento de copias de seguridad:
- Almacenamiento de objetos externo compatible con S3: Por ejemplo, AWS S3, DigitalOcean Spaces, Backblaze B2, MinIO. Utilice herramientas como
s3cmd,rcloneoaws clipara sincronizar las copias de seguridad desde/mnt/backups/dokku. - VPS separado: Un VPS económico en otro centro de datos, donde se pueden copiar las copias de seguridad mediante
rsyncoscp. - Almacenamiento en red (NAS): Si tiene su propio almacenamiento en red, puede montarlo a través de NFS o SMB.
Ejemplo de sincronización con S3 usando rclone (después de su instalación y configuración):
# Добавьте эту строку в конец скрипта dokku-backup.sh
rclone sync /mnt/backups/dokku remote_s3_bucket:dokku-backups --log-file="$LOG_FILE" --log-level INFO
Reemplace remote_s3_bucket:dokku-backups con el nombre y la ruta de su almacenamiento remoto configurado.
4. Automatización de copias de seguridad con Cron
Configure Cron para ejecutar el script de copia de seguridad diaria o semanalmente.
sudo crontab -e
Añada la siguiente línea para ejecutar el script diariamente a las 3:00 de la madrugada:
0 3 /usr/local/bin/dokku-backup.sh >> /var/log/dokku_backup.log 2>&1
Esta entrada ejecutará el script cada día a las 3 de la madrugada y registrará toda la salida en /var/log/dokku_backup.log.
5. Actualizaciones: Rolling vs. Ventana de mantenimiento
-
Actualizaciones del SO y Dokku:
- Actualizaciones continuas (Rolling updates): Para actualizaciones menores de Dokku y paquetes del SO (
sudo apt update && sudo apt upgrade -y), se pueden realizar regularmente, quizás una o dos veces por semana. Dokku generalmente maneja bien las actualizaciones sin detener las aplicaciones, pero siempre existe un pequeño riesgo. - Ventana de mantenimiento: Para actualizaciones mayores de Dokku o del SO (por ejemplo, la transición de Ubuntu 24.04 a 26.04), se recomienda encarecidamente planificar una ventana de mantenimiento. Detenga las aplicaciones, realice una copia de seguridad completa, ejecute la actualización y verifique la funcionalidad. Esto minimiza los riesgos de inactividad.
- Actualizaciones continuas (Rolling updates): Para actualizaciones menores de Dokku y paquetes del SO (
-
Actualizaciones de aplicaciones:
- Las actualizaciones de sus propias aplicaciones se realizan a través de
git push dokku master. Dokku realiza un "despliegue continuo" (rolling deployment) por defecto: se inicia un nuevo contenedor, y solo después de su lanzamiento exitoso, el tráfico se redirige a él. El contenedor antiguo se elimina. Esto minimiza el tiempo de inactividad.
- Las actualizaciones de sus propias aplicaciones se realizan a través de
Revise regularmente las fuentes oficiales de Dokku para nuevas versiones y recomendaciones de actualización.
Solución de problemas + Preguntas frecuentes
Incluso con una plataforma tan conveniente como Dokku, a veces surgen problemas. A continuación, se presentan preguntas típicas y sus soluciones.
La aplicación no se inicia después del despliegue (Deploy failed)
Qué verificar: En primer lugar, revise los registros de despliegue y ejecución de la aplicación. Dokku los muestra en la consola durante git push. Si los ha omitido, use el comando dokku logs my-app --tail 100.
Cómo solucionarlo: Busque errores relacionados con dependencias faltantes, comandos de inicio incorrectos (por ejemplo, en Procfile), errores en el código o problemas con las variables de entorno. Asegúrese de que su Procfile sea correcto y que todos los puertos necesarios (por ejemplo, PORT para el servidor web) estén configurados correctamente y que la aplicación los esté escuchando. Verifique que todos los Buildpacks necesarios hayan sido aplicados.
No puedo conectarme por SSH a Dokku o desplegar aplicaciones
Qué verificar:
- Verifique su clave SSH:
cat ~/.ssh/id_rsa.puben la máquina local ydokku ssh-keysen el servidor. Asegúrese de que la clave pública se haya añadido a Dokku. - Verifique la configuración del servidor SSH:
sudo nano /etc/ssh/sshd_config. Asegúrese de quePasswordAuthentication nono lo esté bloqueando si no usa claves, y quePermitRootLogin nono interfiera si intenta iniciar sesión como root. - Verifique el firewall (UFW):
sudo ufw status. Asegúrese de que el puerto 22 (SSH) esté permitido. - Asegúrese de que el usuario Dokku (normalmente
dokku) tenga los permisos correctos.
Cómo solucionarlo: Si la clave no está añadida, añádala. Si hay un problema con el firewall, permita el puerto. Si se ha bloqueado a sí mismo, es posible que deba usar el panel de control de su proveedor de VPS para acceder a través de la consola o para la recuperación.
HTTPS no funciona o Let's Encrypt no emite un certificado
Qué verificar:
- Registros DNS: Asegúrese de que el nombre de dominio de su aplicación (por ejemplo,
app.yourdomain.com) apunte correctamente a la dirección IP de su servidor Dokku. Usedig app.yourdomain.com. - Firewall: Asegúrese de que los puertos 80 (HTTP) y 443 (HTTPS) estén permitidos en UFW (
sudo ufw status). - Correo electrónico para Let's Encrypt: Asegúrese de haber especificado una dirección de correo electrónico correcta usando
dokku letsencrypt:set my-app email [email protected]. - Límites de Let's Encrypt: Verifique si ha excedido los límites de solicitudes de certificados.
- Registros de Let's Encrypt:
dokku logs --app my-app --ps letsencryptodokku letsencrypt:list my-apppara obtener el estado.
Cómo solucionarlo: Corrija los registros DNS, abra los puertos en el firewall, asegúrese de que el correo electrónico sea correcto. Si se han excedido los límites, tendrá que esperar o usar otro dominio.
La aplicación funciona lentamente o consume demasiados recursos
Qué verificar:
- Registros de la aplicación:
dokku logs my-apppuede mostrar errores, fugas de memoria o consultas ineficientes a la base de datos. - Monitoreo del servidor: Use
htop,free -h,iotoppara verificar el uso de CPU, RAM, disco y red. - Escalado: Es posible que necesite aumentar el número de procesos de su aplicación:
dokku ps:scale my-app web=2. - Recursos de la base de datos: Verifique si la base de datos es un cuello de botella.
Cómo solucionarlo: Optimice el código de la aplicación, las consultas a la base de datos. Aumente los recursos del VPS o considere escalar la aplicación (horizontal o verticalmente). Verifique la configuración de Dokku para las limitaciones de recursos de los contenedores.
¿Qué configuración mínima de VPS es adecuada?
Para ejecutar Dokku y 1-2 aplicaciones pequeñas, como un blog simple o una API REST, necesitará un mínimo de 2 vCPU, 4 GB de RAM y 80 GB de SSD. Esto será suficiente para tareas básicas y para aprender la plataforma. Sin embargo, si planea desplegar varias aplicaciones, usar bases de datos, cachés o espera una carga moderada, se recomienda elegir una configuración con 4 vCPU, 8 GB de RAM y 160 GB de NVMe SSD para un mejor rendimiento y estabilidad.
¿Qué elegir: VPS o dedicado para esta tarea?
Para la mayoría de los escenarios de uso de Dokku (desarrollo, pequeños proyectos de producción, SaaS para equipos pequeños), un VPS es la opción óptima. Ofrece un excelente equilibrio entre costo, flexibilidad y rendimiento. Un servidor dedicado solo debe considerarse en casos de carga muy alta, aplicaciones críticas con estrictos requisitos de rendimiento y aislamiento, grandes volúmenes de datos almacenados o requisitos normativos estrictos que exijan aislamiento físico del hardware. Si recién está comenzando, siempre elija un VPS.
¿Cómo añadir un dominio a la aplicación?
Para añadir un nombre de dominio a su aplicación Dokku, primero asegúrese de haber configurado el registro DNS A correspondiente en su registrador de dominios, apuntando a la dirección IP de su VPS. Luego, use el comando dokku domains:add my-app yourdomain.com, reemplazando my-app con el nombre de su aplicación y yourdomain.com con el dominio deseado. Después de esto, Dokku configurará automáticamente el enrutamiento del tráfico.
Conclusiones y próximos pasos
¡Felicidades! Ha desplegado Dokku con éxito en su VPS, transformándolo en una PaaS potente y flexible. Ahora puede disfrutar de la simplicidad de desplegar aplicaciones usando Git, manteniendo un control total sobre su infraestructura y ahorrando significativamente en servicios en la nube. Dokku brinda a los desarrolladores la libertad de centrarse en el código, no en la compleja configuración de servidores.
¿Qué sigue?
- Exploración de los plugins de Dokku: Explore el rico ecosistema de plugins de Dokku para añadir Redis, MongoDB, RabbitMQ y otros servicios a sus aplicaciones. Esto ampliará significativamente la funcionalidad de su PaaS.
- Integración con CI/CD: Automatice el proceso de despliegue con herramientas de integración y entrega continua como GitHub Actions, GitLab CI/CD o Jenkins. Configúrelas para que cada commit exitoso en la rama
masteractive automáticamentegit push dokku master. - Monitorización y registro: Implemente soluciones para la monitorización del rendimiento del servidor y las aplicaciones (por ejemplo, Prometheus + Grafana) y el registro centralizado (ELK Stack o Graylog) para tener una imagen completa del estado de su infraestructura.