Google Drive, Dropbox, iCloud… còmodes, però les teves dades acaben en servidors d'altri. Nextcloud és l'alternativa de codi obert que et permet tenir el teu propi núvol, al teu servidor, sota el teu control. En aquest article veurem com muntar-lo amb Docker Compose en menys d'una hora, amb MariaDB com a base de dades (l'opció oficial recomanada) i Redis per accelerar la caché.
Què muntarem exactament
El stack complet té quatre contenidors que treballen junts:
- MariaDB 11.4: base de dades principal, recomanada per la documentació oficial de Nextcloud.
- Redis 7.2: caché en memòria per a sessions i bloqueig de fitxers. Millora notablement el rendiment.
- Nextcloud 29: l'aplicació principal amb el servidor web Apache inclòs.
- Cron: un segon contenidor de Nextcloud que executa les tasques periòdiques en segon pla (índexs, neteja, notificacions).
Requisits previs
Necessites Docker i Docker Compose instal·lats al servidor. Comprova que funcionin correctament:
docker --version
docker compose version
Pas 1 — Crear l'estructura de carpetes
Crea una carpeta per al projecte i una subcarpeta per a les dades dels usuaris:
mkdir -p ~/nextcloud/nextcloud-data
cd ~/nextcloud
L'estructura final serà:
nextcloud/
├── docker-compose.yml
├── .env
└── nextcloud-data/ ← fitxers dels usuaris (al host)
Pas 2 — El fitxer .env
El fitxer .env centralitza totes les variables sensibles. Mai pujis aquest fitxer a un repositori públic. Crea'l i edita els valors marcats amb ⚠️:
# Versions
NEXTCLOUD_VERSION=29-apache
MARIADB_VERSION=11.4
REDIS_VERSION=7.2-alpine
# MariaDB
MYSQL_ROOT_PASSWORD=canvia_root_pass # ⚠️
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
MYSQL_PASSWORD=canvia_db_pass # ⚠️
# Redis
REDIS_PASSWORD=canvia_redis_pass # ⚠️
# Compte admin de Nextcloud
NC_ADMIN_USER=admin
NC_ADMIN_PASSWORD=canvia_admin_pass # ⚠️
# URL i xarxa
NC_TRUSTED_DOMAINS=localhost
NC_PROTOCOL=http
NC_HTTP_PORT=8080
# Dades dels usuaris
LOCAL_DATA_PATH=./nextcloud-data
# Límits PHP
PHP_MEMORY_LIMIT=512M
PHP_UPLOAD_LIMIT=10G
Pas 3 — El docker-compose.yml
Crea el fitxer docker-compose.yml. Els healthcheck a MariaDB i Redis garanteixen que Nextcloud no arrenca fins que la base de dades estigui del tot llesta, evitant errors en el primer inici:
services:
db:
image: mariadb:${MARIADB_VERSION}
container_name: nextcloud-db
restart: unless-stopped
command: >
--transaction-isolation=READ-COMMITTED
--binlog-format=ROW
--innodb-file-per-table=1
--skip-innodb-read-only-compressed
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- nextcloud_net
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
redis:
image: redis:${REDIS_VERSION}
container_name: nextcloud-redis
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
networks:
- nextcloud_net
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 5s
retries: 5
nextcloud:
image: nextcloud:${NEXTCLOUD_VERSION}
container_name: nextcloud-app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- nextcloud_data:/var/www/html
- ${LOCAL_DATA_PATH}:/var/www/html/data
environment:
MYSQL_HOST: db
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
NEXTCLOUD_ADMIN_USER: ${NC_ADMIN_USER}
NEXTCLOUD_ADMIN_PASSWORD: ${NC_ADMIN_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: ${NC_TRUSTED_DOMAINS}
OVERWRITEPROTOCOL: ${NC_PROTOCOL}
OVERWRITECLIURL: ${NC_PROTOCOL}://${NC_TRUSTED_DOMAINS}
REDIS_HOST: redis
REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
PHP_MEMORY_LIMIT: ${PHP_MEMORY_LIMIT}
PHP_UPLOAD_LIMIT: ${PHP_UPLOAD_LIMIT}
networks:
- nextcloud_net
ports:
- "${NC_HTTP_PORT}:80"
cron:
image: nextcloud:${NEXTCLOUD_VERSION}
container_name: nextcloud-cron
restart: unless-stopped
depends_on:
- nextcloud
volumes:
- nextcloud_data:/var/www/html
- ${LOCAL_DATA_PATH}:/var/www/html/data
entrypoint: /cron.sh
networks:
- nextcloud_net
volumes:
db_data:
redis_data:
nextcloud_data:
networks:
nextcloud_net:
driver: bridge
Pas 4 — Primer arrencada
Amb els dos fitxers a lloc, aixeca els contenidors:
docker compose up -d
El primer cop triga uns 2-3 minuts perquè Docker descarrega les imatges i Nextcloud inicialitza la base de dades. Pots seguir el progrés en temps real:
docker compose logs -f nextcloud
Quan vegis la línia apache2 -D FOREGROUND als logs, Nextcloud ja és actiu. Obre el navegador a http://localhost:8080 i hauries de veure la pantalla de benvinguda.
Pas 5 — Primer accés i verificació
Entra amb l'usuari i contrasenya definits al .env. Un cop dins, verifica que Redis funciona correctament a Administració → Informació del sistema. A l'apartat "Memcache" hauries de veure el caché local i distribuït actius.
Comprova l'estat general dels contenidors:
docker compose ps
Els quatre serveis han d'aparèixer amb estat running.
Pas 6 — Comandes útils del dia a dia
Aturar el stack sense perdre dades:
docker compose down
Actualitzar Nextcloud a una versió nova (canvia la versió al .env i executa):
docker compose pull
docker compose up -d
Executar comandes d'administració amb occ, l'eina CLI de Nextcloud:
docker exec -u www-data nextcloud-app php occ status
docker exec -u www-data nextcloud-app php occ maintenance:mode --on
Passos següents recomanats
Amb el servidor funcionant, hi ha tres millores que val la pena fer aviat:
- HTTPS amb reverse proxy: afegir Nginx, Traefik o Caddy davant de Nextcloud per servir-ho amb certificat TLS. Imprescindible si el servidor és accessible des d'internet.
- Dominis de confiança: afegir la IP o el domini real a la variable
NC_TRUSTED_DOMAINSdel.envi reiniciar. - Còpies de seguretat: programar un script que faci
mysqldumpde la base de dades i comprimi la carpetanextcloud-data/periòdicament.
Reflexió final
En menys d'una hora tens un núvol privat funcional, amb la teva pròpia app de fotos, sincronització de fitxers, calendari i contactes. Les dades queden al teu servidor i no marxen a cap lloc. Per al dia a dia a casa o per a un entorn de treball petit, Nextcloud + Docker és una combinació sòlida que no requereix manteniment constant un cop configurat.