Changes

Jump to navigation Jump to search
6,626 bytes added ,  26 August
Created page with "=== Install with docker compose === docker-compose.yml:<syntaxhighlight lang="yaml"> version: '3.8' services: nextcloud: image: nextcloud:latest container_name: nex..."
=== Install with docker compose ===
docker-compose.yml:<syntaxhighlight lang="yaml">
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

</syntaxhighlight>/mnt/nextcloud/caddy/Caddyfile:<syntaxhighlight lang="json">
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"
}
}

</syntaxhighlight>

==== Create subfolder structure ====
<syntaxhighlight lang="bash">
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
</syntaxhighlight><syntaxhighlight lang="bash">
cd ${DOCKER_COMPOSE_DIRECTORY}
echo 'CLOUDFLARE_API_TOKEN=tu_token_de_cloudflare' > .env
</syntaxhighlight>

==== Start NextCloud ====
<syntaxhighlight lang="bash">
docker compose up --detach
</syntaxhighlight>

==== Assing file permissions ====
<syntaxhighlight lang="bash">
docker exec -it nextcloud chown -R www-data:www-data /var/www/html
</syntaxhighlight>

==== Format Cadyfile ====
<syntaxhighlight lang="bash">
docker compose exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile
docker compose restart caddy
</syntaxhighlight>

=== NextCloud Install Script ===
<syntaxhighlight lang="bash">
#!/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"

</syntaxhighlight>

== Verify security config ==
https://cloud.herrerosolis.com/index.php/settings/admin/overview

=== Allow big file upload ===
php.ini:<syntaxhighlight lang="ini">
upload_max_filesize = 2G
post_max_size = 2G
memory_limit = 1G

</syntaxhighlight>

== Backups ==
The important paths to backup are:

* <code>/mnt/nextcloud/db</code> (PostgreSQL)
* <code>/mnt/nextcloud/data</code> (tus archivos)
* <code>/mnt/nextcloud/nextcloud</code> (archivos de Nextcloud + apps instaladas)
* <code>/mnt/nextcloud/caddy</code> (configuración SSL + Caddyfile)

<br />

== Updates ==
<syntaxhighlight lang="bash">
docker compose pull
docker compose up -d
</syntaxhighlight>

Navigation menu