The project's README from github.com/nextcloud/all-in-one. As one markdown file: README.md.
[!NOTE] Nextcloud AIO is actively looking for contributors. See the forum post.
The official Nextcloud installation method. Nextcloud AIO provides easy deployment and maintenance with most features included in this one Nextcloud instance.
Included are:
ffmpeg, smbclient and nodejs are included by default*.dedyn.io) can be registered directly from the AIO interface — no external domain needed| First setup | After installation |
|---|---|
flowchart TB
%% ── Styles ───────────────────────────────────────────────────────────────────
classDef user fill:#FFF3CD,stroke:#F0AD4E,color:#333
classDef master fill:#E8D5F5,stroke:#9B59B6,color:#222
classDef core fill:#D6EAF8,stroke:#2E86C1,color:#222
classDef opt fill:#D5F5E3,stroke:#27AE60,color:#222
classDef community fill:#FDEBD0,stroke:#E67E22,color:#222
classDef access fill:#EAFAF1,stroke:#1E8449,color:#222
%% ── Top row: people ─────────────────────────────────────────────────────────
YOU(["🧑💻 Admin\n(You)"]):::user
ENDUSER(["🧑🤝🧑 Users\n(family / team)"]):::user
%% ── Everything that runs inside AIO ─────────────────────────────────────────
subgraph AIO[" 🐳 Nextcloud AIO "]
MC(["🧠 Mastercontainer\n─────────────────────────\n▸ AIO interface :8080 / :8443\n▸ Manages & updates containers\n▸ Handles backups"]):::master
subgraph CORE[" 📦 Core Stack (auto-started) "]
PROXY(["🔀 Apache\nProxy & HTTPS"]):::core
NC(["☁️ Nextcloud\nApp Server"]):::core
DB(["🗄️ PostgreSQL\nDatabase"]):::core
CACHE(["⚡ Redis\nCache"]):::core
PUSH(["🔔 Notify Push\nReal-time sync"]):::core
end
subgraph OPT[" 🧩 Optional Built-in Containers (enable in AIO interface) "]
COLLA(["📄 Nextcloud Office"]):::opt
EO(["📄 EuroOffice\nDocument Server"]):::opt
TALK(["🎙️ Talk\nVideo & Voice calls"]):::opt
TALKREC(["🎬 Talk Recording"]):::opt
FTS(["🔎 Full-text Search\n(Elasticsearch)"]):::opt
IMAG(["🖼️ Imaginary\nImage previews"]):::opt
CLAM(["🦠 ClamAV\nAntivirus"]):::opt
WB(["🖊️ Whiteboard"]):::opt
end
COMM(["🌍 Community Containers\n──────────────────────\n30+ optional add-ons\nSee community-containers/"]):::community
click COMM "https://github.com/nextcloud/all-in-one/tree/main/community-containers#community-containers" "Browse community containers"
end
%% ── Result node (outside AIO) ────────────────────────────────────────────────
NC_URL(["🌐 https://your-domain.com\n✅ Nextcloud — ready to use!"]):::access
%% ── Flows ────────────────────────────────────────────────────────────────────
YOU -->|"① open :8080 or :8443 in browser"| MC
MC -->|"② auto-starts & wires up"| CORE
MC -. "③ enable in AIO interface" .-> OPT
MC -. "④ add via AIO interface" .-> COMM
PROXY --> NC
NC --- DB
NC --- CACHE
NC --- PUSH
OPT -->|"integrate with"| NC
COMM -.->|"integrate with"| NC
CORE -->|"⑤ stack is ready!"| NC_URL
ENDUSER -->|"⑥ browser / app"| NC_URL
YOU -->|"⑥ use normally"| NC_URL
The steps below are written for Linux. For platform-specific guidance see:
[!IMPORTANT]
These instructions assume there is no existing web server or reverse proxy (for example Apache, Nginx, Caddy, or Cloudflare Tunnel) that you intend to place in front of AIO. If you plan to run AIO behind an existing web server or reverse proxy, follow the AIO reverse proxy documentation: Reverse proxy docs
You're encouraged to skim the attached FAQ. While we've tried to make things straightforward, Nextcloud is a large and flexible platform. Reading the FAQ will save you time, particularly if edge cases come up.
[!TIP]
Don't worry about getting everything perfect on the first try — test deployments are cheap and disposable.
[!WARNING]
Snap-based Docker installations are not supported. Make sure you are not using a snap-based Docker installation (generally only applicable to Ubuntu). To check, run:sudo docker info | grep "Docker Root Dir" | grep "/var/snap/docker/"If you see the following output:
/var/snap/docker/you should migrate to a standard Docker installation and remove the snap-based package before proceeding: Install Docker on Ubuntu.
⚠️ To avoid losing data or interrupting services, only remove the Docker snap after you are certain you're not running any existing containers in it.
Consult the official Docker documentation or other guides for instructions on migrating existing containers. Once you are certain it's safe, remove the snap-based Docker installation with:
sudo snap remove docker
If you need IPv6 support, enable it by following: Docker IPv6 support for AIO
AIO uses a special mastercontainer to orchestrate the various pieces of the Nextcloud stack. To start AIO, launch the mastercontainer with the command below:
# For Linux and without a web server or reverse proxy already in place:
sudo docker run \
--init \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 80:80 \
--publish 8080:8080 \
--publish 8443:8443 \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
ghcr.io/nextcloud-releases/all-in-one:latest
sudo docker run — starts a new Docker container. Omit sudo if your user is in the docker group. --init — runs an init process inside the container to handle zombie processes. --sig-proxy=false — prevents Ctrl+C in the attached terminal from stopping the container. --name nextcloud-aio-mastercontainer — the container name. Do not change this name; mastercontainer updates rely on it. --restart always — ensures the container restarts automatically with the Docker daemon. --publish 80:80 — publishes container port 80 on host port 80 (used for ACME http-challenge when obtaining certificates, used for for the AIO-interface running inside the mastercontainer). Not required if you run AIO behind a reverse proxy.--publish 8080:8080 — publishes the AIO interface (self-signed certificate) on host port 8080. You may map a different host port if 8080 is in use (e.g. --publish 8081:8080). --publish 8443:8443 — publishes the AIO interface with a valid certificate on host port 8443 (requires ports 80 and 8443 to be reachable and a domain pointing to your server). Not required if you run AIO behind a reverse proxy. --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config — stores mastercontainer configuration in the named Docker volume. Do not change this volume name; built-in backups depend on it. --volume /var/run/docker.sock:/var/run/docker.sock:ro — mounts the Docker socket (read-only) so the mastercontainer can manage other containers. On Windows/macOS or when using rootless Docker, this path may need adjustment; see the platform-specific docs. If you change the socket path, also set WATCHTOWER_DOCKER_SOCKET_PATH accordingly. If you prefer not to expose the socket, see the manual-install documentation: Manual install without docker socket access ghcr.io/nextcloud-releases/all-in-one:latest — the mastercontainer image. Additional options can be set with environment variables (for example --env NEXTCLOUD_DATADIR="/mnt/ncdata" to change Nextcloud's datadir on first startup). See the Customization section and example compose file: compose.yaml for more options.
[!TIP] If you want Nextcloud’s data directory in a different location than the default Docker volume, see "How to change the default location of Nextcloud's Datadir" in this README: How to change the default location of Nextcloud's Datadir
[!NOTE] For production usage (and ease of upgrades and changes), we suggest using the example Compose file rather than
docker run.
https://192.168.5.5:8080
[!CAUTION] Use an IP address (not a domain) when accessing the AIO interface on port 8080. Accessing via a domain may work temporarily but is likely to break later due to HSTS.
Port 8080 uses a self-signed certificate that you must accept in your browser.
It is also possible to obtain a valid certificate automatically if your firewall/router forwards ports 80 and 8443 and you point a domain to your server. In that case, access the AIO interface using the dedicated port for this purpose (8443), for example:
https://your-domain-that-points-to-this-server.tld:8443
3478/TCP and 3478/UDP in your firewall/router for the Talk (TURN) container.[!TIP] Don't have a domain yet? AIO can register a free dynamic-DNS subdomain under
dedyn.iofor you via deSEC — no external setup needed. Look for the "Don't have a domain? Get a free one from deSEC" section on the AIO interface when you are asked to enter your domain. AIO will automatically register the domain, keep the DNS record up to date, and enable the Caddy community container as a reverse proxy as well as the dnsmasq container for local DNS resolution.