Azure NXT Maxscale — Nextcloud High Availability Infrastructure

Zero limits. One command. Infinite scale.

v2.5.3

The simplest way to deploy a production‑gradeNextcloud High Availability infrastructure

0 req/s
peak throughput
~0 users
SME config
0 error
1,900 requests
GitHub →
curl -fsSL https://raw.githubusercontent.com/oboeglen/Azure-NXT-Maxscale/main/deploy.sh \
  -o /tmp/deploy.sh && sudo bash /tmp/deploy.sh
vs manual installation

Why NXT Maxscale?

Docker Compose deploys containers. NXT Maxscale deploys a complete, secure, Nextcloud high availability infrastructure.

Weeks of work in one command

Wiring HAProxy, Galera, Redis Cluster, RustFS, Collabora and TLS manually takes weeks of configuration, network debugging, and documentation reading.

deploy.sh orchestrates everything — Docker installation, inter-service configuration, SSL certificates and healthchecks — with zero manual intervention.

High availability without expertise

Correctly configuring the Galera quorum, Redis Cluster slot distribution, and RustFS erasure coding requires advanced infrastructure expertise and weeks of testing.

Automatic failover in less than 10 seconds. A node goes down? HAProxy redistributes, Galera autoheal recovers, RustFS continues — no intervention needed.

Production security by default

TLS 1.3, HSTS 2-year preload, extended CSP, and WAF filtering are not part of a standard Docker Compose installation — each layer requires configuration and testing.

Every security layer is pre-configured and tested. Certbot renews certificates every 12 hours. Zero manual tuning required.

Hub-and-Spoke

Architecture

A single entry point. No SPOF on the base infrastructure*. Automatic failover < 10 seconds.

flowchart TD
    Internet(["Internet"]) -->|"HTTP 80 / HTTPS 443"| HAProxy
    Internet -->|"UDP+TCP 3478"| coturn["coturn\nTURN/STUN · host network"]

    HAProxy["HAProxy\nSSL · Load Balancer · Stats"]

    HAProxy -->|"/push"| npush["notify-push\nClient Push · WebSocket"]
    HAProxy --> nginx["nginx-next-01..N\nStatic files · FastCGI"]
    HAProxy --> collab["collabora-node1..N\nCollabora CODE · WOPI"]
    HAProxy --> wb["whiteboard-node1..N\nWhiteboard · WebSocket"]
    HAProxy -->|"wss://"| sig["spreed-signaling-01..N\nTalk HA · WebSocket"]

    nginx --> fpm["app-next-01..N\nNextcloud PHP-FPM 8.4"]

    fpm --> galera[("MariaDB Galera\nOdd-number nodes")]
    fpm --> redis["Redis Cluster\nMasters / Replicas"]
    fpm --> rustfs[("RustFS S3\nErasure coding")]

    wb --> redis_wb["redis-whiteboard\nStreams"]

    sig --> grpc["gRPC :9090\ntalk-net · cross-node relay"]
    grpc --> sig

    sig <-->|"pub/sub"| nats["NATS-01..N\nMessage broker · talk-net · cluster"]

    npush --> redis
    npush --> galera
    
Internet
HAProxy
SSL · Load Balancer · Stats
nginx-next-01..N
Static files · FastCGI
collabora-node1..N
Collabora CODE · WOPI
whiteboard-node1..N
Whiteboard · WebSocket
notify-push
Client Push · WebSocket
spreed-signaling-01..N
Talk · WebSocket
coturn
TURN/STUN · UDP 3478
app-next-01..N
Nextcloud PHP-FPM 8.4
gRPC :9090
talk-net · cross-node relay
redis-whiteboard
Streams
MariaDB Galera
Odd-number nodes
Redis Cluster
Masters / Replicas
RustFS S3
Erasure coding

All user files reside in RustFS S3 — a node failure is transparent to users · redis-whiteboard is isolated from the shared Redis cluster because Whiteboard uses Redis Streams for real-time synchronization, a mode incompatible with Nextcloud's session/cache/lock usage

* COTURN is an optional container (STUN fallback) and runs as a single node. As Talk HA is optional, this has no impact on the base Nextcloud infrastructure.

14 technologies

Tech Stack

