Nextcloud in Docker
Mit folgendem Compose Script installiere ich standardmäßig Nextcloud in einer Docker-Umgebung:
services:
nextcloud_db:
image: mariadb:11.4
mem_limit: 512M
container_name: 40_Nextcloud_DB
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- /docker/40_Nextcloud/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=Ma8uiY4aumND3y0vwshhbWFN2mfaZM
- MYSQL_PASSWORD=7T4622O9ZaaF6m9UAUySF7dsdaKb7s
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud_user
- MARIADB_AUTO_UPGRADE=1
networks:
nextcloud-nw:
ipv4_address: 172.18.40.11
nextcloud_redis:
image: redis:alpine
mem_limit: 2048M
container_name: 40_Nextcloud_Redis
hostname: nextcloud-redis
restart: unless-stopped
command: redis-server --requirepass dNxKJMp6UFRwesDnuYprWkH310IDBf # Redis Passwort eingeben
networks:
nextcloud-nw:
ipv4_address: 172.18.40.12
cron_job:
image: nextcloud:apache
mem_limit: 512M
container_name: 40_Nextcloud_Cronjob
restart: always
volumes:
- /docker/40_Nextcloud/data:/var/www/html
entrypoint: /cron.sh
depends_on:
- nextcloud_db
- nextcloud_redis
networks:
nextcloud-nw:
ipv4_address: 172.18.40.13
nextcloud:
image: nextcloud:latest
mem_limit: 4096M
container_name: 40_Nextcloud
restart: always
links:
- nextcloud_db
- nextcloud_redis
volumes:
- /docker/40_Nextcloud/data:/var/www/html
environment:
- MYSQL_PASSWORD=7T4622O9ZaaF6m9UAUySF7dsdaKb7s
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud_user
- MYSQL_HOST=nextcloud_db
- REDIS_HOST=nextcloud_redis
- REDIS_HOST_PASSWORD=dNxKJMp6UFRwesDnuYprWkH310IDBf
- OVERWRITEPROTOCOL=https
- OVERWRITECLIURL=https://nextcloud.example.de
- OVERWRITEHOST=nextcloud.example.de
- NEXTCLOUD_INIT_HTACCESS=true
- PHP_MEMORY_LIMIT=4G
- PHP_UPLOAD_LIMIT=4G
healthcheck:
test: curl --fail http://172.18.40.14 || exit 1
interval: 60s
retries: 5
start_period: 20s
timeout: 10s
ports:
- "11280:80" # HTTP Port
networks:
nextcloud-nw:
ipv4_address: 172.18.40.14
clamav:
image: clamav/clamav:unstable
mem_limit: 1024M
container_name: 40_Nextcloud-AV
volumes:
- /docker/40_Nextcloud/data:/var/www/html/data
- /docker/40_Nextcloud/av:/var/lib/clamav
networks:
nextcloud-nw:
ipv4_address: 172.18.40.15
restart: always
networks:
nextcloud-nw:
driver: bridge
ipam:
config:
- subnet: 172.18.40.0/24
gateway: 172.18.40.1
Für den Reverse Proxy verwende ich normalerweise den nginx Proxy Manager oder Zoraxy.
Nach der Installation von Nextcloud sollten noch ein paar standardmäßige Einstellungen gesetzt werden wie z. B. HSTS oder das Wartungsfenster usw.
docker exec -u www-data 40_Nextcloud bash -c \
"echo \"\\\$CONFIG['default_phone_region'] = 'DE';\" >> /var/www/html/config/config.php"
docker exec -u www-data 40_Nextcloud php /var/www/html/occ maintenance:repair --include-expensive
docker exec -u www-data 40_Nextcloud php /var/www/html/occ db:add-missing-indices
docker exec -u www-data 40_Nextcloud bash -c \
"echo \"\\\$CONFIG['maintenance_window_start'] = 2;\" >> /var/www/html/config/config.php && \
echo \"\\\$CONFIG['maintenance_window_duration'] = 2;\" >> /var/www/html/config/config.php"
docker exec -u www-data 40_Nextcloud bash -c \
"echo \"\\\$CONFIG['trusted_proxies'] = ['10.25.210.34'];\" >> /var/www/html/config/config.php"
Ein häufiges Problem ist z.B. wenn Anwender ihren TOTP Code verlieren. So können sie diesen zurücksetzen. Ersetzen Sie den Benutzernamen entsprechend:
docker exec -u www-data 40_Nextcloud php /var/www/html/occ twofactorauth:disable julian totp
Für den Fall das Nextcloud mit einer Firewall eingeschränkt wird:
docker exec -u www-data 40_Nextcloud bash -c \
"echo \"\\\$CONFIG['has_internet_connection'] = 'true';\" >> /var/www/html/config/config.php"
Löschen aller Logs:
docker exec -u www-data 40_Nextcloud truncate /var/www/html/data/nextcloud.log --size 0
Wenn clamav mit benutzt wird, dann muss dies noch über die Antivirus-App in Nextcloud aktiviert werden:

An sich wird empfohlen, den clamav Container mit mindestens 4 GB Arbeitsspeicher in einem produktiven Umfeld zu verwenden.

Abschließend mit einer EICAR Testdatei den Virenschutz testen, https://www.eicar.org/download-anti-malware-testfile/#top Es kann sein, dass ihr den AV von eurem PC zwischenzeitlich deaktivieren müsst, damit der PC die Testdatei nicht löscht.