Cómo el servidor pmpserverubu accede (solo lectura) al share de red de Marketing para que aplicaciones de Coolify puedan leer las imágenes de producto.
La app catalogo-odoo (y potencialmente otras) necesita leer las imágenes finales de producto que viven en el share SMB de Marketing, alojado en un servidor de red distinto del servidor de aplicaciones.
Solución adoptada: montaje CIFS/SMB en vivo, de solo lectura, montado en el host y expuesto a los contenedores como bind mount. No se copian los datos (se descartó la copia por rsync): las imágenes crecen de forma continua y mantener un espejo obligaría a re-sincronizar constantemente.
| Elemento | Valor |
|---|---|
| Servidor del share SMB | 192.168.1.19 (NetBIOS: SERVIDORPMP), servidor 24/7, distinto de pmpserverubu |
| Share | //192.168.1.19/Marketing |
| Ruta de las imágenes finales dentro del share | Marketing/Pampling/2-Nueva WEB/4- Finales |
| Servidor de apps | pmpserverubu (192.168.1.10) |
| Punto de montaje en el host | /mnt/marketing-images |
| Protocolo | SMB 3.0, red sin Active Directory (workgroup) |
| Acceso | Solo lectura de punta a punta |
Nota sobre la ruta: dentro del share
Marketinghay a su vez una carpetaMarketing, de ahí que la ruta real tenga el nivel repetido:/mnt/marketing-images/Marketing/Pampling/2-Nueva WEB/4- Finales.
/data-raid/apps/ habría metido los datos en el backup diario (que tarra completo /data-raid/apps/ cada noche), inflando el disco de backups con ~100+ GB de imágenes ya comprimidas que además son un espejo de una fuente autoritativa 24/7. No tiene sentido respaldar una copia de algo que ya vive en otro servidor.soft + timeouts en el montajehard), si el servidor SMB cae, los procesos que leen el montaje quedan colgados indefinidamente en estado D (uninterruptible) y pueden bloquear el contenedor que tiene el bind mount.soft + echo_interval, si el share deja de responder, la I/O falla con error en lugar de colgarse. Las apps que lo usan toleran errores de I/O (procesos batch reintentables)./data-raid/apps/data-raid/apps/ es el scope del backup diario. Un montaje de datos externos/reproducibles no debe entrar ahí. Se monta en /mnt/marketing-images.cifs-utils instalado en el host.Marketing de 192.168.1.19.
marketing, que tiene acceso amplio a muchos shares del servidor (ADMIN$, C$, D$, Finanzas, etc.), no una cuenta de servicio acotada de solo lectura. Lo ideal es que IT cree una cuenta de servicio RO limitada al share Marketing. Mientras tanto funciona, pero si esas credenciales se filtran dan acceso a más de lo necesario.sudo apt-get update && sudo apt-get install -y cifs-utils
sudo tee /etc/cifs-marketing.cred >/dev/null <<'EOF'
username=marketing
password=<CONTRASEÑA>
domain=WORKGROUP
EOF
sudo chmod 600 /etc/cifs-marketing.cred
sudo chown root:root /etc/cifs-marketing.cred
sudo mkdir -p /mnt/marketing-images
//192.168.1.19/Marketing /mnt/marketing-images cifs credentials=/etc/cifs-marketing.cred,ro,uid=1000,gid=1000,file_mode=0440,dir_mode=0550,vers=3.0,iocharset=utf8,soft,echo_interval=10,actimeo=30,nofail,_netdev,x-systemd.automount,x-systemd.idle-timeout=120 0 0
sudo systemctl daemon-reload
sudo mount -a
findmnt /mnt/marketing-images
sudo ls "/mnt/marketing-images/Marketing/Pampling/2-Nueva WEB/4- Finales"
Debe listar las carpetas de finales. El acceso desde un usuario que no sea uid 1000 dará "Permission denied": es correcto (el montaje está acotado al uid del contenedor).
| Opción | Función |
|---|---|
ro |
Solo lectura |
credentials= |
Fichero con usuario/contraseña (fuera del fstab) |
uid=1000,gid=1000 |
El contenido pertenece al uid/gid del contenedor (convención Nixpacks/Coolify) |
file_mode=0440,dir_mode=0550 |
Permisos restrictivos: solo lee el owner/grupo |
vers=3.0 |
Fuerza SMB 3.0 |
soft |
La I/O falla con error si el share cae (evita cuelgues en estado D) |
echo_interval=10 |
Detecta caída del servidor SMB en ~10s |
actimeo=30 |
Cachea metadatos 30s (menos round-trips) |
nofail |
El host arranca aunque el share no esté disponible |
_netdev |
Marca el montaje como dependiente de red |
x-systemd.automount |
Monta bajo demanda, no bloquea el arranque |
x-systemd.idle-timeout=120 |
Desmonta tras 120s sin uso |
Para cada app que necesite las imágenes, en Coolify:
/mnt/marketing-images/Marketing/Pampling/2-Nueva WEB/4- Finales/images)IMAGES_ROOT=/images).Los Storages de Coolify se guardan en su BD y se reaplican en cada redeploy (no se pierden, a diferencia de las customizaciones de Traefik).
| Dato | Valor |
|---|---|
| App | catalogo-odoo · UUID cvxt31lorilnnuw9ek0tqdgv · proyecto IA PROJECTS · https://catalogo-odoo.pampl.ing |
| Bind mount source | /mnt/marketing-images/Marketing/Pampling/2-Nueva WEB/4- Finales |
| Bind mount destination | /images (read only) |
| Variable | IMAGES_ROOT=/images |
docker exec <contenedor_catalogo-odoo> ls /images # debe listar las carpetas de finales
docker exec <contenedor_catalogo-odoo> touch /images/test # debe FALLAR (read-only)
x-systemd.automount se monta bajo demanda al primer acceso.*.pampl.ing./mnt (fuera de /data-raid/apps), el backup diario no lo toca. Correcto: las imágenes ya viven en su servidor autoritativo.Marketing (en vez de la cuenta marketing de acceso amplio).server-monitor si el montaje se cae, para enterarse de forma proactiva.