diff --git a/examples/Dockerfile.cron b/examples/Dockerfile.cron new file mode 100644 index 00000000..b93eed1b --- /dev/null +++ b/examples/Dockerfile.cron @@ -0,0 +1,13 @@ +FROM nextcloud:fpm + +RUN apt-get update && apt-get install -y \ + supervisor \ + cron \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir /var/log/supervisord /var/run/supervisord && \ + echo "*/15 * * * * su - www-data -s /bin/bash -c \"php -f /var/www/html/cron.php\""| crontab - + +COPY supervisord.conf /etc/supervisor/supervisord.conf + +CMD ["/usr/bin/supervisord"] diff --git a/examples/Dockerfile.imap b/examples/Dockerfile.imap new file mode 100644 index 00000000..2ae14087 --- /dev/null +++ b/examples/Dockerfile.imap @@ -0,0 +1,6 @@ +FROM nextcloud:apache +RUN apt-get update \ + && apt-get install -y libc-client-dev libkrb5-dev \ + && rm -rf /var/lib/apt/lists/* \ + && docker-php-ext-configure imap --with-kerberos --with-imap-ssl \ + && docker-php-ext-install imap diff --git a/examples/Dockerfile.smb b/examples/Dockerfile.smb new file mode 100644 index 00000000..52788a23 --- /dev/null +++ b/examples/Dockerfile.smb @@ -0,0 +1,2 @@ +FROM nextcloud:apache +RUN apt-get update && apt-get install -y smbclient && rm -rf /var/lib/apt/lists/* diff --git a/examples/docker-compose.yml b/examples/docker-compose.yml new file mode 100644 index 00000000..60167edc --- /dev/null +++ b/examples/docker-compose.yml @@ -0,0 +1,97 @@ +version: '2' +services: + proxy: + image: jwilder/nginx-proxy + container_name: proxy + ports: + - 80:80 + - 443:443 + volumes: + - ./proxy/conf.d:/etc/nginx/conf.d + - ./proxy/vhost.d:/etc/nginx/vhost.d + - ./proxy/html:/usr/share/nginx/html + - ./proxy/certs:/etc/nginx/certs:ro + - /var/run/docker.sock:/tmp/docker.sock:ro + networks: + - proxy-tier + restart: always + + letsencrypt-companion: + image: alastaircoote/docker-letsencrypt-nginx-proxy-companion + container_name: letsencrypt-companion + volumes_from: + - proxy + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - ./proxy/certs:/etc/nginx/certs:rw + restart: always + + web: + image: nginx + container_name: nextcloud_webserver + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + links: + - app + - collabora + volumes_from: + - app + environment: + - VIRTUAL_HOST=${DOMAIN} + - VIRTUAL_NETWORK=nginx-proxy + - VIRTUAL_PORT=80 + - LETSENCRYPT_HOST=${DOMAIN} + - LETSENCRYPT_EMAIL= + networks: + - proxy-tier + restart: always + + app: + image: nextcloud:fpm + container_name: nextcloud_fpm + links: + - db + volumes: + - ./nextcloud/apps:/var/www/html/apps + - ./nextcloud/config:/var/www/html/config + - ./nextcloud/data:/var/www/html/data + networks: + - proxy-tier + restart: always + + db: + image: mariadb + container_name: db + volumes: + - ./nextcloud/db:/var/lib/mysql + environment: + - MYSQL_ROOT_PASSWORD= + - MYSQL_DATABASE=nextcloud + - MYSQL_USER=nextcloud + - MYSQL_PASSWORD= + networks: + - proxy-tier + restart: always + + redis: + image: redis + container_name: redis + networks: + - proxy-tier + restart: always + + collabora: + image: collabora/code + container_name: collabora + cap_add: + - MKNOD + environment: + - domain=${DOMAIN} + networks: + - proxy-tier + restart: always + +networks: + proxy-tier: + external: + name: nginx-proxy diff --git a/examples/nginx.conf b/examples/nginx.conf new file mode 100644 index 00000000..ab5aae06 --- /dev/null +++ b/examples/nginx.conf @@ -0,0 +1,114 @@ +user www-data; + +events { + worker_connections 768; +} + +http { + upstream backend { + server app:9000; + } + upstream collabora { + server collabora:9980; + } + include /etc/nginx/mime.types; + default_type application/octet-stream; + + server { + listen 80; + + # Add headers to serve security related headers + add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Robots-Tag none; + add_header X-Download-Options noopen; + add_header X-Permitted-Cross-Domain-Policies none; + + root /var/www/html; + client_max_body_size 10G; # 0=unlimited - set max upload size + fastcgi_buffers 64 4K; + + gzip off; + + index index.php; + error_page 403 /core/templates/403.php; + error_page 404 /core/templates/404.php; + + rewrite ^/.well-known/carddav /remote.php/dav/ permanent; + rewrite ^/.well-known/caldav /remote.php/dav/ permanent; + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~ ^/(build|tests|config|lib|3rdparty|templates|data)/ { + deny all; + } + + location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { + deny all; + } + + location / { + rewrite ^/remote/(.*) /remote.php last; + rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; + try_files $uri $uri/ =404; + } + + location ~ \.php(?:$|/) { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param HTTPS on; + fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice + fastcgi_pass backend; + fastcgi_intercept_errors on; + } + + # Adding the cache control header for js and css files + # Make sure it is BELOW the location ~ \.php(?:$|/) { block + location ~* \.(?:css|js)$ { + add_header Cache-Control "public, max-age=7200"; + # Add headers to serve security related headers + add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; + add_header X-Content-Type-Options nosniff; + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Robots-Tag none; + add_header X-Download-Options noopen; + add_header X-Permitted-Cross-Domain-Policies none; + # Optional: Don't log access to assets + access_log off; + } + + # Optional: Don't log access to other assets + location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ { + access_log off; + } + + # collabora static files + location ^~ /loleaflet { + proxy_pass https://collabora:9980; + proxy_set_header Host $http_host; + } + + # collabora WOPI discovery URL + location ^~ /hosting/discovery { + proxy_pass https://collabora:9980; + proxy_set_header Host $http_host; + } + + # collabora websockets, download, presentation and image upload + location ^~ /lool { + proxy_pass https://collabora:9980; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $http_host; + } + } +}