Difference between revisions of "NextCloud"
Jump to navigation
Jump to search
Rafahsolis (talk | contribs) (Created page with "=== Install with docker compose === docker-compose.yml:<syntaxhighlight lang="yaml"> version: '3.8' services: nextcloud: image: nextcloud:latest container_name: nex...") Tag: visualeditor |
(No difference)
|
Revision as of 19:51, 26 August 2025
Install with docker compose
docker-compose.yml:
version: '3.8'
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: unless-stopped
ports:
- 8080:80 # interno, solo para Caddy
volumes:
- /mnt/nextcloud/nextcloud:/var/www/html
- /mnt/nextcloud/data:/var/www/html/data
depends_on:
- db
- redis
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=secret
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=admin123
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.herrerosolis.com
- NEXTCLOUD_OVERWRITEHOST=cloud.herrerosolis.com
- NEXTCLOUD_OVERWRITEPROTOCOL=https
db:
image: postgres:15
container_name: nextcloud_db
restart: unless-stopped
volumes:
- /mnt/nextcloud/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=secret
redis:
image: redis:alpine
container_name: nextcloud_redis
restart: unless-stopped
volumes:
- /mnt/nextcloud/redis:/data
caddy:
image: greenpau/caddy-cloudflare:latest
container_name: nextcloud_caddy
restart: unless-stopped
ports:
- 443:443
volumes:
- /mnt/nextcloud/caddy/Caddyfile:/etc/caddy/Caddyfile
- /mnt/nextcloud/caddy/data:/data
- /mnt/nextcloud/caddy/config:/config
environment:
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
depends_on:
- nextcloud
networks:
default:
name: nextcloud_net
/mnt/nextcloud/caddy/Caddyfile:
cloud.herrerosolis.com {
reverse_proxy nextcloud:80
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
encode gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
}
}
Create subfolder structure
sudo mkdir -p /mnt/nextcloud/{nextcloud,data,db,redis,caddy/data,caddy/config}
sudo chown -R root:root /mnt/nextcloud
sudo chmod -R 755 /mnt/nextcloud
cd ${DOCKER_COMPOSE_DIRECTORY}
echo 'CLOUDFLARE_API_TOKEN=tu_token_de_cloudflare' > .env
Start NextCloud
docker compose up --detach
Assing file permissions
docker exec -it nextcloud chown -R www-data:www-data /var/www/html
Format Cadyfile
docker compose exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile
docker compose restart caddy
NextCloud Install Script
#!/bin/bash
set -e
echo "🔁 Deteniendo contenedores previos..."
docker compose down || true
echo "🧹 Borrando volúmenes de datos antiguos..."
sudo rm -rf /mnt/nextcloud/{db,data,nextcloud,redis,caddy/data,caddy/config}
echo "📁 Creando estructura de carpetas..."
sudo mkdir -p /mnt/nextcloud/{db,data,nextcloud,redis,caddy/data,caddy/config}
sudo chown -R $USER:$USER /mnt/nextcloud
echo "📄 Generando docker-compose.yml..."
cat > docker-compose.yml <<EOF
version: '3.8'
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: unless-stopped
ports:
- 8080:80
volumes:
- /mnt/nextcloud/nextcloud:/var/www/html
- /mnt/nextcloud/data:/var/www/html/data
depends_on:
- db
- redis
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=secret
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=admin123
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.herrerosolis.com
- NEXTCLOUD_OVERWRITEHOST=cloud.herrerosolis.com
- NEXTCLOUD_OVERWRITEPROTOCOL=https
db:
image: postgres:15
container_name: nextcloud_db
restart: unless-stopped
volumes:
- /mnt/nextcloud/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=secret
redis:
image: redis:alpine
container_name: nextcloud_redis
restart: unless-stopped
volumes:
- /mnt/nextcloud/redis:/data
caddy:
build:
context: .
dockerfile: Dockerfile.caddy
container_name: nextcloud_caddy
restart: unless-stopped
ports:
- 443:443
volumes:
- /mnt/nextcloud/caddy/Caddyfile:/etc/caddy/Caddyfile
- /mnt/nextcloud/caddy/data:/data
- /mnt/nextcloud/caddy/config:/config
environment:
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
depends_on:
- nextcloud
networks:
default:
name: nextcloud_net
EOF
echo "📄 Generando Dockerfile.caddy con plugin Cloudflare DNS..."
cat > Dockerfile.caddy <<EOF
FROM caddy:builder AS builder
RUN xcaddy build --with github.com/caddy-dns/cloudflare
FROM caddy:latest
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
EOF
echo "📄 Generando Caddyfile..."
cat > /mnt/nextcloud/caddy/Caddyfile <<EOF
cloud.herrerosolis.com {
reverse_proxy nextcloud:80
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
encode gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
}
}
EOF
echo "🔐 Añade tu token Cloudflare al archivo .env si no lo has hecho aún:"
if [ ! -f .env ]; then
echo "CLOUDFLARE_API_TOKEN=pon_aqui_tu_token" > .env
echo "✔️ Archivo .env creado. Edita y pon tu token Cloudflare."
else
echo "✔️ Archivo .env ya existe. Asegúrate de que el token sea correcto."
fi
echo "🚀 Levantando contenedores con build personalizado..."
docker compose up -d --build
echo "✅ Todo listo. Accede a https://cloud.herrerosolis.com"
Verify security config
https://cloud.herrerosolis.com/index.php/settings/admin/overview
Allow big file upload
php.ini:
upload_max_filesize = 2G
post_max_size = 2G
memory_limit = 1G
Backups
The important paths to backup are:
/mnt/nextcloud/db(PostgreSQL)/mnt/nextcloud/data(tus archivos)/mnt/nextcloud/nextcloud(archivos de Nextcloud + apps instaladas)/mnt/nextcloud/caddy(configuración SSL + Caddyfile)
Updates
docker compose pull
docker compose up -d