Saltar al contenido principal

nfs

Con nfs se puede tener acceso a ficheros fuera del entorno de docker, facilitando el interncambio de información entre los contenedores y el exterior.

Instalación en el servidor de los datos

Para instalar nfs en el servidor correspondiente, deberemos ejecutar los siguientes comandos:

instalar nfs server
sudo apt update
sudo apt install nfs-kernel-server

Comprueba el estado del servidor de NFS.

Comprueba el estado del servidor
sudo systemctl is-enabled nfs-server
sudo systemctl status nfs-server

Después de instalar el paquete del servidor NFS, ahora vas a configurar los directorios compartidos. Los directorios compartidos NFS pueden definirse mediante el archivo «/etc/exports«. Además, puedes especificar la dirección IP del cliente para el directorio compartido o configurar la lectura/escritura en el directorio compartido.

Ejecuta el siguiente comando para crear nuevos directorios compartidos. En este ejemplo, habrá dos directorios compartidos disponibles para los clientes,«backups» y«shared« dentro de la unidad y carpeta indicada con cd.

Configurar unidades
df -h
lsblk
cd /media/xxxxxx
sudo mkdir -p backups shared
sudo chown -R nobody:nogroup backups shared
sudo chmod 777 backups shared

A continuación, modifica el archivo«/etc/exports» utilizando el siguiente comando.

modifica el archivo«/etc/exports»
sudo nano /etc/exports

Añade la siguiente configuración al archivo.

modifica el archivo«/etc/exports»
/media/xxxx/backups  192.168.5.100(rw,sync,no_subtree_check)
/media/xxxx/shared 192.168.10.0/24(rw,sync,no_subtree_check)

Guarda y cierra el archivo cuando hayas terminado.

El directorio «backups» sólo estará disponible para el cliente NFS con dirección IP«192.168.5.100«. El directorio » shared » estará disponible para todos los clientes de la red completa«192.168.10.0/24«. rw – permitir la lectura y escritura para el directorio compartido. sync – permitir que NFS escriba los cambios antes de responder a las máquinas cliente y asegurar que el servidor NFS se presenta siempre a los clientes. no_subtree_check – desactiva la comprobación de subárboles y asegura que no habrá conflictos cuando los usuarios cambien el nombre del archivo. A continuación, ejecuta el siguiente comando para aplicar y exportar todos los directorios. Si no recibes ningún mensaje, entonces tu configuración es correcta.

Ejecuta el siguiente comando para comprobar los directorios compartidos disponibles en el servidor NFS. Deberías ver dos directorios«/srv/backups» y«/mnt/shared» disponibles como directorios compartidos para los clientes y reestablecer el servicio

Restart
sudo exportfs -a
sudo systemctl restart nfs-server
sudo systemctl status nfs-server
sudo exportfs -v

Asegurar el servidor NFS con un cortafuegos Después de configurar el directorio compartido NFS, es el momento de asegurar el servidor NFS mediante el Firewall, en este caso, el firewall por defecto de Ubuntu es UFW.

Como puedes ver en la parte superior, cada directorio compartido es accesible a través de una dirección IP de cliente y una red específicas. Así que tendrás que especificar la dirección IP del cliente o la red en la regla del cortafuegos UFW que tendrá permiso para acceder al puerto del servicio NFS.

Ejecuta el siguiente comando ufw para permitir que la dirección IP del cliente«192.168.5.100» y la red«192.168.10.0/24» accedan al puerto del servicio NFS.

abre puertos
sudo ufw allow from 192.168.5.100 to any port nfs
sudo ufw allow from 192.168.10.0/24 to any port nfs

Ahora vuelve a cargar la regla del cortafuegos UFW y verifica la lista de reglas del cortafuegos con el comando siguiente. Deberías ver que el puerto de servicio NFS por defecto«2049» es accesible a través de direcciones IP y redes de clientes específicas.

Reload
sudo ufw reload
sudo ufw status

Instalación en los ordenadores cliente

Para instalar nginx en los ordenadores que vayan a acceder a los servidores NFS, instala el paquete«nfs-common» con el siguiente comando. Introduce Y para confirmar la instalación y pulsa ENTER. Ahora comenzará la instalación.

instalar nfs en cliente
sudo apt install nfs-common

Configurar el directorio de montaje Antes de empezar a montar el directorio compartido NFS, crearás un nuevo directorio específico para el destino del montaje. En este ejemplo, el directorio de destino para montar los recursos compartidos NFS es el directorio «/mnt/data».

Ejecuta el siguiente comando para crear un nuevo directorio«/mnt/data«.

Reload
sudo mkdir -p /mnt/data

Para montar el directorio compartido NFS, ejecuta el siguiente comando de montaje. En esta demostración, montarás el directorio compartido «/srv/backups» en el directorio de destino«/mnt/data«.

Reload
sudo mount nfs_server_ip:/srv/backups /mnt/data

Ahora ejecuta el siguiente comando para comprobar y verificar la lista de discos montados en tu máquina Ubuntu. Deberías ver que el directorio compartido NFS «/srv/backups» está montado en tu máquina local en el directorio «/mnt/data«.

Reload
sudo df -h

montar servidor nfs

Verificar el acceso de escritura al servidor NFS Después de haber montado con éxito el directorio compartido NFS, es el momento de verificar el acceso de escritura al directorio compartido NFS.

Ahora ejecuta el siguiente comando para crear y escribir un nuevo archivo«write.txt» en el directorio montado del objetivo NFS«/mnt/data/«.

Reload
echo "This file from client" > /mnt/data/write.txt
cat /mnt/data/write.txt

prueba de escritura del servidor nfs

A continuación, vuelve al servidor NFS y ejecuta el siguiente comando para comprobar y verificar el archivo «write.txt«. Deberías ver exactamente el mismo archivo que acabas de crear desde la máquina cliente NFS.

Reload
cat /srv/backups/write.txt
ls /srv/backups/

prueba de escritura del servidor nfs

Montar automáticamente el Servidor NFS con /etc/fstab En este punto, has montado con éxito el directorio compartido NFS en la máquina cliente de Ubuntu y has comprobado el acceso de escritura en el directorio compartido. Ahora vas a configurar el directorio compartido NFS para que se monte automáticamente durante el arranque del sistema, y esto puede hacerse mediante el archivo /etc/fstab.

Antes de editar el archivo /etc/fstab, ejecuta el siguiente comando para desmontar el directorio compartido NFS del destino«/mnt/data«.

Reload
sudo umount /mnt/data

Edita el archivo«/etc/fstab» con el siguiente comando.

Reload
sudo nano /etc/fstab

Añade la siguiente configuración al archivo.

Reload
nfs_server_ip:/srv/backups    /mnt/data   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Guarda y cierra el archivo cuando hayas terminado.

A continuación, ejecuta el siguiente comando de montaje para comprobar y verificar el archivo » /etc/fstab«. Si tu configuración es correcta, todos los sistemas de archivos del archivo «/etc/fstab» se montarán en tu máquina.

Reload
sudo mount -a

Comprueba la lista de discos montados en tu máquina cliente utilizando el siguiente comando. Y deberías ver que el directorio compartido NFS«/srv/backups» está montado en el directorio de destino «/mnt/data«. Si reinicias/reinicias la máquina cliente, el directorio compartido NFS se montará automáticamente en el directorio «/mnt/data«.

Reload
sudo df -h

Configurando nfs en portainer

Para ello deberemos seguir los siguientes pasos:

  1. Instalar nginx en el servidor correspondiente.
  2. Crear un dominio (valeria.midominio.com en los ejemplos), y apuntarlo en los DNS a la IP publica del router.
  3. Indicar al router que redirija el puerto 80 y el 443 al servidor donde se ha instalado el nginx.
  4. Usar Certbot para generar un certificado de seguridad para el dominio.
  5. Modificar el fichero de configuración de nginx llamado /etc/nginx/sites-available/default para que redirija las peticiones al servidor swarm de ValerIA (IP.SW.A.RM en los ejemplos), de la siguiente manera:
editar el fichero /etc/nginx/sites-available/default
    sudo nano /etc/nginx/sites-available/default
crear o editar sección server en /etc/nginx/sites-available/default
...
server {
server_name valeria.midominio.com;
location / {
proxy_pass http://IP.SW.A.RM:3051/;
}
location /v1 {
proxy_pass http://IP.SW.A.RM:5051/v1;
}
location /conductor {
proxy_pass http://IP.SW.A.RM:1881/conductor;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
proxy_set_header Host $host;
}
location /conductor/comms {
proxy_pass http://valeriaws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
proxy_set_header Host $host;
}

listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/valeria.midominio.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/valeria.midominio.com/privkey.pem; # managed by Cert>
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
if ($host = valeria.midominio.com) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80;
listen [::]:80;

server_name valeria.midominio.com;
return 404; # managed by Certbot
}
...

Hay que intentar que no acaben las redirecciones en /, ya que si no, en algunas situaciones no funcionan los websockets.

  1. Modificar el fichero de configuración de nginx llamado /etc/nginx/nginx.conf para que dentro de la seccion http, tenga la seccion map y upstream, de la siguiente manera:
editar el fichero /etc/nginx/nginx.conf
    sudo nano /etc/nginx/nginx.conf
editar sección server en /etc/nginx/nginx.conf
...
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server IP.SW.A.RM:1881;
}
...
  1. Para activar conviene comprobar que el comando nginx -t no da errores, y si no los da, reiniciar el servicio con sudo systemctl restart nginx.
comprobar y reiniciar nginx
    sudo nginx -t
sudo service nginx restart