# 📚 Deploying Nextcloud AIO with NFS Storage

## 📚 Guide Overview

**Title:** Deploying Nextcloud AIO with NFS Storage

**Author:** MSLS Partners LLC

**Last Updated:** May 2025

**Description:** This guide walks through deploying Nextcloud All-in-One (AIO) using Docker Compose with NFS-mounted storage on Ubuntu Server. It includes all steps from base OS setup to application deployment.

**Difficulty Level:** Intermediate 🛠️

**Estimated Time:** 20–30 minutes

## 📖 Table of Contents

<div id="bkmrk-purpose-requirements" style="border: 1px solid #ccc; padding: 12px; border-radius: 8px; background-color: #f9f9f9;">- [Purpose](#bkmrk-%F0%9F%93%96-purpose)
- [Requirements](#bkmrk-%F0%9F%93%96-requirements)
- [Install Docker and Docker Compose](#bkmrk-%F0%9F%93%A6-install-docker-and)
- [Prepare NFS Mount](#bkmrk-%F0%9F%94%A7-configure-nfs-expo)
- [Deploy Nextcloud AIO](#bkmrk-%F0%9F%9A%80-deploy-nextcloud-a)
- [Expected Results](#bkmrk-%F0%9F%93%88-expected-results)
- [Troubleshooting](#bkmrk-%F0%9F%9B%A0-troubleshooting)
- [Final Notes](#bkmrk-%F0%9F%93%A6-final-notes)

</div>## 📖 Purpose

To deploy a fully-featured Nextcloud AIO server using Docker Compose, configured to use NFS storage for persistent data.

## 📖 Requirements

- Ubuntu Server 22.04 LTS or newer
- Static IP assigned (e.g., 192.168.100.19)
- NFS server available at `192.168.100.11`
- Two NFS exports: ```
    /mnt/hdd-storage/nfs-nextcloud
    /mnt/hdd-storage/nfs-aio-config
    ```

## 📦 Install Docker and Docker Compose

```
sudo apt update
sudo apt install -y nfs-common ca-certificates curl gnupg lsb-release

# Add Docker GPG key and repo
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]   https://download.docker.com/linux/ubuntu   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Install Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Enable and start Docker
sudo systemctl enable docker
sudo systemctl start docker

```

## 🔧 Configure NFS Exports on Your NFS Server

Ensure these lines are in your `/etc/exports` file on the NFS server:

```
/mnt/hdd-storage/nfs-nextcloud *(rw,no_root_squash,sync,no_subtree_check)
/mnt/hdd-storage/nfs-aio-config *(rw,no_root_squash,sync,no_subtree_check)

```

Apply the exports:

```
sudo exportfs -ra
```

## 🚀 Deploy Nextcloud AIO with Docker Compose

```
mkdir -p ~/nextcloud-aio
cd ~/nextcloud-aio
curl -O https://chat.openai.com/mnt/data/nextcloud-aio-with-nfs-volumes.yml
mv nextcloud-aio-with-nfs-volumes.yml docker-compose.yml
docker compose up -d

```

Once deployed, access the AIO interface via:

```
http://192.168.100.19:8080
```

## 📈 Expected Results

- Access to AIO web interface
- Auto-deployment of subcontainers (db, redis, collabora, cron, etc.)
- Persistent storage on NFS shares

## 🛠 Troubleshooting

<table id="bkmrk-issue-cause-fix-next"><thead><tr><th>Issue</th><th>Cause</th><th>Fix</th></tr></thead><tbody><tr><td>Nextcloud fails to initialize</td><td>NFS permissions or export missing</td><td>Check `/etc/exports` and re-export</td></tr><tr><td>Upload limit too low</td><td>PHP or env limits</td><td>Check `NEXTCLOUD_UPLOAD_LIMIT` in compose file</td></tr><tr><td>AIO container won't start</td><td>Docker permissions</td><td>Ensure docker.sock is mounted read-only</td></tr></tbody></table>

## 📦 Final Notes

- All environment customization is handled via `docker-compose.yml`
- This method is clean, portable, and restart-safe
- Back up your NFS shares regularly via ZFS snapshot or rsync

## 🧾 Docker Compose File Used

Below is the exact `docker-compose.yml` configuration used to deploy Nextcloud AIO with NFS integration:

```yaml
version: "3.8"

volumes:
  nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer
  nextcloud_ncdata:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=192.168.100.11,nfsvers=4,soft,timeo=900,retrans=5,rw,noatime,nolock"
      device: ":/mnt/hdd-storage/nfs-nextcloud"

services:
  nextcloud:
    image: nextcloud/all-in-one:latest
    restart: unless-stopped
    container_name: nextcloud-aio-mastercontainer
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - nextcloud_ncdata:/mnt/ncdata
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 8080:8080
    environment:
      - APACHE_PORT=11000
      - APACHE_IP_BINDING=0.0.0.0
      - NEXTCLOUD_DATADIR=/mnt/ncdata
      - NEXTCLOUD_MEMORY_LIMIT=4096M
      - NEXTCLOUD_UPLOAD_LIMIT=50G
      - NEXTCLOUD_MAX_TIME=3600
      - NEXTCLOUD_ADDITIONAL_APKS=imagemagick ocrmypdf
      - NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS=imagick
      - TALK_PORT=3478
      - NEXTCLOUD_URL=https://cloud.mslspartners.com
      - SKIP_DOMAIN_VALIDATION=true
      - NEXTCLOUD_ADDITIONAL_CONFIG=\
          "trusted_proxies" => ["192.168.100.1"],\n\
          "forwarded_for_headers" => ["HTTP_X_FORWARDED_FOR"],\n\
          "overwrite.cli.url" => "https://cloud.mslspartners.com",\n\
          "overwritehost" => "cloud.mslspartners.com",\n\
          "overwriteprotocol" => "https",\n\
          "default_phone_region" => "US"

```

---

Created and maintained by **MSLS Partners LLC** 📚

Empowering IT with clear documentation and professional best practices.

Version 1.0 | Last Reviewed: May 2025