> /home/jd
ES / EN

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 del laboratorio de Memos en Proxmox con almacenamiento SMB en Synology y acceso por Tailscale

Objetivo: Esta guía documenta la instalación de Memos en un servidor Proxmox. En este laboratorio, el contenedor LXC puede reconstruirse porque los datos se almacenan en un NAS Synology mediante SMB. La protección real depende de que Hyper Backup tenga una tarea activa y de que las restauraciones se prueben periódicamente. También se configura Tailscale para el acceso remoto sin exponer el servicio directamente a internet.

Decisión específica del laboratorio: Memos utiliza SQLite por defecto. SQLite advierte que la sincronización y los bloqueos de los sistemas de archivos de red varían entre implementaciones y pueden causar problemas de rendimiento o corrupción. La opción nobrl desactiva los bloqueos por rango de bytes; evita ciertos bloqueos sobre CIFS, pero no convierte SMB en una ubicación universalmente segura para una base SQLite activa. Para una instalación más robusta, conserva la base de datos en almacenamiento local y genera copias consistentes hacia el NAS, o utiliza una base de datos cliente-servidor compatible. Esta guía refleja la topología probada en este laboratorio, no una recomendación genérica de producción.


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): En este laboratorio, nobrl (No Byte Range Lock) evitó errores database is locked sobre SMB. La opción desactiva ese mecanismo de bloqueo y tiene el riesgo explicado al comienzo de la guía; no debe copiarse a una instalación de producción sin evaluar la integridad y la estrategia de recuperación. 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 Docker y ejecutar Memos con la base de datos y los archivos multimedia en la ruta de Synology que acabamos de montar, conforme a la decisión de laboratorio documentada arriba.

Pasos a seguir:

  1. Instalar Docker para este laboratorio: El siguiente script de conveniencia descarga y configura Docker en el LXC. Docker lo orienta a entornos de prueba y desarrollo; para un entorno estable conviene utilizar su repositorio apt oficial y controlar explícitamente las versiones.

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

    ¿Error sysctl net... permission denied al iniciar Docker en Proxmox? Antes de degradar o fijar containerd.io, revisa los registros del contenedor y la compatibilidad entre las versiones instaladas de Proxmox, el template del LXC y Docker. Una versión fijada puede quedar obsoleta y perder actualizaciones de seguridad; cualquier downgrade debe ser temporal, estar documentado y validarse contra la documentación vigente.

  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: unless-stopped
        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 acceder a Memos desde el teléfono fuera de la red local, instalaremos Tailscale en el contenedor. La conexión viaja por la red privada de Tailscale y evita publicar el puerto 5230 en el router.

Pasos a seguir:

  1. Instalar Tailscale: En la consola del contenedor, ejecuta el instalador 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. Obtener la IP de Tailscale: Una vez autenticado, vuelve a la terminal y ejecuta:

    Bash
    tailscale ip -4

    La IP que empieza con 100.x.x.x identifica al contenedor dentro de tu Tailnet.

  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 del teléfono y entra a la IP de Tailscale con este formato: http://100.x.x.x:5230

    Error frecuente de conexión (ERR_CONNECTION_REFUSED) Incluye el puerto :5230 al final de la IP de Tailscale. Sin él, el navegador intentará usar el puerto 80. En esta topología, utiliza http:// porque Memos no tiene un certificado TLS local; el tráfico entre los nodos sigue protegido por Tailscale.

¡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.]