# 📚 How to Mount NFS Storage on Linux (with Proper Permissions)

## Purpose

Mount a remote NFS share on a Linux server for use by **Docker containers**, ensuring stable operation, correct permissions, and automatic remounting.

---

## 1. Install NFS Client on the Server

```bash
sudo apt update
sudo apt install nfs-common -y
```

---

## 2. Create a Local Mount Directory

Create a local directory where the NFS share will be mounted:

```bash
sudo mkdir -p /srv/nfs-mount
sudo chown $(whoami):$(whoami) /srv/nfs-mount
```

> *(You can replace `/srv/nfs-mount` with your preferred path.)*

---

## 3. Mount the NFS Share (Manual Test)

Example:

```bash
sudo mount -t nfs4 192.168.100.11:/mnt/hdd-storage/my-nfs-share /srv/nfs-mount
```

- `nfs4`: Use NFS version 4 for better performance and locking.
- `proto=tcp`: Reliable transport protocol.
- `hard`: Wait for server recovery instead of failing immediately.
- `timeo=600`: Timeout setting for NFS operations.
- `retrans=2`: Retry failed operations twice.
- `sec=sys`: Default authentication method.
- `_netdev`: Ensure mount occurs only after network is ready.

---

## 4. Verify That the Mount Worked

```bash
mount | grep nfs
```

You should see output like:

```text
192.168.100.11:/mnt/hdd-storage/my-nfs-share on /srv/nfs-mount type nfs4 (...)
```

---

## 5. Make the Mount Persistent (Auto-Mount on Boot)

Edit your `/etc/fstab` file:

```bash
sudo nano /etc/fstab
```

Add the following line at the bottom:

```text
192.168.100.11:/mnt/hdd-storage/my-nfs-share /srv/nfs-mount nfs4 rw,relatime,hard,proto=tcp,timeo=600,retrans=2,sec=sys,_netdev 0 0
```

Save and exit (`Ctrl+O`, `Enter`, `Ctrl+X`).

---

## 6. Test the fstab Entry Without Rebooting

```bash
sudo mount -a
```

**No errors = success! ✅**

---

## 7. Using the NFS Mount with Docker

When running your containers, bind-mount the NFS storage into the container:

```bash
docker run -d \
  --name my-container \
  -v /srv/nfs-mount:/app/data \
  my-docker-image
```

This will allow your Docker containers to directly access the NFS storage.

---

# ✅ Summary

- **Use NFSv4** (`nfs4`) whenever possible.
- **Always** include `_netdev` in your `/etc/fstab` entries.
- **Use `hard` mounts** to protect container file operations during NFS issues.
- **Bind-mount** NFS paths carefully into containers.
- **Avoid** using NFS for database storage unless network latency is extremely low.

---

## 🛠️ Useful Commands

- Check NFS mounts: `mount | grep nfs`
- Manual remount all: `sudo mount -a`
- Test connectivity: `ping nfs-server-ip`

---

# 🦠 Additional Notes

- If the NFS server reboots, containers **may pause** temporarily.
- If using `docker-compose.yml`, you can map volumes to `/srv/nfs-mount`.
- For production, consider creating a **systemd mount unit** for better recovery behavior.