Skip to content

Instantly share code, notes, and snippets.

@thewasta
Created April 16, 2026 22:23
Show Gist options
  • Select an option

  • Save thewasta/0d1030cdda5022c149d2ebdd2a465ece to your computer and use it in GitHub Desktop.

Select an option

Save thewasta/0d1030cdda5022c149d2ebdd2a465ece to your computer and use it in GitHub Desktop.
Guía paso a paso para el setup inicial, securización y configuración de Coolify en un VPS (Debian/Ubuntu). Incluye creación de usuario con privilegios sudo, hardening de SSH, configuración de usuario no-root para Coolify (experimental), firewall con UFW y actualizaciones automáticas.

Configuración de Coolify para Usuario No-Root

Este paso permite que Coolify sea gestionado por nuestro usuario creado anteriormente en lugar de root.

Caution

Nota importante: Según la documentación oficial de Coolify, esta es una función experimental. Úsala bajo tu propio riesgo.

1. Configurar Sudo sin contraseña

Para que Coolify pueda ejecutar comandos de Docker y sistema sin interrupciones, nuestro usuario necesita permisos de sudo sin que se le solicite la contraseña.

  1. Ejecuta el editor de sudoers (usa visudo ya que valida la sintaxis antes de guardar):

    sudo visudo
  2. Busca la línea %sudo ALL=(ALL:ALL) ALL y añade justo debajo lo siguiente (reemplazando tu_usuario):

    tu_usuario ALL=(ALL) NOPASSWD: ALL
    
  3. Guarda y sal (Ctrl+O, Enter, Ctrl+X).

2. Cambiar el usuario en la interfaz de Coolify

  1. Accede al panel de control de tu Coolify (vía web).
  2. Ve a Servers -> localhost.
  3. En el campo User, cambia root por tu nombre de usuario.
  4. Haz clic en Save.

3. Ajuste de permisos en el sistema de archivos

Por defecto, la instalación de Coolify se realiza como root, por lo que las carpetas de datos pertenecen a ese usuario. Debemos transferir la propiedad a nuestro usuario para evitar errores de "Permission Denied".

Ejecuta los siguientes comandos (reemplazando tu_usuario):

# Cambiar el propietario de la carpeta de datos
# El ID 9999 es el que usa internamente el contenedor de Coolify
sudo chown -R 9999:tu_usuario /data/coolify

# Ajustar permisos de lectura/escritura
sudo chmod -R 750 /data/coolify

# Asegurar que las llaves SSH tengan los permisos restrictivos correctos
sudo chmod -R 700 /data/coolify/ssh

4. Reinicio completo de Coolify

Para que todos los cambios de permisos y de usuario surtan efecto, debemos reiniciar los contenedores de la infraestructura de Coolify.

# Navegar al directorio de origen
cd /data/coolify/source

# Detener los servicios actuales
sudo docker compose -f docker-compose.yml -f docker-compose.prod.yml down

# Levantar los servicios en modo segundo plano (detached)
sudo docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Verificación

Una vez reiniciado, verifica en el panel de Coolify que el servidor localhost aparece como Running y que puedes desplegar aplicaciones sin errores de permisos.

Si en el futuro tienes problemas con despliegues, revisa que los permisos de /data/coolify no hayan vuelto a cambiar a root:root.

Seguridad: Firewall (UFW) y Actualizaciones Automáticas

Para proteger el VPS, aplicaremos una estrategia de seguridad en dos capas: el firewall del proveedor (externo) y UFW (interno), además de automatizar los parches de seguridad.

1. Configuración del Firewall del Proveedor (Capa Externa)

Antes de tocar la terminal, ve al panel de control de tu proveedor de VPS (Hetzner, DigitalOcean, AWS, etc.) y asegúrate de que el "Cloud Firewall" solo permita tráfico entrante en:

  • TCP 22 (SSH)
  • TCP 80 (HTTP)
  • TCP 443 (HTTPS)
  • TCP 8000 (Opcional: Solo si necesitas acceder al panel de Coolify antes de configurar el dominio con SSL).

2. Configuración de UFW (Capa Interna)