HAProxy 2.8
Reverse proxy SSL · Load balancing · Stats
Nginx 1.27
Static files · FastCGI proxy
Nextcloud 33
Collaborative platform · WebDAV · Cron
PHP 8.4 FPM
Application runtime · OPcache · Multi-node
MariaDB Galera 11.4
Synchronous replication · Quorum · Autoheal
Redis 7.4
Sessions · Cache · File locking
RustFS S3
Object storage · Distributed erasure coding
Collabora CODE
Writer · Calc · Impress collaborative
Docker Compose
Orchestration · Health · Deployment
Let's Encrypt
SSL certificates · Auto-renewal
Notify Push
WebSocket push · Real-time client sync
coturn 4.6
TURN/STUN relay · Nextcloud Talk
spreed-signaling
Talk HA · WebSocket signaling N nodes
NATS
Pub/sub message broker · Talk cross-node

* Coturn, spreed-signaling and NATS are optional — enable Talk HA backend support during deployment to activate them.

Features

High Availability

  • Automatic failover < 10 seconds
  • MariaDB Galera multi-node quorum
  • Redis Cluster 3 masters + 3 replicas
  • Distributed RustFS erasure coding
  • Talk HA — multi-node signaling

Hardened Security

  • TLS 1.2+ (1.3 preferred), ECDHE + AES-GCM + CHACHA20
  • HSTS 2 years + includeSubDomains + preload
  • Extended CSP, built-in WAF filtering
  • Sensitive paths blocked (403)
  • Anti-Slowloris, dangerous methods filtered
  • Security audit 91/100 — independent assessment

Validated Performance*

  • 231 req/s under 150 simultaneous connections
  • 0 errors over 1,900 requests under stress
  • P99 login: 862 ms · P95 status: 365 ms
  • ~2,500 active users (SME config★)
  • OPcache, optimized previews, 5-min cron

Full Collaboration

  • Nextcloud 33 — files, calendar, contacts
  • Collabora CODE — Writer, Calc, Impress
  • Nextcloud Talk — video conferencing & messaging
  • Real-time collaborative Whiteboard
  • Native WebDAV, CalDAV, CardDAV

* Performance results depend on the infrastructure configuration used during benchmarks. They also vary depending on your company's internet connection and the hardware chosen (disks, processor).

Interface

Preview

Nextcloud interface deployed with NXT Maxscale — custom theme and integrated branding.

Customized Nextcloud login page
Login page
Nextcloud dashboard — Azure NXT Maxscale high availability infrastructure
Dashboard
Nextcloud Files — Azure NXT Maxscale
Files
Collabora Online — Azure NXT Maxscale
Collabora
Nextcloud Talk — Azure NXT Maxscale
Talk
Nextcloud Whiteboard — Azure NXT Maxscale
Whiteboard
RustFS Console — Azure NXT Maxscale
RustFS Console
HAProxy Stats — Azure NXT Maxscale
HAProxy Stats

The branding shown is provided as an example. Logo, colors, and instance name are fully customizable at any time from the Nextcloud administration interface, to match your organization's visual identity.

6 FPM · 5 Galera · 6 Redis · RustFS 4×2 · 3 Collabora · 3 Whiteboard

Benchmarks

Raw load

EndpointVUsThroughputP95P99Err.
/status.php20120 req/s365 ms388 ms0/200
/login2044 req/s697 ms862 ms0/200
/status.php100247 req/s365 ms375 ms0/500
Max stress150231 req/s959 ms1,059 ms0/600

SME simulation 500 DAU

Scenarioavgp(95)SLA
Browser sessions74 ms155 ms< 4 s
WebDAV sync862 ms1,980 ms< 3 s
Collabora WOPI959 ms2,160 ms< 5 s
Whiteboard904 ms2,060 ms< 5 s

k6 v0.55 · 34 VUs · 3,911 requests · 0 HTTP 5xx errors · 38 timeouts (0.97%)

Test · SME · Enterprise

Recommended configurations

ProfileFPMDB GaleraRedisCPURAMUsers
🧪 Test / dev1–210 (APCu)4 cores8–16 GB< 100
🏢 Small team3368 cores22–28 GB~1,450
🏭 SME ★65612 cores32–40 GB~2,450
🏦 Enterprise9–125–76–816–24 cores48–64 GB3,000–3,600
🏙️ Large organization15–207832+ cores64–80 GB+4,000
Add & remove nodes

Scaling

Re-running deploy.sh on an existing infrastructure displays a menu: quick update, add / remove nodes, or full redeployment. Docker volumes remain intact, .env is preserved.

Behavior per service

ServiceScale-upScale-downNotes
Nextcloud FPM + nginx FPM / nginx pairs added or removed together
MariaDB Galera Odd number required · automatic SST on add
Redis Cluster Even delta required · automatic cluster integration
Collabora CODE Binary patch reapplied on new nodes
Whiteboard
Talk HA (spreed-signaling) gRPC :9090 cross-node relay · coturn optional (STUN fallback)
RustFS ⚠️ Scale-up/down not supported in beta · full redeploy required

