Tutorial

Sincronizar el historial de la terminal con Atuin en un VPS

Automatización7 min de lectura6 pasos

Atuin reemplaza el archivo `.zsh_history` por una base de datos SQLite local y sincroniza ese historial entre tus máquinas a través de un servidor que gestionas tú mismo. Cada comando se cifra antes de enviarse: el servidor nunca ve su contenido. El resultado: un historial consultable en milisegundos, compartido entre portátiles, servidores y máquinas virtuales, sin ceder tus datos a terceros.

Contenido· Por qué sincronizar el historial de la terminal1/9
  1. 01Por qué sincronizar el historial de la terminal
  2. 02Beneficios concretos de Atuin autoalojado
  3. 03Requisitos previos
  4. 04Instalar el servidor Atuin en el VPS
  5. 05Instalar y configurar el cliente Atuin
  6. 06Seguridad: firewall, registro y proxy inverso
  7. 07Resolución de problemas — errores comunes
  8. 08Atuin frente a las alternativas: qué herramienta elegir
  9. 09Atuin, una herramienta que crece contigo

Por qué sincronizar el historial de la terminal

Trabajar en varias máquinas debería ser transparente. En la práctica, el comando kubectl rollout undo deployment/api escrito en el portátil nunca está en el terminal del servidor de CI, y el docker compose exec de hace tres semanas ha desaparecido porque la rotación del historial sobrescribió las entradas antiguas.

Atuin resuelve ambos problemas desde la raíz: almacena cada comando en SQLite con su contexto (hora, duración, código de salida, directorio actual) y sincroniza esa base de datos entre tus máquinas a través de un servidor que tú controlas. La búsqueda se ejecuta localmente — sin latencia de red al recuperar un comando — y la sincronización ocurre en segundo plano. La interfaz de búsqueda (Ctrl+R) se convierte en un índice exhaustivo de todo lo que has escrito, en cualquier máquina, desde el primer día.

Beneficios concretos de Atuin autoalojado

  • Encuentra cualquier comando escrito en cualquier máquina en menos de un segundo mediante Ctrl+R.
  • Cifrado del lado del cliente (AES-256): el servidor nunca ve el contenido de tu historial.
  • Contexto detallado por entrada: código de salida, duración de ejecución, directorio actual, nombre del host.
  • Ningún dato enviado a terceros — tú alojas, tú controlas.
  • Binario Rust sin dependencias pesadas: funciona en el VPS Start desde 99 DH/mes.
  • Soporte para zsh, bash, fish, nushell y PowerShell — un solo servidor para toda tu flota.
  • Estadísticas de uso integradas (atuin stats): tus comandos más frecuentes, tus picos de actividad.

Requisitos previos

VPS: el servidor Atuin es un binario Rust compilado con una base de datos SQLite integrada. Consume menos de 50 MB de RAM en reposo, lo que lo hace compatible con el VPS Start. Reserva 512 MB de RAM disponible para el conjunto completo (sistema operativo + proceso Atuin) y 5 GB de almacenamiento SSD para el historial a largo plazo. Un kernel Linux reciente (Debian 12 o Ubuntu 22.04+) funciona perfectamente.

Docker y Docker Compose deben estar instalados en el VPS — es el método de despliegue recomendado por el proyecto. Si tu VPS es nuevo, instala Docker mediante el script oficial o la plantilla Docker del Marketplace de ServOrbit.

Un nombre de dominio apuntando al VPS es recomendable (atuin.your-domain.com, registro A) para generar un certificado TLS automático. El certificado es imprescindible: el cliente Atuin rechaza sincronizar en texto claro por defecto.

Instalar el servidor Atuin en el VPS

  1. Conectarse al VPS y crear un directorio de trabajo

    Conéctate por SSH a tu VPS:

    ssh root@<ip-del-vps>

    Crea un directorio dedicado:

    mkdir -p /opt/atuin && cd /opt/atuin
  2. Escribir el archivo docker-compose.yml

    Crea el archivo de composición:

    cat > docker-compose.yml << 'EOF'
    services:
      atuin:
        image: ghcr.io/atuinsh/atuin:v18.23.0
        command: server start
        volumes:
          - ./config:/config
        ports:
          - "8888:8888"
        environment:
          ATUIN_HOST: "0.0.0.0"
          ATUIN_PORT: "8888"
          ATUIN_OPEN_REGISTRATION: "true"
          ATUIN_DB_URI: "sqlite:///config/history.db"
        restart: unless-stopped
    EOF

    Esta configuración usa SQLite (integrado, sin dependencias externas) y abre el registro para que puedas crear tu cuenta en la primera conexión.

  3. Crear el directorio de configuración e iniciar el contenedor

    Atuin necesita un directorio de configuración con permisos de escritura:

    mkdir -p config && chown 1000:1000 config

    Inicia el servidor:

    docker compose up -d

    Verifica que el contenedor está en funcionamiento:

    docker compose ps
    # NAME      STATUS          PORTS
    # atuin     Up 2 minutes    0.0.0.0:8888->8888/tcp
  4. Abrir el puerto 8888 en el firewall UFW

    El puerto 8888 debe ser accesible desde tus máquinas cliente. En Ubuntu/Debian con UFW:

    sudo ufw allow 8888/tcp
    sudo ufw status

    ⚠️ Si omites este paso, el cliente atuin mostrará Connection refused o Failed to sync history al sincronizar — el error más frecuente en los despliegues autoalojados.

  5. Colocar un proxy inverso HTTPS delante del servidor

    El cliente Atuin requiere HTTPS por defecto. Coloca Caddy delante:

    apt-get install -y caddy

    Crea /etc/caddy/Caddyfile:

    atuin.your-domain.com {
        reverse_proxy localhost:8888
    }

    Reinicia Caddy (obtiene el certificado Let's Encrypt automáticamente):

    systemctl restart caddy

    Verifica que el servidor responde:

    curl https://atuin.your-domain.com
    # {"msg":"Atuin server v18.23.0"}
  6. Cerrar el registro una vez creada tu cuenta

    Una vez creadas tus cuentas (ver el paso siguiente), desactiva el registro público para evitar cuentas no deseadas. Edita docker-compose.yml:

    ATUIN_OPEN_REGISTRATION: "false"

    Reinicia el contenedor:

    docker compose up -d

    Opcionalmente, crea /opt/atuin/config/server.toml para un control más fino:

    [server]
    host = "0.0.0.0"
    port = 8888
    open_registration = false
    
    [server.db]
    db_uri = "sqlite:///config/history.db"

Instalar y configurar el cliente Atuin

En cada una de tus máquinas (portátil, servidor de desarrollo, etc.), instala Atuin usando el script oficial:

curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

El script instala el binario en ~/.atuin/bin y detecta tu shell.

Integración en el shell — añade la línea correspondiente a tu archivo de configuración:

# Para zsh (~/.zshrc)
eval "$(atuin init zsh)"

# Para bash (~/.bashrc)
eval "$(atuin init bash)"

# Para fish (~/.config/fish/config.fish)
atuin init fish | source

Recarga tu shell: source ~/.zshrc (o equivalente).

Registrar una cuenta en tu servidor:

atuin register \
  --server https://atuin.your-domain.com \
  -u tu-usuario \
  -e [email protected] \
  -p tu-contraseña

Atuin genera una clave de cifrado local — aparece en pantalla. Anótala inmediatamente: la necesitarás para conectar otras máquinas y no puede regenerarse.

Primera sincronización:

atuin sync
# Syncing history...
# History synced!

Iniciar sesión desde una segunda máquina:

atuin login \
  --server https://atuin.your-domain.com \
  -u tu-usuario \
  -p tu-contraseña \
  -k "<tu-clave-de-cifrado>"

atuin sync

Seguridad: firewall, registro y proxy inverso

Tres configuraciones a verificar tras el despliegue inicial:

1. open_registration: false en cuanto crees tus cuentas. Si lo dejas en true, cualquiera que conozca la URL puede crear una cuenta y usar tu almacenamiento.

2. Nunca expongas el puerto 8888 directamente — el tráfico siempre debe pasar por el proxy inverso HTTPS. Restringe UFW:

# Bloquear el acceso externo directo al puerto 8888
sudo ufw delete allow 8888/tcp
# El proxy inverso local (Caddy) se conecta internamente

3. Haz copias de seguridad de la base de datos SQLite regularmente:

docker compose exec atuin sh -c "sqlite3 /config/history.db \".backup /config/history.backup.db\""

La base de datos crece lentamente — pocas decenas de MB incluso después de años de uso intensivo.

Resolución de problemas — errores comunes

Algunos errores frecuentes en un despliegue autoalojado y cómo resolverlos.

Connection refused en el primer atuin sync
El puerto 8888 no está abierto en UFW, o el contenedor no está en marcha. Comprueba con:

sudo ufw status | grep 8888
docker compose ps

SSL certificate problem: unable to get local issuer certificate
Caddy aún no ha emitido el certificado TLS. Espera 30–60 segundos tras reiniciar Caddy y vuelve a ejecutar atuin sync. Asegúrate de que el DNS de atuin.your-domain.com apunta a la IP del VPS.

Invalid credentials en atuin login
La clave de cifrado es incorrecta o está truncada. Recupérala desde la máquina original:

atuin key

Pega el valor completo (larga cadena en base64) después de -k.

open_registration is disabled
Cerraste el registro antes de crear todas tus cuentas. Establece temporalmente ATUIN_OPEN_REGISTRATION: "true" en docker-compose.yml, reinicia, crea la cuenta y vuelve a false.

El historial no se sincroniza tras atuin sync
Verifica que el servidor sea el destino configurado en el cliente:

cat ~/.config/atuin/config.toml | grep sync_address
# sync_address = "https://atuin.your-domain.com"

Si falta la clave, añádela manualmente en ~/.config/atuin/config.toml.

Atuin frente a las alternativas: qué herramienta elegir

Desplace la tabla

HerramientaCifrado E2ESincronización multimáquinaAutoalojamientoBúsqueda avanzada
**Atuin**Sí (AES-256, clave local)Sí (servidor opcional)Sí (Docker, SQLite)Sí (contexto, código de salida, duración)
McFlyNoNoN/A (solo local)Sí (red neuronal, directorio actual)
HistdbNoNoN/A (solo local)Parcial (SQLite local, plugin zsh)
zsh_history nativoNoNo (rsync manual posible)N/AMínima (grep, fzf opcional)

Atuin, una herramienta que crece contigo

Atuin v18.23.0 es la solución más completa para un desarrollador que trabaja en varias máquinas y se preocupa por la privacidad de sus datos. La configuración inicial lleva menos de 30 minutos en un VPS Start, y el resultado es un historial exhaustivo, cifrado y consultable al instante desde cualquier terminal.

Una vez el servidor en marcha, puedes ir más lejos: configurar la sincronización automática (atuin daemon), usar las estadísticas semanales (atuin stats), o explorar la interfaz de búsqueda avanzada con filtrado por código de salida o nombre de host. El comando que buscas siempre está ahí — independientemente de en qué máquina lo hayas escrito.

Despliega Atuin en un VPS de ServOrbit

Un VPS Start es suficiente para mantener el servidor Atuin en funcionamiento continuo. Acceso root, IPv4 dedicada, SSD NVMe — todo lo que necesitas para un historial de comandos privado y siempre disponible.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva