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:
sudo apt update
sudo apt install nfs-kernel-server
Comprueba el estado del servidor de NFS.
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.
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.
sudo nano /etc/exports
Añade la siguiente configuración al archivo.
/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
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.
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.
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.
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«.
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«.
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«.
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/«.
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.
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«.
sudo umount /mnt/data
Edita el archivo«/etc/fstab» con el siguiente comando.
sudo nano /etc/fstab
Añade la siguiente configuración al archivo.
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.
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«.
sudo df -h
Configurando nfs en portainer
Para ello deberemos seguir los siguientes pasos:
- Instalar
nginx
en el servidor correspondiente. - Crear un dominio (valeria.midominio.com en los ejemplos), y apuntarlo en los DNS a la IP publica del router.
- Indicar al router que redirija el puerto 80 y el 443 al servidor donde se ha instalado el
nginx
. - Usar
Certbot
para generar un certificado de seguridad para el dominio. - 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:
sudo nano /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.
- 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:
sudo nano /etc/nginx/nginx.conf
...
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server IP.SW.A.RM:1881;
}
...
- 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.
sudo nginx -t
sudo service nginx restart