Aby ułatwić sobie automatyczny backup zdjęć z telefonu na swój własny serwer postanowiłem postawić własny serwer Nextcloud używając Docker Compose.

Konfiguracja jest dość prosta, wystarczy użyć poniższego pliku YAML:
services:
nextcloud_db:
image: mariadb:lts
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- /mnt/dane/container/nextcloud-mysql:/var/lib/mysql
environment:
- MYSQL_RANDOM_ROOT_PASSWORD=true
- MYSQL_PASSWORD=TWOJEHASLO
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
#ports:
# - 4406:3306
labels:
- com.centurylinklabs.watchtower.enable=true
nextcloud:
image: nextcloud:latest
restart: always
ports:
- 4080:80
volumes:
- /mnt/dane/container/nextcloud:/var/www/html
environment:
- TZ=Europe/Warsaw
- NEXTCLOUD_DATA_DIR=/var/www/html/data
- MYSQL_PASSWORD=TWOJEHASLO
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=nextcloud_db
- REDIS_HOST=redis
- PHP_MEMORY_LIMIT=6144M
- PHP_UPLOAD_LIMIT=6144M
- APACHE_BODY_LIMIT=0
# - VIRTUAL_HOST=nextcloud.sloniupl.eu
labels:
- com.centurylinklabs.watchtower.enable=true
cron:
image: rcdailey/nextcloud-cronjob
restart: always
network_mode: none
depends_on:
- nextcloud
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/localtime:/etc/localtime:ro
# - /mnt/dane/container/nextcloud/cronscripts/previewgenerator.sh:/cron-scripts/previewgenerator.sh:ro
environment:
- NEXTCLOUD_CONTAINER_NAME=nextcloud
- NEXTCLOUD_PROJECT_NAME=nextcloud
labels:
- com.centurylinklabs.watchtower.enable=true
redis:
image: redis:alpine
restart: always
labels:
- com.centurylinklabs.watchtower.enable=true
onlyoffice:
image: onlyoffice/documentserver:latest
restart: always
environment:
- TZ=Europe/Warsaw
- JWT_SECRET=TWOJSEKRETONLYOFFICE
#- JWT_IN_BODY=true
volumes:
- /mnt/dane/container/nextcloud-onlyoffice/document_data:/var/www/onlyoffice/Data
- /mnt/dane/container/nextcloud-onlyoffice/document_log:/var/log/onlyoffice
ports:
- 8043:80
labels:
- com.centurylinklabs.watchtower.enable=true
Poniżej szybkie objaśnienie niektórych funkcji:
- etykieta wykorzystywana przez watchtower do automatycznego sprawdzania i aktualizacji: labels: – „com.centurylinklabs.watchtower.enable=true”
- zmień wartość na swoje trudne hasło do bazy danych: TWOJEHASLO
- zmień TWOJSEKRETONLYOFFICE na secret który bedziesz konfigurował we wtyczce OnlyOffice w Nextcloud
- zmień na własne lokalizacje katalogów wartości wskazane w: volumes:
- nextcloud będzie dostępny na porcie 4080
Na koniec w Nginx Proxy Manager dodałem proxy host z dodatkową konfiguracją w sekcji advanced:

proxy_buffering off;
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/webfinger {
return 301 $scheme://$host/index.php/.well-known/webfinger;
}
location /.well-known/nodeinfo {
return 301 $scheme://$host/index.php/.well-known/nodeinfo;
}
location /ocm-provider {
return 301 $scheme://$host/index.php/ocm-provider;
}
proxy_buffering off; umożliwi ci uploadowanie plików większych niż 1GB używając NGINX Proxy Manager.
Gotowe 🙂
Linkografia:
https://techsparx.com/software-development/docker/self-hosting/nextcloud.html
Komentarz do “Nextcloud Docker Compose”
Witaj,
Mam podobną konfigurację z dwoma wyjątkami.
Nginx mam na oddzielnym dockerze.
Druga sprawa to Volumes, ja mam je odseparowane od dockera. Mam stworzone „pools” na truenas dedykowane do MySQL i Nextcloud. Jest trochę bezpieczniej w razie „W”. Docker sobie odtworzysz a pliki będa bezpieczne.