UFW (Uncomplicated Firewall) es una interfaz sencilla para gestionar las reglas de red dentro del propio servidor.

Instalación

sudo apt update && sudo apt install ufw -y

Configuración de políticas básicas

Primero, definimos el comportamiento por defecto: bloquear todo lo que entra y permitir todo lo que sale.

sudo ufw default deny incoming
sudo ufw default allow outgoing

Apertura de puertos específicos

Es crítico permitir SSH antes de activar el firewall, de lo contrario perderás el acceso al servidor.

# Permitir SSH (Puerto 22)
sudo ufw allow OpenSSH

# Permitir tráfico Web (80 y 443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Opcional: Puerto de la UI de Coolify (si no usas proxy inverso aún)
# sudo ufw allow 8000/tcp

Activación

sudo ufw enable

Te preguntará si deseas continuar ya que la conexión SSH podría cortarse. Escribe y y pulsa Enter.

Verifica el estado con:

sudo ufw status verbose

3. Actualizaciones Automáticas (Unattended Upgrades)

Para evitar que el servidor quede vulnerable por falta de parches de seguridad, configuraremos las actualizaciones automáticas.

Instalación

sudo apt install unattended-upgrades -y

Configuración

Ejecuta el siguiente comando para activar el asistente:

sudo dpkg-reconfigure --priority=low unattended-upgrades

Selecciona "Sí" (Yes) cuando te pregunte si deseas descargar e instalar actualizaciones de seguridad automáticamente.

Verificación

Para asegurarte de que el servicio está corriendo:

systemctl status unattended-upgrades

Resumen de Mantenimiento para el futuro

  • Ver logs de actualizaciones: cat /var/log/unattended-upgrades/unattended-upgrades.log
  • Ver estado del firewall: sudo ufw status
  • Comando de actualización manual: sudo apt update && sudo apt upgrade -y

Configuración Inicial del VPS y Seguridad SSH

Esta guía detalla cómo preparar un VPS recién creado para instalar Coolify, enfocándose en la creación de un usuario con privilegios y el cierre del acceso root por seguridad.

1. Acceso inicial y creación de usuario

Accedemos como root para crear nuestro usuario de trabajo.

# 1. Entrar al servidor
ssh root@<IP_DEL_SERVIDOR>

# 2. Crear el nuevo usuario
adduser nombre_usuario

# 3. Darle permisos de administrador (sudo)
usermod -aG sudo nombre_usuario

2. Configuración de llaves SSH

Para no perder el acceso, copiaremos las llaves autorizadas de root al nuevo usuario. Esto permite loguearse sin contraseña usando tu clave privada actual.

# Copiar la carpeta .ssh y ajustar permisos de propietario
rsync --archive --chown=nombre_usuario:nombre_usuario ~/.ssh /home/nombre_usuario

3. Verificación de privilegios

Importante: Antes de continuar, abre una nueva terminal en tu ordenador y comprueba que puedes entrar con el nuevo usuario y usar sudo.

# En una nueva terminal local:
ssh nombre_usuario@<IP_DEL_SERVIDOR>

# Una vez dentro, verifica que puedes usar sudo:
sudo whoami
# Debería devolver: root

4. Hardening (Asegurar el servidor)

Una vez confirmado que el nuevo usuario funciona, deshabilitaremos el acceso por contraseña y el acceso directo de root.

sudo nano /etc/ssh/sshd_config

Busca y modifica las siguientes líneas (asegúrate de que no tengan el símbolo # al principio):

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

Nota: PasswordAuthentication no es vital para evitar ataques de fuerza bruta. Solo podrás entrar con tu llave SSH.

Reiniciar el servicio

Para aplicar los cambios, reinicia el demonio de SSH:

sudo systemctl restart ssh

5. Verificación final

No cierres tu sesión actual hasta confirmar que todo funciona:

  1. Prueba root: Intenta entrar como root (ssh root@IP). El servidor debería rechazar la conexión inmediatamente.
  2. Prueba usuario: Entra con tu nuevo usuario. Debería dejarte pasar sin pedir contraseña (usando tu llave).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment