Requisitos
- Apuntar un sub/dominio hacia nuestra IP pública mediante un registro A.
- Abrir los puertos 80 y 443 en el router y redirigirlos hacia la IP fija local de nuestro equipo servidor.
- Abrir los puertos 80 y 443 en Linux en el caso de tener activado el cortafuegos.
Si pretendemos prestar el servicio desde el ámbito doméstico, lo usual es que dispongamos de una IP dinámica, lo que hará que cambie de vez en cuando dejando nuestro equipo inaccesible desde internet. Si este es nuestro caso, podemos superar este problema haciendo uso de un servicio DDNS gratuíto como el de DuckDNS.
Instalación
Instalamos los paquetes necesarios:
Code: Select all
apt install docker.io docker-compose
Code: Select all
sudo systemctl enable --now docker
Code: Select all
sudo usermod -a -G docker $USER
Comprobamos que el servicio está corriendo y es accesible desde nuestro usuario:Reiniciamos Linux para que entre en vigor el comando anterior. ¡Atención!, agregar este tutorial a Marcadores y GUARDAR TODO antes de cerrar sesión.
Code: Select all
docker version
Code: Select all
mkdir -p ~/.docker/nextcloud-nginx-lets/proxy
Code: Select all
echo "version: '3'
services:
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_RANDOM_ROOT_PASSWORD=yes
env_file:
- var.env
app:
image: nextcloud:apache
depends_on:
- db
restart: always
volumes:
- nextcloud:/var/www/html
networks:
- proxy-tier
- default
environment:
- MYSQL_HOST=db
env_file:
- var.env
proxy:
build: ./proxy
restart: always
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: 'true'
volumes:
- certs:/etc/nginx/certs:ro
- vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- proxy-tier
ports:
- 80:80
- 443:443
letsencrypt-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
depends_on:
- proxy
restart: always
volumes:
- certs:/etc/nginx/certs
- vhost.d:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy-tier
volumes:
db:
nextcloud:
certs:
vhost.d:
html:
networks:
proxy-tier:" > ~/.docker/nextcloud-nginx-lets/docker-compose.yml
Code: Select all
echo "FROM jwilder/nginx-proxy:alpine
COPY uploadsize.conf /etc/nginx/conf.d/uploadsize.conf" > ~/.docker/nextcloud-nginx-lets/proxy/Dockerfile
Code: Select all
echo "client_max_body_size 1G;
proxy_request_buffering off;" > ~/.docker/nextcloud-nginx-lets/proxy/uploadsize.conf
Introducimos completo el siguiente comando para crear y añadir contenido al archivo "var.env" y editamos el valor de las variables:Podemos editar el valor "client_max_body_size 1G") que establece el tamaño máximo de archivo a subir. Por defecto es de 1GB.
Code: Select all
echo "MYSQL_DATABASE=NombreBaseDatos
MYSQL_USER=NombreUsuarioAdministrador
MYSQL_PASSWORD=ContraseñaUsuarioAdministrador
VIRTUAL_HOST=sub.dominio.tld
LETSENCRYPT_HOST=sub.dominio.tld
LETSENCRYPT_EMAIL=usuario@dominio.tld" > ~/.docker/nextcloud-nginx-lets/var.env
Si hemos introducido el anterior comando sin modificar sus valores, aún podemos editarlo con:Todos los valores deben ser ajustados a nuestro gusto o necesidad:
- MYSQL_DATABASE= Nombre de la base de datos que se creará en el primer inicio de Nextcloud.
- MYSQL_USER= Nombre del usuario administrador que usaremos para configurar Nextcloud.
- MYSQL_PASSWORD= Contraseña del usuario administrador que usaremos para configurar Nextcloud.
- VIRTUAL_HOST= URL de acceso a Nextcloud.
- LETSENCRYPT_HOST= URL para la cual Let's Encrypt expedirá el certificado. Debe coincidir con el valor de "VIRTUAL_HOST".
- LETSENCRYPT_EMAIL= Correo electrónico asociado al certificado.
Code: Select all
nano ~/.docker/nextcloud-nginx-lets/var.env
Code: Select all
sudo mkdir -p /mnt/particion/directorio/
Code: Select all
sudo chown www-data /mnt/particion/directorio/
Code: Select all
volumes:
db:
nextcloud:
driver: local
driver_opts:
type: none
device: /mnt/particion/directorio/
o: bind
certs:
vhost.d:
html:
Ejecución
Para ejecutar Nextcloud nos movemos al directorio que contiene el archivo "docker-compose.yml":
Code: Select all
cd ~/.docker/nextcloud-nginx-lets/
Code: Select all
docker-compose up -d
En el primer inicio Docker debe descargar los archivos "Dockerfile", construir las "imágenes" y lanzar los "contenedores", lo que puede durar alrededor de un minuto.
Comandos aplicables
- docker-compose up : Crea e inicia en primer plano los contenedores, volúmenes y redes especificados en "docker-compose.yml". Si las imágenes no existen, descarga los archivos "Dockerfile", construye las "imágenes" y lanza los "contenedores". Este modo provoca un volcado del log en la terminal que es muy útil para el diagnóstico de errores. Los contenedores se detienen tras cerrar la terminal o pulsar Control + C.
- docker-compose up -d : Crea e inicia en segundo plano los contenedores, volúmenes y redes especificados en "docker-compose.yml". Si las imágenes no existen, descarga los archivos "Dockerfile", construye las "imágenes" y lanza los "contenedores". Los contenedores siguen ejecutándose tras cerrar la terminal.
- docker-compose up -d --build : Inicia en segundo plano los contenedores, volúmenes y redes especificados en "docker-compose.yml" reconstruyendo las imágenes. Los contenedores siguen ejecutándose tras cerrar la terminal.
- docker-compose down : Detiene y elimina los contenedores y redes especificados en "docker-compose.yml", conservando las imágenes y volúmenes.
- docker system prune -a : Elimina todas las imágenes y redes no vinculadas a un contenedor, manteniendo los volúmenes para conservar los datos.
- docker volume prune : Elimina todos los volúmenes no vinculados a un contenedor. Se perderán todos los datos almacenados.
Configuración
Una vez lanzado Nextcloud y transcurridos un par de minutos para que se realicen todos los procedimientos iniciales, podemos acceder a su panel de control desde:
Code: Select all
https://sub.dominio.tld
Se nos pedirá un nombre de usuario y contraseña para la cuenta del administrador (ésta NO debe usarse para iniciar sesión desde los clientes). Usamos los mismos que especificamos en el archivo "var.env".
Si además del almacenamiento en la nube, queremos hacer uso de otras aplicaciones como sincronización de calendarios, mensajería, etc... dejamos marcada la casilla. Por último pulsamos el botón y esperamos a que acabe todo el proceso.
Ya sólo nos resta configurar Nextcloud a nuestro gusto y crear las cuentas de usuario standard que sean necesarias. Tras la instalación de los clientes en Linux, Windows, Android y/o iOS introducimos URL, usuario y contraseña e iniciamos sesión en nuestra nube privada.
Si reiniamos varias veces el servicio en poco tiempo, Let's Encrypt nos baneará durante algunos días el subdominio o incluso la IP.
Desinstalación
Para limpiar el sistema y devolverlo a su estado anterior, lanzamos consecutivamente los siguientes comandos:
Code: Select all
docker-compose down
Code: Select all
docker system prune -a
Code: Select all
docker volume prune
Code: Select all
sudo systemctl disable docker
Code: Select all
apt purge docker.io docker-compose