⚠ Scale-up and scale-down functions for RustFS will be available once RustFS releases a stable version with production-ready features fully implemented.

Constraints

ConstraintDetail
Redis — even deltaEach batch = 1 master + 1 replica
Redis — minimum 63 masters + 3 replicas required
Galera — odd numberQuorum required for election
RustFS — scale-upNot supported in beta (v1.0.0-beta.6) · full redeploy required
RustFS — scale-downNot supported · full redeploy required
PasswordsNever regenerated during scaling · .env preserved

Persistence across restarts

FileContents
.envPasswords, RustFS paths, modes
.rustfs-poolsRustFS pool history
/tmp/.nxt-maxscale-config.envCached deploy.sh responses

If the /tmp/ cache is absent on reboot, deploy.sh automatically rebuilds the configuration from .env and the container state.

vs Nextcloud Enterprise

Comparison

Nextcloud Enterprise charges for every advanced feature — module by module, 100 users minimum. NXT Maxscale delivers them all, for zero euros, from the very first user.

Criterion Nextcloud Standard Nextcloud Premium Nextcloud Ultimate NXT Maxscale
Price / user / year € 71,29 € 104,99 € 204,75 €0 — Free
Minimum users 100 min. 100 min. 100 min. None
High availability ✓ Included support ✓ Included support ✓ Automatic
Talk HA (High Performance Backend) Optional (extra costs) Optional (extra costs) Optional (extra costs) ✓ Included
Push Notifications HA (Notify Push) ✓ Enterprise · Manual ✓ Enterprise · Manual ✓ Enterprise · Manual ✓ Automatic
Collabora CODE Optional (extra costs) Optional (extra costs) Optional (extra costs) ✓ Included · Unlimited
Collaborative Whiteboard Optional (extra costs) ✓ Included
WAF & hardened security ✓ HAProxy built-in
Automatic SSL ✓ Let's Encrypt · 12h
LDAP / Active Directory ✓ Enterprise ✓ Enterprise ✓ Enterprise ✓ Included
SSO — SAML / OIDC ✓ Enterprise ✓ Enterprise ✓ Enterprise ✓ Included
Groupware
Calendar · Contacts · Deck · Mail
Optional (extra costs) Optional (extra costs) Optional (extra costs) ✓ Included
Nextcloud Assistant (AI) ✓ Included
Tables ✓ Included
Notes ✓ Included
Forms ✓ Included
Data sovereignty ✓ Your servers
Global Scale Optional (extra costs) Optional (extra costs) ✓ Included
Email support Business hours Extended business hours Up to 24/7 ✓ 24/7
Reaction time 2 business days 1 business day 1h / 4h / 12h / 24h ✓ Upon receipt of request
License AGPLv3 AGPLv3 AGPLv3 MIT — Free / Open

Nextcloud Enterprise pricing as of May 29, 2026 — prices net of VAT, volume-tiered (100 users minimum required), yet remain significant even at scale. NXT Maxscale is an independent open source project, not affiliated with Nextcloud GmbH.

In development · Always free

Roadmap

Features under development — all will be integrated into deploy.sh at zero cost, no subscription, no user limit, no waiting list.

Local AI
On-premise assistant · Nextcloud AI · Local LLM
eIDAS Signature
EU e-signature · Legal · Archive
OnlyOffice
Office suite alternative · Optional
Ceph
Distributed storage · S3 · CephFS · RBD
Proxmox VE
Dedicated script · VM auto-provisioning

FAQ

The most frequently asked questions before deploying.

Yes, entirely. NXT Maxscale is released under the MIT licence — free for commercial and personal use, with no subscription, no user limit, and no hidden fees. You self-host: the only cost is your server infrastructure. The source code is public on GitHub and auditable by anyone.

Yes. The Test / dev profile (1–2 FPM nodes, 1 Galera node, APCu cache) runs from 8 GB of RAM on a single machine. Multi-node high availability is optional: deploy.sh configures the profile based on your interactive answers and saves the configuration for each subsequent run.

The failover is transparent to users. HAProxy redistributes traffic in less than 10 seconds. The Galera quorum maintains data consistency, galera-autoheal automatically restarts out-of-sync nodes, the Redis cluster tolerates the loss of one node per hash slot, and RustFS continues reads during recovery of the failed node via erasure coding.

