Why Nextcloud? Nextcloud provides a personal space to store, sync and share files across several devices, via a web interface and dedicated clients.
Why self-hosting? It keeps control over where data is stored, the update cycle and access rules. In exchange, availability, hardening, disk capacity, backups and restore testing must be handled independently.
🧩 Architecture implemented
  • Dedicated Ubuntu 24.04 VM for the service (VM205)
  • A Docker container for the Nextcloud application
  • A separate Docker container for MariaDB
  • Two Docker volumes separating application files and database
  • VM auto-start after priority services, then both containers resume
  • HTTPS publishing behind the shared reverse proxy (VM200)
🎯 Skills demonstrated
  • Operating a self-hosted application in a Proxmox VM
  • Nextcloud / MariaDB application separation
  • Persistence via Docker volumes
  • Cross-diagnostics: systemd · Docker · HTTP · the occ tool
  • Building a reproducible, sanitized proof after a reboot
🌐 Validated HTTPS publishing

Nextcloud is reachable at nextcloud.stephanemuraro.fr. The service keeps its own authentication while the reverse proxy (VM200) centralizes TLS termination and relays requests to the application VM.

Validated from an external network:
  • establishing the HTTPS connection
  • authentication
  • browsing files
  • uploading a file via the web interface
  • syncing via the desktop client
The prior diagnostic isolated two faulty application extensions, neutralized reversibly to restore the interface and then writes, without deleting data.
🔄 Reproducible proof — state after reboot

Run inside the VM, these commands automatically determine the container name and the published local port — so the proof does not depend on labels specific to the installation.

bash — status check
date --iso-8601=seconds
systemctl is-system-running
systemctl --failed --no-pager

nextcloud_container=$(
  sudo docker ps --filter ancestor=nextcloud --format '{{.Names}}' | head -n 1
)
nextcloud_port=$(
  sudo docker port "$nextcloud_container" 80/tcp | awk -F: 'NR == 1 {print $NF}'
)

sudo docker ps --format \
  'table {{.Image}}\t{{.Status}}' | awk 'NR == 1 || /nextcloud|mariadb/'
sudo docker exec -u www-data "$nextcloud_container" php occ status
curl -fsS "http://127.0.0.1:${nextcloud_port}/status.php"
sanitized excerpt — validation after host reboot
Horodatage : 2026-08-15T07:51:40+00:00
État système : running
Unités systemd en échec : 0

nextcloud   Up About an hour
mariadb     Up About an hour

installed: true
versionstring: 33.0.0
maintenance: false
needsDbUpgrade: false
productname: Nextcloud
Reading: occ status and the HTTP status endpoint confirm Nextcloud 33.0.0 installed, out of maintenance and with no pending database migration. The simultaneous presence of the Nextcloud and MariaDB containers after reboot demonstrates their automatic recovery.
Limits & open work:

Related pages

References & Sources

CategoryResourceURL
Official documentationNextcloud — Documentationdocs.nextcloud.com
Official documentationMariaDB — Documentationmariadb.org/documentation
Validated versionNextcloud 33.0.0 · VM Ubuntu 24.04 · Docker (app + MariaDB)—
LicenseNextcloud — AGPLv3 · MariaDB — GPLv2gnu.org/licenses/agpl-3.0
Content of this pageShared under CC BY-SA 4.0creativecommons.org/licenses/by-sa/4.0