Nextcloud - личное облако с галереей, проверкой почты, онлайн редактированием документов, прослушиванием аудио и радио, и т. д. Демо можно посмотреть здесь. Клон OwnCloud, пробовал вначале и его - претензий нет, но тут приложений чутка больше, как мне показалось.

version: '3.7'

services:
  nextcloud:
    image: nextcloud:18.0.3-apache
    container_name: nextcloud
    restart: unless-stopped
    depends_on:
      - postgres
    ports:
      - '8080:80'
    volumes:
      - ./nextcloud:/var/www/html:rw
    logging:
      driver: json-file
      options:
        max-size: 100m

  postgres:
    image: postgres:11.7-alpine
    container_name: postgres
    restart: unless-stopped
    networks:
      - nextcloud
    volumes:
      - ./postgres:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=94dbd6b2-bd9f-4867-99af-37f8e4444640
    logging:
      driver: json-file
      options:
        max-size: 100m

Заметки

  1. Пробовал обновиться с 16.0.4.1 до 18.0.3 через 17.0.5 - поломалось всё. Переустанавливал и закидывал назад файлы предварительно скачав их себе из ./nextcloud/data/username/files. Назад забросил используя синхронизацию через клиентское приложение.
  2. Admin не удаляется через UI. Я создал себе аккаунт, а потом захотел удалить стандартный так как считаю, что аккаунты всегда должны быть именными, никакой шары. Удалить можно так:
sudo docker-compose exec -u www-data nextcloud php occ user:delete admin
  1. Для правильной работы WebDAV, CalDAV нужно настроить перенаправление, если перед Nextcloud есть прокси. В моём случае HAproxy.
global
	log 127.0.0.1 local0
	stats socket /var/run/haproxy.sock mode 660 level admin expose-fd listeners
	stats timeout 30s
	user root
	group root
	daemon
	maxconn	4096
	nbproc 1
	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private
	# general SSL config
	ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
	ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tlsv12 no-tls-tickets
	tune.ssl.default-dh-param 4096
	ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
	ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tlsv12 no-tls-tickets

defaults
	log	global
	mode	http
	option	http-buffer-request
	option	httplog
	option	dontlognull
	option forwardfor
	timeout connect 5s
	timeout client  25s
	timeout server  25s
	timeout tunnel        3600s
	timeout http-keep-alive  1s
	timeout http-request    15s
	timeout queue           30s
	timeout tarpit          60s
	compression algo gzip
	compression type text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/xml application/json
	errorfile 400 /usr/local/etc/haproxy/errors/400.http
	errorfile 403 /usr/local/etc/haproxy/errors/403.http
	errorfile 408 /usr/local/etc/haproxy/errors/408.http
	errorfile 500 /usr/local/etc/haproxy/errors/500.http
	errorfile 502 /usr/local/etc/haproxy/errors/502.http
	errorfile 503 /usr/local/etc/haproxy/errors/503.http
	errorfile 504 /usr/local/etc/haproxy/errors/504.http

frontend http_https
	bind :80
	bind :443 ssl crt /certificates/cloudflare.haproxy alpn h2,http/1.1
	# acls
	acl dav path_reg -i ^/.well-known/(carddav|caldav).*$
	acl webfinger path_reg -i ^/.well-known/(carddav|caldav).*$
	# proxy headers
	http-request set-header X-Forwarded-Port %[dst_port] if forwarded_port
	# http-response set-header Access-Control-Allow-Credentials "true"
	http-request add-header X-Forwarded-Proto https if https forwarded_proto
	http-request replace-path (.*) /remote.php/dav if dav
	http-request replace-path (.*) /public.php?service=webfinger if webfinger
	default_backend cloud

backend nextcloud
	http-response set-header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;"
	server default nextcloud:80 check
  1. Авторизация крутилась бесконечно, и лишь F5 нам позволял входить. Проблемы на ПК не стало, но как с клиентом для Android быть? Тут, оказалось, можно очень просто, решить проблему раз и навсегда - добавь в конфиг волшебное ты слово и сможешь заходить и выходить.