Let's Encrypt certificates are generated automatically by deploy.sh (HTTP-01 or TLS-ALPN-01 challenge) and renewed every 12 hours by the certbot service. A healthcheck monitors expiry at 30 days. HAProxy enforces TLS 1.2 minimum with TLS 1.3 preferred, ECDHE + AES-GCM + CHACHA20 cipher suites, and no-tls-tickets for Perfect Forward Secrecy.

No. deploy.sh automatically applies a binary patch on each coolwsd node that replaces the home_mode limits (20 connections, 10 documents) with INT_MAX. The patch is preserved across restarts and reapplied on updates via deploy.sh. If the Collabora version changes and the pattern is not found, the patch is skipped with a warning — the stack remains fully functional.

All files are stored in RustFS using distributed erasure coding — Nextcloud local storage is only used for temporary data. Bucket versioning is enabled automatically at installation. In production, each DATA{N} path must point to a separate physical disk for fault tolerance to be effective.

Re-run deploy.sh: if an existing infrastructure is detected, the script offers three options — quick update (pull new images + recreate containers), add / remove nodes, or full redeployment. The Collabora patch is reapplied automatically. Check the CHANGELOG before each major update.

Re-run deploy.sh and choose add / remove nodes. Docker volumes and the .env file are preserved — no data loss. Each service has its own constraints: Galera requires an odd number of nodes, Redis requires an even delta (1 master + 1 replica per batch), RustFS scale-up and scale-down are not supported in beta — full redeploy required.

NXT Maxscale supports the Nextcloud Talk High Performance Backend (HPB) as an optional component: spreed-signaling nodes for WebSocket high availability, gRPC :9090 for cross-node relay, NATS as pub/sub message broker for cross-node signaling, and coturn 4.6 for TURN/STUN relay. deploy.sh asks during the interactive configuration whether you want to deploy Talk HA — it is not required to run the core Nextcloud infrastructure. When enabled, all services are configured automatically. Benchmarks show 100 ms p(95) end-to-end WebSocket latency on the full stack.

Critical data to back up: RustFS data paths (all user files, stored with erasure coding), MariaDB Galera Docker volumes (database), Nextcloud config volume, and the deployment files (.env, .rustfs-pools). Recommended methods: VM snapshots, RustFS sync to external storage via rclone or aws s3 sync, MariaDB dumps, Docker volume archives. Always test restoration in a staging environment before relying on backups in production.

91/100 — Very good. All critical areas are secured: TLS 1.3 with post-quantum key exchange (X25519MLKEM768), HSTS 2-year preload with includeSubDomains, comprehensive security headers, HAProxy WAF filtering (TRACE/DEBUG/CONNECT blocked, common attack paths returning 403), no sensitive port exposed externally, secure cookies, and response header removal. Minor findings (4 low, 1 medium): version disclosure on /status.php and /api/v1/welcome, RustFS console publicly reachable (credentials required — disable when unused), coturn without TLS, no rate limiting at reverse proxy level, CSP not enforced on Collabora and Whiteboard subdomains — none are blocking for production use.

Deployment

The automated script handles the entire deployment: system verification, Docker installation, interactive configuration, Let's Encrypt SSL certificates, deployment, and health checks.

curl -fsSL https://raw.githubusercontent.com/oboeglen/Azure-NXT-Maxscale/main/deploy.sh \
  -o /tmp/deploy.sh && sudo bash /tmp/deploy.sh
Manual mode — 5 steps
  1. Clone the repository: git clone https://github.com/oboeglen/Azure-NXT-Maxscale
  2. Copy .env.example.env and fill in all values
  3. Generate Let's Encrypt SSL certificates via Certbot
  4. Create RustFS data directories
  5. Launch: docker compose up -d
Before deployment — 3 DNS subdomains configured Ports 80 and 443 open x86_64 architecture

Prerequisites

Sizing

Server sizing must be adapted to the expected storage space and number of users. RustFS node scale-up is not supported in the current beta — plan storage capacity upfront at deployment time.

See recommended configurations →

Supported systems

Debian 11 / 12 / 13 Ubuntu 22.04 / 24.04 RHEL / Rocky Linux 8 / 9 AlmaLinux 8 / 9

x86_64 architecture required — Docker & Compose installed automatically

Open Source · MIT

License & Contribution

MIT License

Free for commercial and personal use, modifiable and redistributable without restriction. Attribution required.

Read the license →
Contribute

Fork the project, open an issue, or submit a pull request. All contributions are welcome.

View on GitHub →