mirror of
https://github.com/nextcloud/docker.git
synced 2025-07-28 01:18:06 +02:00
Compare commits
9 commits
bc55abbfe7
...
46490024bc
Author | SHA1 | Date | |
---|---|---|---|
|
46490024bc | ||
|
6c1075b88d | ||
|
a9f9885e65 | ||
|
8c777a4144 | ||
|
5a242f6055 | ||
|
e381107323 | ||
|
02e6f4339c | ||
|
e6054a4909 | ||
|
5265049766 |
22 changed files with 185 additions and 16 deletions
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
services:
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.11
|
||||
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
|
||||
restart: always
|
||||
volumes:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
services:
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.11
|
||||
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
|
||||
restart: always
|
||||
volumes:
|
||||
|
|
|
@ -14,6 +14,7 @@ http {
|
|||
default_type application/octet-stream;
|
||||
types {
|
||||
text/javascript mjs;
|
||||
application/wasm wasm;
|
||||
}
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
|
@ -143,7 +144,7 @@ http {
|
|||
# to the URI, resulting in a HTTP 500 error response.
|
||||
location ~ \.php(?:$|/) {
|
||||
# Required for legacy support
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
|
||||
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
set $path_info $fastcgi_path_info;
|
||||
|
@ -166,7 +167,7 @@ http {
|
|||
}
|
||||
|
||||
# Serve static files
|
||||
location ~ \.(?:css|svg|js|mjs|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
|
||||
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac)$ {
|
||||
try_files $uri /index.php$request_uri;
|
||||
add_header Cache-Control "public, max-age=15778463$asset_immutable";
|
||||
add_header Referrer-Policy "no-referrer" always;
|
||||
|
|
|
@ -14,6 +14,7 @@ http {
|
|||
default_type application/octet-stream;
|
||||
types {
|
||||
text/javascript mjs;
|
||||
application/wasm wasm;
|
||||
}
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
|
@ -143,7 +144,7 @@ http {
|
|||
# to the URI, resulting in a HTTP 500 error response.
|
||||
location ~ \.php(?:$|/) {
|
||||
# Required for legacy support
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
|
||||
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
set $path_info $fastcgi_path_info;
|
||||
|
@ -166,7 +167,7 @@ http {
|
|||
}
|
||||
|
||||
# Serve static files
|
||||
location ~ \.(?:css|svg|js|mjs|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
|
||||
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac)$ {
|
||||
try_files $uri /index.php$request_uri;
|
||||
add_header Cache-Control "public, max-age=15778463$asset_immutable";
|
||||
add_header Referrer-Policy "no-referrer" always;
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
This docker-compose.yml file will create a nextcloud instance with signed certs using the lets encrypt companion and the nginx reverse proxy. Collabora office will also be deployed using signed certs. To use collabora the app must be installed within nextcloud and configured to use office.DOMAIN.TLD.
|
||||
|
||||
There is no need to specify a port, simply the pubilc domain used to create your certs for the office instance. Ports, 443 and 80 should be forwarded to the server.
|
||||
|
||||

|
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,109 @@
|
|||
version: '3'
|
||||
|
||||
services:
|
||||
|
||||
proxy:
|
||||
image: jwilder/nginx-proxy:alpine
|
||||
labels:
|
||||
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
|
||||
container_name: nextcloud-proxy
|
||||
networks:
|
||||
- nextcloud_network
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
volumes:
|
||||
- ./proxy/conf.d:/etc/nginx/conf.d:rw
|
||||
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
|
||||
- ./proxy/html:/usr/share/nginx/html:rw
|
||||
- ./proxy/certs:/etc/nginx/certs:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||
restart: unless-stopped
|
||||
|
||||
letsencrypt:
|
||||
image: jrcs/letsencrypt-nginx-proxy-companion
|
||||
container_name: nextcloud-letsencrypt
|
||||
depends_on:
|
||||
- proxy
|
||||
networks:
|
||||
- nextcloud_network
|
||||
volumes:
|
||||
- ./proxy/certs:/etc/nginx/certs:rw
|
||||
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
|
||||
- ./proxy/html:/usr/share/nginx/html:rw
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
restart: unless-stopped
|
||||
db:
|
||||
image: mariadb
|
||||
container_name: nextcloud-mariadb
|
||||
networks:
|
||||
- nextcloud_network
|
||||
volumes:
|
||||
- db:/var/lib/mysql
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
# Create a root password for the maraiadb instance.
|
||||
- MYSQL_ROOT_PASSWORD=CREATE-A-SECURE-ROOT-PASSWORD-HERE
|
||||
# Create a password for the nextcloud users. If you have to manually connect your database you would use the nextcloud user and this password.
|
||||
- MYSQL_PASSWORD=CREATE-A-SECURE-NEXTCLOUD-USER-PASSWORD-HERE
|
||||
- MYSQL_DATABASE=nextcloud
|
||||
- MYSQL_USER=nextcloud
|
||||
restart: unless-stopped
|
||||
|
||||
app:
|
||||
image: nextcloud:latest
|
||||
container_name: nextcloud-app
|
||||
networks:
|
||||
- nextcloud_network
|
||||
depends_on:
|
||||
- letsencrypt
|
||||
- proxy
|
||||
- db
|
||||
volumes:
|
||||
- nextcloud:/var/www/html
|
||||
- ./app/config:/var/www/html/config
|
||||
- ./app/custom_apps:/var/www/html/custom_apps
|
||||
- ./app/data:/var/www/html/data
|
||||
- ./app/themes:/var/www/html/themes
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
# The VIRTUAL_HOST and LETSENCRYPT_HOST should use the same publically reachable domain for your nextlcloud instance.
|
||||
- VIRTUAL_HOST=cloud.DOMAIN.TLD
|
||||
- LETSENCRYPT_HOST=cloud.DOMAIN.TLD
|
||||
# This needs to be a real email as it will be used by let's encrypt for your cert and is used to warn you about renewals.
|
||||
- LETSENCRYPT_EMAIL=YOUR-EMAIL@DOMAIN.TDL
|
||||
restart: unless-stopped
|
||||
collab:
|
||||
image: collabora/code
|
||||
container_name: nextcloud-collab
|
||||
networks:
|
||||
- nextcloud_network
|
||||
depends_on:
|
||||
- proxy
|
||||
- letsencrypt
|
||||
cap_add:
|
||||
- MKNOD
|
||||
ports:
|
||||
- 9980:9980
|
||||
environment:
|
||||
# This nees to be the same as what you set your app domain too (ex: cloud.domain.tld).
|
||||
- domain=cloud\\.DOMAIN\\.TDL
|
||||
- username=admin
|
||||
# Create a passoword for the collabora office admin page.
|
||||
- password=CREATE-A-SECURE-PASSWORD-HERE
|
||||
- VIRTUAL_PROTO=https
|
||||
- VIRTUAL_PORT=443
|
||||
# The VIRTUAL_HOST and LETSENCRYPT_HOST should use the same publically reachable domain for your collabora instance (ex: office.domain.tld).
|
||||
- VIRTUAL_HOST=office.DOMAIN.TLD
|
||||
- LETSENCRYPT_HOST=office.DOMAIN.TLD
|
||||
# This needs to be a real email as it will be used by let's encrypt for your cert and is used to warn you about renewals.
|
||||
- LETSENCRYPT_EMAIL=YOUR-EMAIL@DOMAIN.TDL
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
nextcloud:
|
||||
db:
|
||||
|
||||
networks:
|
||||
nextcloud_network:
|
|
@ -1,6 +1,6 @@
|
|||
services:
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.11
|
||||
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
|
||||
restart: always
|
||||
volumes:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
services:
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.11
|
||||
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
|
||||
restart: always
|
||||
volumes:
|
||||
|
|
|
@ -14,6 +14,7 @@ http {
|
|||
default_type application/octet-stream;
|
||||
types {
|
||||
text/javascript mjs;
|
||||
application/wasm wasm;
|
||||
}
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
|
@ -143,7 +144,7 @@ http {
|
|||
# to the URI, resulting in a HTTP 500 error response.
|
||||
location ~ \.php(?:$|/) {
|
||||
# Required for legacy support
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
|
||||
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
set $path_info $fastcgi_path_info;
|
||||
|
@ -166,7 +167,7 @@ http {
|
|||
}
|
||||
|
||||
# Serve static files
|
||||
location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
|
||||
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac)$ {
|
||||
try_files $uri /index.php$request_uri;
|
||||
add_header Cache-Control "public, max-age=15778463$asset_immutable";
|
||||
add_header Referrer-Policy "no-referrer" always;
|
||||
|
|
|
@ -14,6 +14,7 @@ http {
|
|||
default_type application/octet-stream;
|
||||
types {
|
||||
text/javascript mjs;
|
||||
application/wasm wasm;
|
||||
}
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
|
@ -143,7 +144,7 @@ http {
|
|||
# to the URI, resulting in a HTTP 500 error response.
|
||||
location ~ \.php(?:$|/) {
|
||||
# Required for legacy support
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
|
||||
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
|
||||
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
set $path_info $fastcgi_path_info;
|
||||
|
@ -166,7 +167,7 @@ http {
|
|||
}
|
||||
|
||||
# Serve static files
|
||||
location ~ \.(?:css|svg|js|mjs|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
|
||||
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|wasm|tflite|map|ogg|flac)$ {
|
||||
try_files $uri /index.php$request_uri;
|
||||
add_header Cache-Control "public, max-age=15778463$asset_immutable";
|
||||
add_header Referrer-Policy "no-referrer" always;
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -28,3 +28,8 @@ $trustedProxies = getenv('TRUSTED_PROXIES');
|
|||
if ($trustedProxies) {
|
||||
$CONFIG['trusted_proxies'] = array_filter(array_map('trim', explode(' ', $trustedProxies)));
|
||||
}
|
||||
|
||||
$forwardedForHeaders = getenv('FORWARDED_FOR_HEADERS');
|
||||
if ($forwardedForHeaders) {
|
||||
$CONFIG['forwarded_for_headers'] = array_filter(array_map('trim', explode(' ', $forwardedForHeaders)));
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ Database:
|
|||
```console
|
||||
$ docker run -d \
|
||||
-v db:/var/lib/mysql \
|
||||
mariadb:10.6
|
||||
mariadb:10.11
|
||||
```
|
||||
|
||||
### Additional volumes
|
||||
|
@ -261,7 +261,7 @@ To use the hooks triggered by the `entrypoint` script, either
|
|||
```
|
||||
|
||||
|
||||
## Using the apache image behind a reverse proxy and auto configure server host and protocol
|
||||
## Using the image behind a reverse proxy and auto configure server host and protocol
|
||||
|
||||
The apache image will replace the remote addr (IP address visible to Nextcloud) with the IP address from `X-Real-IP` if the request is coming from a proxy in `10.0.0.0/8`, `172.16.0.0/12` or `192.168.0.0/16` by default. If you want Nextcloud to pick up the server host (`HTTP_X_FORWARDED_HOST`), protocol (`HTTP_X_FORWARDED_PROTO`) and client IP (`HTTP_X_FORWARDED_FOR`) from a trusted proxy, then disable rewrite IP and add the reverse proxy's IP address to `TRUSTED_PROXIES`.
|
||||
|
||||
|
@ -276,6 +276,7 @@ If the `TRUSTED_PROXIES` approach does not work for you, try using fixed values
|
|||
- `OVERWRITECLIURL` (empty by default): Set the cli url of the proxy (e.g. https://mydnsname.example.com)
|
||||
- `OVERWRITEWEBROOT` (empty by default): Set the absolute path of the proxy.
|
||||
- `OVERWRITECONDADDR` (empty by default): Regex to overwrite the values dependent on the remote address.
|
||||
- `FORWARDED_FOR_HEADERS` (empty by default): HTTP headers with the original client IP address
|
||||
|
||||
Check the [Nexcloud documentation](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html) for more details.
|
||||
|
||||
|
@ -294,7 +295,7 @@ Make sure to pass in values for `MYSQL_ROOT_PASSWORD` and `MYSQL_PASSWORD` varia
|
|||
```yaml
|
||||
services:
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.11
|
||||
restart: always
|
||||
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
|
||||
volumes:
|
||||
|
@ -342,7 +343,7 @@ Make sure to pass in values for `MYSQL_ROOT_PASSWORD` and `MYSQL_PASSWORD` varia
|
|||
```yaml
|
||||
services:
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.11
|
||||
restart: always
|
||||
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
|
||||
volumes:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue