> /home/jd

Instalación de Memos en Proxmox con Respaldo en Synology

Guía paso a paso para instalar Memos en un contenedor Proxmox LXC con respaldos en Synology NAS y acceso remoto seguro a través de Tailscale.

Arquitectura de Memos en Proxmox con persistencia en Synology NAS vía Tailscale

Objetivo: Esta guía detalla la instalación paso a paso de Memos en un servidor Proxmox. El diseño fundamental es que el contenedor (LXC) sea desechable. Todas las notas e información importante se persistirán en un NAS Synology externo utilizando el protocolo SMB. De esta forma, ante cualquier fallo o destrucción accidental del contenedor, la información se mantendrá intacta y automáticamente respaldada (mediante Hyperbackup). También incluye la configuración de Tailscale para acceso remoto seguro.


Fase 1: Preparación del Entorno (Synology y Proxmox)

El primer paso es tener los “cimientos” listos: un lugar seguro donde guardar los datos (NAS) y el equipo que correrá la aplicación (Proxmox LXC).

1.1 Preparación en el NAS Synology (Compartición SMB)

Vamos a crear una carpeta en Synology donde vivirán exclusivamente los datos del contenedor Docker de Memos.

Permisos de la Carpeta Compartida en Synology DSM

Pasos a seguir:

  1. Ingresa a la interfaz web de tu DSM de Synology.
  2. Ve al Panel de Control > Carpeta Compartida (Shared Folder).
  3. Crea una nueva carpeta compartida. Nómbrala, por ejemplo, memos-data.
  4. (Opcional pero recomendado) Ve a Panel de Control > Usuario y Grupo (User & Group) y crea un usuario dedicado (por ejemplo, memos_user). Dale una contraseña fuerte.
  5. Regresa a los Permisos de la carpeta memos-data y asegúrate de que el usuario memos_user (o tu usuario principal si decidiste no crear uno nuevo) tenga permisos de Lectura y Escritura (Read/Write).

1.2 Creación del Contenedor LXC en Proxmox

Utilizaremos un contenedor LXC (Linux Container) porque comparte el kernel con el host Proxmox, siendo muchísimo más rápido y eficiente (consume menos memoria RAM y CPU) que una máquina virtual completa.

Resumen del Contenedor Proxmox Opciones del Contenedor Proxmox

Pasos a seguir:

  1. Ingresa a la interfaz web de tu Proxmox.
  2. Arriba a la derecha, haz clic en el botón azul “Create CT” (Crear Contenedor).
  3. Pestaña General:
    • Asigna un Hostname (ejemplo: memos-server).
    • Elige una contraseña para el usuario root.
    • MUY IMPORTANTE: Desmarca (quita el tilde) de la opción “Unprivileged container”. Mantenlo desmarcado. Un contenedor Privilegiado hace mucho más sencillo el montaje automático de unidades de red (SMB) y el uso de Docker adentro del contenedor.
  4. Pestaña Template: Selecciona un template base (Recomiendo firmemente ubuntu-24.04-standard o debian-12-standard, según los que tengas descargados en el almacenamiento local de Proxmox).
  5. Pestaña Disks: 8 GB de almacenamiento es más que suficiente (Docker y el Sistema Operativo apenas usarán un par de GB, nuestros verdaderos datos estarán en la Synology).
  6. Pestaña CPU: Asigna 1 o 2 cores.
  7. Pestaña Memory: 1024 MB (1GB) es más que suficiente, Memos es muy ligero.
  8. Pestaña Network:
    • Bridge: vmbr0
    • IPv4: Seleccionas Static y configuras 192.168.8.99/24.
    • Gateway (IPv4): 192.168.8.1.
  9. MUY IMPORTANTE (Habilitar SMB y Docker en Proxmox): Antes de arrancar el contenedor, ve a la pestaña “Options” seleccionando tu contenedor a la izquierda. Busca la opción “Features”, hazle doble clic, marca las siguientes dos casillas:
    • SMB/CIFS (Para nuestra unidad Synology)
    • nesting (Obligatorio para que Docker funcione adentro de un contenedor LXC)
  10. Finaliza la creación y arranca (Start) el contenedor.

¿No tienes internet en el contenedor? (Bug de Ubuntu 24.04 en Proxmox) Si notas que el contenedor no tiene internet al iniciar (error: Temporary failure resolving), debes forzar el encendido de la red. En la consola del contenedor escribe:

Bash
ip link set eth0 up
ip addr add 192.168.8.99/24 dev eth0
ip route add default via 192.168.8.1
echo "nameserver 1.1.1.1" > /etc/resolv.conf

(Asegúrate de cambiar las IPs por las tuyas si en el futuro usas otras).

[Registro de progreso: Fase 1 Completada. Se configuró exitosamente la IP estática 192.168.8.99 en Proxmox y se finalizó la creación del LXC.]


Fase 2: Configuración del Almacenamiento en el Contenedor (Montaje SMB)

Ya tenemos nuestro contenedor creado con la IP 192.168.8.99. Ahora vamos a conectar este contenedor con la carpeta de Synology usando el protocolo SMB, para que Memos guarde todo allí.

Pasos a seguir:

  1. En la interfaz de Proxmox, selecciona tu contenedor a la izquierda y presiona en “Console” para abrir la terminal de comandos.

  2. Inicia sesión escribiendo root y la contraseña que elegiste al crearlo.

    ¿Error Temporary failure resolving? Si al intentar actualizar recibes este error, significa que a tu contenedor le faltan los servidores DNS. Para solucionarlo rápido: Escribe nano /etc/resolv.conf y añade esta línea al final: nameserver 1.1.1.1. Guarda y sal (Ctrl+O, Enter, Ctrl+X). (Alternativamente, puedes ir a la interfaz de Proxmox > Tu contenedor > “DNS” y poner 1.1.1.1 en “DNS servers”, y reiniciar el contenedor).

  3. Lo primero siempre es actualizar los paquetes y descargar la herramienta para leer SMB (cifs-utils):

    Bash
    apt update && apt upgrade -y
    apt install cifs-utils -y
  4. Vamos a crear la carpeta local en el LXC que servirá como “puerta” hacia la NAS:

    Bash
    mkdir -p /mnt/synology/memos
  5. Para no dejar la contraseña de tu Synology a la vista de todos, crearemos un archivo oculto de credenciales:

    Bash
    nano /root/.smbcredentials

    Dentro de ese archivo escribe lo siguiente (reemplaza con tu usuario y contraseña de Synology):

    Text
    username=tu_usuario_memos
    password=tu_contraseña_fuerte

    Guarda presionando Ctrl+O, luego Enter, y sal con Ctrl+X.

  6. Aseguramos el archivo para que solo root pueda leer las contraseñas:

    Bash
    chmod 600 /root/.smbcredentials
  7. Ahora vamos a configurarlo para que se monte automáticamente cada vez que el contenedor encienda. Editaremos el archivo /etc/fstab:

    Bash
    nano /etc/fstab

    Al final del archivo, agrega esta línea (asegúrate de cambiar la IP por la IP de tu Synology y el nombre de la carpeta si le pusiste otro):

    Text
    //IP_DE_TU_SYNOLOGY/memos-data /mnt/synology/memos cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777,vers=3.0,nobrl 0 0

    Importante (nobrl): La opción nobrl (No Byte Range Lock) es críticamente obligatoria para que la base de datos de Memos (SQLite) no se congele o bloquee (database is locked) al ejecutarse a través de la red sobre el protocolo SMB. Guarda y saliendo con Ctrl+O, Enter, y Ctrl+X.

  8. Probamos que todo haya salido bien montando las unidades:

    Bash
    mount -a

    Si no aparece ningún error, ¡funcionó!

  9. Verificamos que esté montado viendo el espacio libre:

    Bash
    df -h

    Deberías ver una línea al final que muestra el tamaño completo de tu disco de Synology apuntando a /mnt/synology/memos.

[Registro de progreso: Fase 2 Completada. Carpeta Synology montada y configurada exitosamente dentro del contenedor en /mnt/synology/memos.]


Fase 3: Instalación de Docker y Despliegue de Memos

En esta fase vamos a instalar el motor de Docker e indicarle que ejecute Memos guardando absolutamente todas las bases de datos y archivos multimedia directamente en la ruta de Synology que acabamos de conectar.

Pasos a seguir:

  1. Instalar Docker de forma automatizada: Corre el script oficial de instalación que lo descargará y configurará en tu LXC:

    Bash
    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    ¿Error sysctl net... permission denied al montar en Proxmox? (Bug de containerd.io) Si Docker no arranca contenedores arrojando un error de permisos sobre unprivileged_port_start, es por una reciente actualización de seguridad incompatible con Proxmox. Para arreglarlo, baja a la versión anterior de containerd y bloquéala tipeando esto en tu consola:

    Bash
    apt install --allow-downgrades containerd.io=1.7.28-1~ubuntu.24.04~noble
    apt-mark hold containerd.io
    systemctl restart docker
  2. Crear una carpeta de configuración para Memos: Crearemos un pequeño lugar para guardar tu archivo docker-compose.yml (que es el manual de instrucciones para docker).

    Bash
    mkdir -p /opt/memos-docker
    cd /opt/memos-docker
  3. Crear y editar el archivo Docker Compose:

    Bash
    nano docker-compose.yml

    Pega este contenido de forma exacta dentro del archivo:

    Yaml
    services:
      memos:
        image: neosmemo/memos:stable
        container_name: memos
        restart: always
        security_opt:
          - apparmor:unconfined
        ports:
          - "5230:5230"
        volumes:
          - /mnt/synology/memos:/var/opt/memos

    (Nota: La línea volumes asegura que la carpeta interna de Memos apunte directamente a nuestra Synology). Guarda y sal con Ctrl+O, Enter, Ctrl+X.

  4. ¡Arrancar Memos! Ejecuta el siguiente comando para ponerlo a correr en segundo plano:

    Bash
    docker compose up -d
  5. Verificar el estado: Si todo fue bien, puedes ver si Memos está encendido con el comando:

    Bash
    docker ps

Si esto termina de forma exitosa, deberás ir a tu navegador web, poner http://192.168.8.99:5230 y te recibirá la pantalla de bienvenida de Memos.

[Registro de progreso: Fase 3 Completada. Memos operando establemente en el puerto 5230.]


Fase 4: Acceso Remoto Seguro con Tailscale

Para poder tomar notas rápidas desde tu celular estando en la calle usando tus datos móviles, instalaremos Tailscale en este contenedor. Esto crea un “túnel VPN invisible” directo hasta Memos sin necesidad de abrir ningún puerto en tu router físico (lo cual sería un riesgo enorme).

Pasos a seguir:

  1. Instalar Tailscale: En la consola de Proxmox del contenedor ejecuta este comando mágico oficial:

    Bash
    curl -fsSL https://tailscale.com/install.sh | sh

    ¿Error Failed to start tailscaled.service (Falta /dev/net/tun)? Proxmox bloquea la creación de dispositivos virtuales incluso en contenedores privilegiados. Para solucionarlo para siempre, debes “abrirle la puerta” desde el host principal de Proxmox.

    1. Ve a la interfaz web principal de Proxmox, selecciona tu “Nodo” (generalmente llamado proxmox o pve) en el panel izquierdo y haz clic en la pestaña Shell.
    2. Pega este comando (reemplaza 103 por el ID numérico de tu contenedor si fuera distinto):
    Bash
    echo -e "lxc.cgroup2.devices.allow: c 10:200 rwm\nlxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file" >> /etc/pve/lxc/103.conf
    1. En la propia consola del host, reinicia el contenedor para aplicar los cambios:
    Bash
    pct stop 103 && pct start 103

    (Tras esto, vuelve a la consola del contenedor Memos, Tailscale arrancará automáticamente).

  2. Conectar el nodo a tu cuenta:

    Bash
    tailscale up

    Te aparecerá en pantalla un link largo (ej: https://login.tailscale.com/a/xxxx). Cópialo, ábrelo en tu navegador y autoriza esta máquina con tu cuenta de Google/Github/Microsoft o la que uses en Tailscale.

  3. Buscar la IP Mágica: Una vez logueado, vuelve a la terminal y ejecuta:

    Bash
    tailscale ip -4

    Esa IP que empieza con 100.x.x.x es la “IP Mágica” de tu contenedor.

  4. Conexión Final desde tu móvil:

    • Instala la app de Tailscale en tu celular y loguéate.
    • Apaga el Wi-Fi (para probar tus datos móviles).
    • Abre el navegador de tu celular y entra a tu IP Mágica siguiendo estrictamente este formato: http://100.x.x.x:5230

    ¡ATENCIÓN! Error clásico de conexión (ERR_CONNECTION_REFUSED) Jamás te olvides de añadir el puerto :5230 al final de la IP de Tailscale. Si escribes solo la IP, el navegador intentará conectarse al puerto 80 (la puerta estándar) y Memos lo rechazará. Además, asegúrate de utilizar http:// explícitamente y no https://, ya que los navegadores modernos suelen forzar la S de seguridad y esto causará un error de carga por falta de certificado SSL local.

¡Y listo! Tendrás tu bloc de notas siempre contigo.

Demostración Final

Así es como luce Memos funcionando en tiempo real mediante este túnel privado:


[Registro de progreso: Fase 4 Completada. Acceso remoto habilitado exitosamente vía Tailnet global configurado sin redirección de puertos en hardware.]