Compare commits

..

190 Commits

Author SHA1 Message Date
Michael Barz
0d62d41894 Merge pull request #325 from lbausch/rename-euroffice
Rename euroffice to euro-office
2026-06-28 08:24:33 +02:00
Lorenz Bausch
16bd598d4d Rename euroffice to euro-office 2026-06-27 22:20:15 +02:00
Michael Barz
bc0a74dd5a Merge pull request #323 from opencloud-eu/keycloak-theme-v2-followup
fix (keycloak): adjust opencloud theme background not using full heig…
2026-06-27 09:08:12 +02:00
Alexander Ackermann
b8a0a98a51 fix (keycloak): adjust opencloud theme background not using full height when scrollable 2026-06-27 00:28:27 +02:00
Jörn Friedrich Dreyer
b914288032 Merge pull request #321 from opencloud-eu/keycloak-theme-v2
chore (keycloak): migrate login theme to keycloak.v2
2026-06-26 15:03:21 +02:00
Alexander Ackermann
09e0d8f32a chore (keycloak): migrate login theme to keycloak.v2 2026-06-25 22:13:32 +02:00
Michael Barz
aab87f13a7 Merge pull request #294 from opencloud-eu/renovate/main-opencloudeu-opencloud-rolling-7.x
chore(deps): update opencloudeu/opencloud-rolling docker tag to v7 (main)
2026-06-25 18:34:36 +02:00
Michael Barz
aebf5882f4 Merge pull request #319 from ralfbergs/patch-2
Update opencloud.yml: wrong indentation.
2026-06-25 18:25:59 +02:00
Ralf G. R. Bergs
f292460d32 Update opencloud.yml: wrong indentation. 2026-06-25 15:01:07 +02:00
Ralf Haferkamp
f0277501f0 Merge pull request #318 from opencloud-eu/issue/263
fix: README contains wrong variable name
2026-06-25 13:27:21 +02:00
Ralf Haferkamp
76e41a4848 fix: README contains wrong variable name
It's TRAEFIK_ACME_MAIL not TRAEFIK_LETSENCRYPT_EMAIL

Closes: #263
2026-06-25 12:08:17 +02:00
renovate[bot]
46ad111b94 chore(deps): update opencloudeu/opencloud-rolling docker tag to v7 2026-06-25 08:40:48 +00:00
Michael Barz
9cac2bd525 Merge pull request #275 from dschmidt/feat/opensearch-module
feat: add opensearch search backend module
2026-06-25 09:45:21 +02:00
Michael Barz
d965660599 Merge pull request #300 from jgoclawski/add_tika_healthcheck
Ensure OpenCloud doesn't start until Tika is ready.
2026-06-25 09:31:55 +02:00
Michael Barz
f3f0ece32a Merge pull request #292 from chippey5/main
Add IDP_DOMAIN to the frame-src section in csp.yaml
2026-06-25 09:29:36 +02:00
Anja Barz
b138f37c98 Merge pull request #313 from opencloud-eu/add-default-id-and-scopes
add the default ids and scopes for the clients
2026-06-24 10:14:43 +02:00
Viktor Scharf
3314522ef9 Merge pull request #314 from opencloud-eu/refactor-wopi
feat: move collaboration into the opencloud process
2026-06-22 15:25:30 +02:00
Michael Barz
9cee17c253 fix: remove collaboration from external proxy 2026-06-22 15:08:13 +02:00
Anja Barz
e92718ffa0 change the scopes for the clients 2026-06-22 10:09:32 +02:00
Michael Barz
5268ad506b feat: move collaboration into the opencloud process 2026-06-19 20:26:16 +02:00
Anja Barz
8c43842e7b add the default ids and scopes for the clients 2026-06-19 12:54:39 +02:00
Michael Barz
913920dd33 Merge pull request #312 from opencloud-eu/fix-collabora-healthcheck
fix: collabora healthcheck without curl
2026-06-19 12:19:36 +02:00
Michael Barz
792bcd336e Merge pull request #196 from maybenotconnor/feat/configurable-proxy-role-assignment-driver
make PROXY_ROLE_ASSIGNMENT_DRIVER configurable
2026-06-19 10:43:18 +02:00
Connor
73b02b77d8 feat: make role assignment settings configurable
Allow PROXY_ROLE_ASSIGNMENT_DRIVER and GRAPH_ASSIGN_DEFAULT_USER_ROLE
   to be set via environment variables in .env file.

   - PROXY_ROLE_ASSIGNMENT_DRIVER defaults to oidc
   - GRAPH_ASSIGN_DEFAULT_USER_ROLE defaults to false

   When using PROXY_ROLE_ASSIGNMENT_DRIVER=default, set
   GRAPH_ASSIGN_DEFAULT_USER_ROLE=true to assign the 'user' role
   to new users.
2026-06-19 10:42:34 +02:00
Michael Barz
4d3e787e2d fix: collabora healthcheck without curl 2026-06-19 09:36:25 +02:00
Benedikt Kulmann
cda4138e7d Merge pull request #310 from opencloud-eu/bump-code-to-26.04.1.4.1
chore: bump collabora to 26.04.1.4.1
2026-06-19 08:39:37 +02:00
Michael Barz
c5ab316d45 Merge pull request #311 from Cassolette/patch/eo-clean
Euro office fixups
2026-06-18 17:16:09 +02:00
Michael Barz
b3b820f32b Merge pull request #308 from opencloud-eu/docs-eurooffice
docs: add euro office
2026-06-18 17:02:39 +02:00
v.scharf
0636b2c871 set OC_EVENTS_ENDPOINT for collaboration (EO) 2026-06-18 14:36:53 +00:00
cazo
03ba22ed4e fix: cleanup no longer required scripts
WOPI fixes have been integrated into the docker image from v9.3.2-rc.1 onwards
2026-06-18 14:36:52 +00:00
cazo
4531d137ef feat: system fonts to EO
matching what was done for Collabora.
2026-06-18 13:11:00 +00:00
Alexander Ackermann
d853a59078 chore: bump collabora to 26.04.1.4.1 2026-06-18 13:32:31 +02:00
Michael Barz
75941df428 docs: add euro office 2026-06-17 17:42:59 +02:00
Michael Barz
38f4ea52a5 Merge pull request #271 from zerox80/main
WIP: Add Euro Office (ONLYOFFICE) integration
2026-06-17 17:37:04 +02:00
Florian Schade
5a1d9d4b9b Merge pull request #307 from opencloud-eu/setNatsForCollabora
set OC_EVENTS_ENDPOINT for collaboration
2026-06-17 11:16:59 +02:00
v.scharf
217099947f set OC_EVENTS_ENDPOINT for collaboration 2026-06-16 14:52:23 +02:00
zerox80
03a4587c90 Fix Euro Office WOPI config initialization 2026-06-11 20:28:25 +02:00
Michael Barz
539d514bbb Merge pull request #299 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.3 (main)
2026-06-08 09:05:19 +02:00
Jakub Gocławski
cc49b063c0 Ensure OpenCloud doesn't start until Tika is ready. 2026-06-05 17:45:47 +02:00
renovate[bot]
8564cb046f chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.3 2026-06-04 18:03:12 +00:00
Michael Barz
9eeaee4743 Merge pull request #296 from opencloud-eu/renovate/main-collabora-code-25.x
chore(deps): update collabora/code docker tag to v25.04.10.3.1 (main)
2026-06-01 17:11:27 +02:00
renovate[bot]
882953cdcc chore(deps): update collabora/code docker tag to v25.04.10.3.1 2026-06-01 14:49:21 +00:00
Michael Barz
cc3de9830b Merge pull request #290 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.2 (main)
2026-06-01 16:38:00 +02:00
Simon
7cf59a62a9 Add IDP_DOMAIN to the frame-src section in csp.yaml
When using an external IDP, not having the IDP FQDN in frame-src causes silent refreshes to get blocked.
2026-05-20 14:32:37 +02:00
renovate[bot]
521e600b86 chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.2 2026-05-19 13:35:28 +00:00
Thomas Schweiger
2bb11ee1a5 Merge pull request #288 from opencloud-eu/renovate/main-postgres-17.x
chore(deps): update postgres docker tag to v17.10 (main)
2026-05-18 15:17:31 +02:00
Michael Barz
40081db318 Merge pull request #287 from opencloud-eu/renovate/main-opencloudeu-opencloud-rolling-6.x
chore(deps): update opencloudeu/opencloud-rolling docker tag to v6.2.0 (main)
2026-05-18 14:49:34 +02:00
renovate[bot]
ddfef44b34 chore(deps): update postgres docker tag to v17.10 2026-05-18 12:37:13 +00:00
renovate[bot]
3838584876 chore(deps): update opencloudeu/opencloud-rolling docker tag to v6.2.0 2026-05-18 12:37:07 +00:00
Thomas Schweiger
8cafd254bb Merge pull request #264 from ralfbergs/patch-1
Update clamav.yml: make OpenCloud container depend on ClamAV container.
2026-05-13 08:23:13 +02:00
Jannik Stehle
fd966a5527 Merge pull request #281 from opencloud-eu/chore/update-maps-v3
chore: bump maps app to v3
2026-05-07 07:19:46 +02:00
Michael Barz
270374d9e1 Merge pull request #270 from MannixTT/external-idp
External idp | new variables for various clients
2026-05-06 16:31:42 +02:00
Artur Neumann
459b5ba9ff Merge pull request #283 from opencloud-eu/traefikport
use TRAEFIK_PORT_HTTPS for keycloak config
2026-05-06 20:12:33 +05:45
Artur Neumann
17012ada58 Merge pull request #284 from opencloud-eu/fixIndent
fix indent in cert example
2026-05-06 20:12:16 +05:45
Artur Neumann
0ddef8a7f1 fix indent in cert example 2026-05-06 17:06:14 +05:45
Artur Neumann
12f855c9ce use TRAEFIK_PORT_HTTPS for keycloak config 2026-05-06 13:17:58 +05:45
Jannik Stehle
1e760a19d6 fix: add missing csp rules for maps app 2026-05-05 10:46:06 +02:00
Jannik Stehle
d2663a1113 chore: bump maps app to v3
The upcoming version `7.0.0` of OpenCloud Web removes support for apps
using the old AMD format. Hence we need to bump the maps app to
`v3.0.0` to ensure it runs with the new version of Web.
2026-05-05 10:33:31 +02:00
MannixTT
c3caf7e65b Update .env.example
Changes made based on the comments in the pull request following the reviews
2026-04-26 20:53:30 +02:00
MannixTT
5998ffbc96 Update external-idp.yml
Changes made based on the comments in the pull request following the reviews
2026-04-26 20:52:38 +02:00
Michael Barz
29749588de Merge pull request #276 from opencloud-eu/renovate/main-traefik-3.x
chore(deps): update traefik docker tag to v3.6.14 (main)
2026-04-23 10:11:44 +02:00
renovate[bot]
781ae4c8b4 chore(deps): update traefik docker tag to v3.6.14 2026-04-22 20:46:22 +00:00
Michael Barz
f62678fc9b Merge pull request #274 from opencloud-eu/renovate/main-opencloudeu-opencloud-rolling-6.x
chore(deps): update opencloudeu/opencloud-rolling docker tag to v6.1.0 (main)
2026-04-22 17:15:02 +02:00
Dominik Schmidt
32b328218f Update search/opensearch.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-22 00:53:50 +02:00
Dominik Schmidt
c814f08cd5 feat: add opensearch search backend module
Adds search/opensearch.yml — a single-node OpenSearch deployment wired up
as the opencloud search engine backend via SEARCH_ENGINE_TYPE=open-search.

The security plugin is disabled because the service is only reachable on
the internal opencloud-net bridge (no published port). Do not publish or
proxy this without enabling the security plugin first.

The disk-based shard allocation watermarks are disabled so the index
does not flip to read-only on modest disks, which otherwise silently
turns bulk upserts into no-ops.
2026-04-22 00:43:41 +02:00
renovate[bot]
372bc44e63 chore(deps): update opencloudeu/opencloud-rolling docker tag to v6.1.0 2026-04-20 19:55:03 +00:00
zerox80
3813131dfd feat: add lightweight WOPI init script for Euro Office 2026-04-20 16:25:25 +02:00
zerox80
b5eb7bb7ca refactor: standardize service names and update port configurations for Euro Office integration 2026-04-20 13:36:03 +02:00
Michael Barz
f0b1565edb Merge pull request #273 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.1 (main)
2026-04-16 18:01:27 +02:00
renovate[bot]
892839eace chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.1 2026-04-16 10:53:05 +00:00
zerox80
f01a8969bf feat: add docker-compose configuration for Euro-Office integration 2026-04-10 10:18:41 +02:00
zerox80
87cbdc05e3 feat: add support for Euro Office integration with custom entrypoint and configuration 2026-04-10 09:46:52 +02:00
MannixTT
86f1d6fb7e Update external-idp.yml
adapt defaults - otherwise it will not behave as expected
2026-04-09 00:20:46 +02:00
MannixTT
212f87a89c Update .env.example
Update environment variables for new variables regarding external idp settings
2026-04-08 23:49:37 +02:00
MannixTT
68ddb4eb79 Update external-idp.yml
adapt docker compose for new variables regarding external idp
2026-04-08 23:46:15 +02:00
Michael Barz
6da37f5ba5 Merge pull request #265 from opencloud-eu/renovate/main-traefik-3.x
chore(deps): update traefik docker tag to v3.6.13 (main)
2026-04-08 15:49:34 +02:00
renovate[bot]
b6bde225d4 chore(deps): update traefik docker tag to v3.6.13 2026-04-08 13:45:08 +00:00
Michael Barz
4f1ff44446 Merge pull request #268 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.0 (main)
2026-04-08 15:44:41 +02:00
renovate[bot]
8ac4a770a6 chore(deps): update quay.io/keycloak/keycloak docker tag to v26.6.0 2026-04-08 13:37:20 +00:00
Ralf G. R. Bergs
4121da5547 Update clamav.yml: make OpenCloud container depend on ClamAV container.
Prevent race condition between the two containers: If OpenCloud container is up quicker than clamd.sock exists, it doesn't work.
2026-04-07 18:22:23 +02:00
Michael Barz
6008e82a84 Merge pull request #255 from opencloud-eu/renovate/main-traefik-3.x
chore(deps): update traefik docker tag to v3.6.12 (main)
2026-04-07 11:16:51 +02:00
renovate[bot]
c600ac4988 chore(deps): update traefik docker tag to v3.6.12 2026-04-07 08:58:16 +00:00
Michael Barz
1f5991578b Merge pull request #261 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.5.7 (main)
2026-04-07 10:57:02 +02:00
renovate[bot]
376f06c4e3 chore(deps): update quay.io/keycloak/keycloak docker tag to v26.5.7 2026-04-02 17:08:08 +00:00
Thomas Schweiger
6ab45a8594 Merge pull request #259 from opencloud-eu/renovate/main-opencloudeu-opencloud-rolling-6.x
chore(deps): update opencloudeu/opencloud-rolling docker tag to v6 (main)
2026-04-02 10:03:00 +02:00
renovate[bot]
938faf9a53 chore(deps): update opencloudeu/opencloud-rolling docker tag to v6 2026-03-31 14:17:33 +00:00
Michael Barz
1e23a63910 Merge pull request #252 from opencloud-eu/renovate/main-collabora-code-25.x
chore(deps): update collabora/code docker tag to v25.04.9.4.1 (main)
2026-03-25 09:29:41 +01:00
renovate[bot]
39a3bcd45d chore(deps): update collabora/code docker tag to v25.04.9.4.1 2026-03-25 08:29:24 +00:00
Michael Barz
932e794fd2 Merge pull request #249 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.5.6 (main)
2026-03-25 09:29:08 +01:00
renovate[bot]
279b2cde68 chore(deps): update quay.io/keycloak/keycloak docker tag to v26.5.6 2026-03-25 08:28:42 +00:00
Michael Barz
4cbeb8ea38 Merge pull request #250 from opencloud-eu/renovate/main-traefik-3.x
chore(deps): update traefik docker tag to v3.6.11 (main)
2026-03-25 09:28:02 +01:00
renovate[bot]
1c94d436e4 chore(deps): update traefik docker tag to v3.6.11 2026-03-19 21:51:02 +00:00
Michael Barz
2b1476950b Merge pull request #247 from opencloud-eu/renovate/main-collabora-code-25.x
chore(deps): update collabora/code docker tag to v25.04.9.3.1 (main)
2026-03-17 08:48:36 +01:00
renovate[bot]
8a30076bc0 chore(deps): update collabora/code docker tag to v25.04.9.3.1 2026-03-16 17:30:11 +00:00
Viktor Scharf
bfd87b4bc0 Merge pull request #245 from opencloud-eu/demo-users-for-keycloak-ldap-setup
add optional demo users for ldap-keycloak setup
2026-03-12 08:15:50 +01:00
Viktor Scharf
060f8d09ca add optional demo users for ldap-keycloak setup 2026-03-11 14:16:34 +01:00
Michael Flemming
ec431ee2f8 Merge pull request #244 from opencloud-eu/flimmy-patch-2
Update OC_DOCKER_TAG comment in .env.example
2026-03-10 11:19:10 +01:00
Michael Flemming
2075573ac5 Update OC_DOCKER_TAG comment in .env.example
Updated comment for OC_DOCKER_TAG as it does not default to "latest".
2026-03-10 11:17:07 +01:00
Michael Flemming
c5f235a54e Merge pull request #242 from opencloud-eu/renovate/main-opencloudeu-opencloud-rolling-5.x
chore(deps): update opencloudeu/opencloud-rolling docker tag to v5.2.0 (main)
2026-03-10 11:12:50 +01:00
renovate[bot]
daabcb9515 chore(deps): update opencloudeu/opencloud-rolling docker tag to v5.2.0 2026-03-09 17:12:28 +00:00
Michael Barz
b3c2b06b5f Merge pull request #240 from opencloud-eu/renovate/main-traefik-3.x
chore(deps): update traefik docker tag to v3.6.10 (main)
2026-03-07 08:01:49 +01:00
renovate[bot]
a5c06c10cc chore(deps): update traefik docker tag to v3.6.10 2026-03-06 21:45:32 +00:00
Michael Barz
61e128d975 Merge pull request #239 from opencloud-eu/renovate/main-quay.io-keycloak-keycloak-26.x
chore(deps): update quay.io/keycloak/keycloak docker tag to v26.5.5 (main)
2026-03-05 19:44:04 +01:00
renovate[bot]
958b21d80a chore(deps): update quay.io/keycloak/keycloak docker tag to v26.5.5 2026-03-05 18:32:46 +00:00
Michael Barz
93fa72b3a8 Merge pull request #228 from opencloud-eu/add-hsts
feat: add hsts
2026-03-04 11:31:39 +01:00
Michael Barz
94db919f1d Merge pull request #236 from opencloud-eu/renovate/main-opencloudeu-opencloud-rolling-5.x
chore(deps): update opencloudeu/opencloud-rolling docker tag to v5.1.0 (main)
2026-03-04 11:30:16 +01:00
renovate[bot]
33c3861012 chore(deps): update opencloudeu/opencloud-rolling docker tag to v5.1.0 2026-03-04 10:28:57 +00:00
Michael Barz
bc2b6b4a90 fix: regex match string
fix: regex match string

fix: regex match string

fix: plaform merge

fix: labels

fix: labels 2
2026-03-04 11:28:31 +01:00
Michael Barz
d146f60855 feat: pin version, add renovate 2026-03-04 11:28:29 +01:00
Michael 'Flimmy' Flemming
85e2c4aa35 fix middleware race condition with disabled dashboard 2026-03-04 10:56:57 +01:00
Michael Barz
70fa25573f Merge pull request #230 from opencloud-eu/renovate/main-traefik-3.x
chore(deps): update traefik docker tag to v3.6.9 (main)
2026-03-03 21:59:30 +01:00
renovate[bot]
55035e0a81 chore(deps): update traefik docker tag to v3.6.9 2026-03-03 20:58:46 +00:00
Michael Barz
8f09fd66fd fix: automerge config 2026-03-03 21:56:16 +01:00
Michael Barz
1dbce867e1 fix: pin postgres version 2026-03-03 21:48:32 +01:00
Michael Barz
d0a9e71a89 Merge pull request #229 from opencloud-eu/renovate/main-collabora-code-25.x
chore(deps): update collabora/code docker tag to v25.04.9.2.1 (main)
2026-03-03 17:18:37 +01:00
renovate[bot]
634c95d5ed chore(deps): update collabora/code docker tag to v25.04.9.2.1 2026-03-03 16:15:38 +00:00
Michael Barz
820ce2747f chore: add renovate config 2026-03-03 17:12:08 +01:00
Michael Barz
1eeabd5bcb feat: add hsts 2026-03-03 16:14:36 +01:00
Viktor Scharf
69b1555af9 Merge pull request #227 from opencloud-eu/update-keycloak
chore: update keycloak to 26.5.4
2026-03-02 11:40:35 +01:00
Michael Barz
f480b7d6ed chore: update keycloak to 26.5.4 2026-03-02 11:34:25 +01:00
Ralf Haferkamp
25af2c9f6f Merge pull request #223 from opencloud-eu/fix-slow-jailkit
fix: slow kit jail error server audit in collabora (next try)
2026-02-17 16:50:18 +01:00
Ralf Haferkamp
41b721b42b chore: Bump collabora to 25.04.9.1.1 2026-02-17 16:47:15 +01:00
Ralf Haferkamp
5ededbd4c9 collabora: Drop unneeded capabitlity
'MKNOD' is not longer required
2026-02-17 11:36:17 +01:00
Ralf Haferkamp
98294c2dee Reapply "fix: slow kit jail error server audit in collabora"
This reverts commit 6ecf59f078.
2026-02-17 11:35:26 +01:00
Alex
1a4f302855 chore: bump traefik to 3.6.7 (#212) 2026-02-03 10:53:31 +01:00
Alex
de88ca037b fix add back slash to traefik allowed encoded characters (#211) 2026-02-02 09:13:14 +01:00
Michael Barz
1b4cfb5759 Merge pull request #206 from aleksa-radojicic/add-kc-log-level
Add support for KC_LOG_LEVEL env variable & fix KC credentials leaking in logs
2026-01-25 17:58:49 +01:00
aleksa.radojicic
1a231fa807 fix(keycloak): prevent env vars from being printed in logs
The problem is credentials are displayed in the console, which poses a security risk in production. Printing the environment variables for log levels 'trace/debug' would help when debugging.
2026-01-25 11:46:52 +01:00
aleksa.radojicic
a79de3c5ee feat(keycloak): add support for KC_LOG_LEVEL env variable
KC_LOG_LEVEL is defined in the [official docs](https://www.keycloak.org/server/all-config?q=log-level).
2026-01-25 11:43:02 +01:00
Viktor Scharf
4e8f66ac5f Merge pull request #201 from opencloud-eu/fix#31
update certs.yml example
2026-01-13 12:21:31 +01:00
Viktor Scharf
8ce6895188 update certs.yml example 2026-01-13 12:07:40 +01:00
Viktor Scharf
a0d5196dfa Merge pull request #198 from opencloud-eu/add-default-language-to-docker-compose.yaml
add the default language variable to the docker-compose.yaml
2026-01-08 20:07:30 +01:00
Anja Barz
e19f6ba593 add info about language format and add it to the .env 2026-01-08 12:10:49 +01:00
Anja Barz
d9300db50e add the default language variable to the docker-compose.yaml 2026-01-08 07:37:06 +01:00
Michael Barz
634cd89b0f Merge pull request #178 from opencloud-eu/update_inline_docs
Update inline docs
2026-01-05 21:11:25 +01:00
Artur Neumann
59f5f1702d Merge pull request #190 from opencloud-eu/individual-it-patch-1
fix: example command to load apps
2025-12-29 18:32:11 +05:45
Artur Neumann
81888ebe66 fix: example command to load apps 2025-12-29 17:45:08 +05:45
Viktor Scharf
c3471649f8 Merge pull request #181 from opencloud-eu/setWritableShareFalse
set OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD=false by default
2025-12-17 10:16:00 +01:00
Viktor Scharf
5fa7ab2d40 set OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD=false by default 2025-12-17 09:47:31 +01:00
streaminganger
a738092592 fix: traefik rejects supported file characters (#179) 2025-12-16 10:49:45 +01:00
Michael Barz
3bddb65c8b Merge pull request #180 from opencloud-eu/revert-175-fix-collabora-server-audit-slow-kit
Revert "fix: slow kit jail error server audit in collabora"
2025-12-12 17:25:37 +01:00
Michael Barz
6ecf59f078 Revert "fix: slow kit jail error server audit in collabora" 2025-12-12 15:42:09 +01:00
Michael Barz
adf5c3a388 Merge pull request #175 from opencloud-eu/fix-collabora-server-audit-slow-kit
fix: slow kit jail error server audit in collabora
2025-12-12 09:08:26 +01:00
Michael 'Flimmy' Flemming
4bfa819979 uncomment important env-vars but leave at default 2025-12-11 12:16:52 +01:00
Michael 'Flimmy' Flemming
0ee8acafe3 remove leading space from commented vars 2025-12-11 12:07:52 +01:00
Michael 'Flimmy' Flemming
a2f8a01119 explicitly list commented certs env_var and its default 2025-12-11 12:04:24 +01:00
Michael 'Flimmy' Flemming
d3c0c80250 add External-IDP example 2025-12-11 11:59:49 +01:00
Ralf Haferkamp
a2411f8cec Merge pull request #170 from opencloud-eu/issue/165
Fix bash default substitution
2025-12-10 17:29:00 +01:00
Alexander Ackermann
e897106b58 remove privileged 2025-12-09 18:58:56 +01:00
Alexander Ackermann
7386b21d7c make work on debian based systems 2025-12-09 18:49:31 +01:00
Alexander Ackermann
f3ea0ee978 fix: slow kit jail error server audit in collabora 2025-12-09 15:34:46 +01:00
Alex
2f1f0d3149 fix: WOPI/Collabora incompatibility with traefik v3.6.4 (#174) 2025-12-09 12:47:40 +01:00
Ralf Haferkamp
537de1a843 Fix bash default substitution
Closes: #165
2025-12-02 11:04:15 +01:00
Michael Barz
497f09669c Merge pull request #166 from Diekos/smtp_insecure-default-to-false
Added SMTP_INSECURE defaults to false
2025-11-27 23:23:46 +01:00
Michael Barz
a650026624 Merge pull request #155 from chillymattster/oc_port_configurable
feat: port configuration
2025-11-27 15:26:29 +01:00
Diekos
171235f0b8 Added SMTP_INSECURE defaults to false
The SMTP_INSECURE did not yet have a default to false.
2025-11-27 11:32:23 +01:00
chillymattster
50254df2ab align variable names in docker compose yml and environment 2025-11-26 19:11:37 +01:00
chillymattster
95c03733d7 Merge branch 'main' into oc_port_configurable 2025-11-26 19:06:49 +01:00
Michael Barz
79782cdd5f Merge pull request #157 from chillymattster/configure_uid_gid
feat: improve security - configure container uid and gid
2025-11-25 10:28:03 +01:00
Michael Barz
afe6399374 Merge pull request #163 from kellergoech/kellergoech-add-exposed-ports
Added the exposed ports yml files for external proxies
2025-11-24 09:42:22 +01:00
kellergoech
8d8b8dfc73 Update collabora-exposed.yml 2025-11-22 07:14:32 +01:00
kellergoech
eca5b1117e Update keycloak-exposed.yml 2025-11-22 07:14:10 +01:00
kellergoech
cfd356a155 Update description opencloud-exposed.yml 2025-11-22 07:13:49 +01:00
kellergoech
4e4fe65a97 Update description keycloak-exposed.yml 2025-11-22 07:13:15 +01:00
kellergoech
dede740c0e Update description collabora-exposed.yml 2025-11-22 07:12:47 +01:00
kellergoech
0d389800b5 Create opencloud-exposed.yml for service exposure
Add configuration to expose OpenCloud service on port 9200
2025-11-21 17:29:55 +01:00
kellergoech
df7dfc0a02 Create keycloak-exposed.yml for service ports
Add Keycloak service configuration with exposed ports
2025-11-21 17:29:01 +01:00
kellergoech
0e35e4d6b9 add collabora exposed 2025-11-21 17:27:18 +01:00
Viktor Scharf
c1a9d82702 Merge pull request #159 from opencloud-eu/fix-cert.yml-example
fix cert.yml-example
2025-11-21 11:28:03 +01:00
Michael Barz
7b2bd36f30 Merge pull request #162 from opencloud-eu/support-check-for-updates
feat: enable check for updates flag
2025-11-20 13:51:53 +01:00
Alexander Ackermann
13e076b305 feat: enable check for updates flag 2025-11-20 13:45:08 +01:00
Michael Barz
cfe3f0f612 Merge pull request #161 from opencloud-eu/fix-external-proxy
fix: bind ports on localhost for external proxy
2025-11-20 11:05:45 +01:00
Michael Barz
6a5950da36 fix: bind ports on localhost for external proxy 2025-11-20 10:35:37 +01:00
Viktor Scharf
8c96301523 fix 2025-11-19 16:21:42 +01:00
Viktor Scharf
39412c7297 fix cert.yml-example 2025-11-19 15:19:33 +01:00
Michael Barz
5873484022 Merge pull request #158 from opencloud-eu/fix-tika-image
fix: tika image name
2025-11-18 11:23:09 +01:00
Anja Barz
6b3a1e36e1 Update README.md with latest and not small 2025-11-18 10:42:53 +01:00
Michael Barz
fc67954f76 fix: tika image name 2025-11-18 08:48:41 +01:00
Michael Barz
c392985614 Merge pull request #149 from opencloud-eu/fix-tika-image
fix: use apache/tika:slim by default
2025-11-17 09:54:50 +01:00
chillymattster
900a05c2c0 avoid enforcing visible default port at the end of urls 2025-11-14 15:38:21 +01:00
chillymattster
ba14b78f58 feat: port configuration 2025-11-14 10:26:09 +01:00
chillymattster
4d2ad78f6d feat: configure container uid and gid 2025-11-13 21:26:55 +01:00
Michael Barz
df985a5304 Merge pull request #150 from opencloud-eu/bump-collabora-25.04.7.1.1
chore: bump collabora to 25.04.7.1.1
2025-11-10 14:15:39 +01:00
Michael Barz
fddd76a560 Merge pull request #133 from dkarv/antivirus
Add ClamAV
2025-11-10 14:09:23 +01:00
Alexander Ackermann
74d359b85c chore: bump collabora to 25.04.7.1.1 2025-11-10 14:08:39 +01:00
Michael Barz
73fdc8a96a fix: use apache/tika:slim by default 2025-11-10 13:58:55 +01:00
Alex
6e40d2d96e Merge pull request #148 from opencloud-eu/bump-maps-1.0.2
chore: bump web app maps to v1.0.2
2025-11-10 13:43:36 +01:00
dkarv
6d0454d7a2 document the clamav max stream setting 2025-11-01 12:34:29 +01:00
David
6f71feff30 Remove blank lines in clamav.yml 2025-10-31 14:37:50 +01:00
dkarv
f5df55fedc add compose file and documentation how to use it 2025-10-30 22:46:25 +01:00
48 changed files with 1507 additions and 152 deletions

View File

@@ -22,6 +22,12 @@ INSECURE=true
#COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml
# Keycloak Shared User Directory
#COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:traefik/opencloud.yml:traefik/collabora.yml:idm/ldap-keycloak.yml:traefik/ldap-keycloak.yml
# External IDP
#COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:traefik/opencloud.yml:traefik/collabora.yml:idm/external-idp.yml
# Euro Office with traefik and letsencrypt
#COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:traefik/opencloud.yml:traefik/euro-office.yml
# Euro Office with external proxy (Nginx, Caddy, etc.)
#COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:external-proxy/opencloud.yml:external-proxy/euro-office.yml
## Traefik Settings ##
# Note: Traefik is always enabled and can't be disabled.
@@ -61,12 +67,20 @@ TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt"
#
# The certificates need to be copied into ./certs/, the absolute path inside the container is /certs/.
# You can also use TRAEFIK_CERTS_DIR=/path/on/host to set the path to the certificates directory.
#TRAEFIK_CERTS_DIR=./certs
# Enable the access log for Traefik by setting the following variable to true.
TRAEFIK_ACCESS_LOG=
# Configure the log level for Traefik.
# Possible values are "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "PANIC". Default is "ERROR".
TRAEFIK_LOG_LEVEL=
# The default for traefik is to run in privileged mode.
# If you want to run traefik non-privileged, use the following variable and the format [UID]:[GID] to set user and group of your choice.
# Ensure that the user has access to docker.sock and traefik volumes defined in traefik/opencloud.yml
#TRAEFIK_CONTAINER_UID_GID="1000:1000"
# Configure ports for HTTP and HTTPS when necessary, defaults are 80 and 443
# Don't use ports in the range of 8000-9999 and 5232 as those ports are used internally and therefore might create conflicts.
#TRAEFIK_PORT_HTTP=4080
#TRAEFIK_PORT_HTTPS=4443
## OpenCloud Settings ##
# The opencloud container image.
@@ -75,8 +89,13 @@ TRAEFIK_LOG_LEVEL=
# Defaults to production if not set otherwise
OC_DOCKER_IMAGE=opencloudeu/opencloud-rolling
# The openCloud container version.
# Defaults to "latest" and points to the latest stable tag.
# Defaults to the latest version-tag. Use git pull to update.
OC_DOCKER_TAG=
# The default id used in opencloud containers is 1000 for user and group.
# If you want to change the default, use the following variable and the format [UID]:[GID].
# The change affects all containers with access to data volumes.
# Ensure that the user has access to all volumes defined in docker-compose.yml
#OC_CONTAINER_UID_GID="1000:1000"
# Domain of openCloud, where you can find the frontend.
# Defaults to "cloud.opencloud.test"
OC_DOMAIN=
@@ -93,30 +112,39 @@ DEMO_USERS=
# After the first initialization, the admin password can only be changed via the OpenCloud User Settings UI or by using the OpenCloud CLI.
# Documentation: https://docs.opencloud.eu/docs/admin/resources/common-issues#-change-admin-password-set-in-env
INITIAL_ADMIN_PASSWORD=
# Whether clients should check for updates.
# Defaults to "true".
CHECK_FOR_UPDATES=
# Define the openCloud loglevel used.
#
LOG_LEVEL=
# Define the kind of logging.
# The default log can be read by machines.
# Set this to true to make the log human readable.
# LOG_PRETTY=true
#LOG_PRETTY=true
#
# Define the openCloud storage location. Set the paths for config and data to a local path.
# Ensure that the configuration and data directories are owned by the user and group with ID 1000:1000.
# This matches the default user inside the container and avoids permission issues when accessing files.
# Note that especially the data directory can grow big.
# Leaving it default stores data in docker internal volumes.
# OC_CONFIG_DIR=/your/local/opencloud/config
# OC_DATA_DIR=/your/local/opencloud/data
OC_CONFIG_DIR=
OC_DATA_DIR=
# OpenCloud Web can load extensions from a local directory.
# The default uses the bind mount to the config/opencloud/apps directory.
# Example: curl -L https://github.com/opencloud-eu/web-extensions/releases/download/unzip-v1.0.2/unzip-1.0.2.zip | tar -xz -C config/opencloud/apps
# Example: curl -L https://github.com/opencloud-eu/web-extensions/releases/download/unzip-v1.0.2/unzip-1.0.2.zip -o config/opencloud/apps/unzip-1.0.2.zip && unzip config/opencloud/apps/unzip-1.0.2.zip -d config/opencloud/apps && rm config/opencloud/apps/unzip-1.0.2.zip
# NOTE: you need to restart the openCloud container to load the new extensions.
# OC_APPS_DIR=/your/local/opencloud/apps
#OC_APPS_DIR=/your/local/opencloud/apps
#
# The default language used by services and the WebUI.
# Uses ISO 639-1 language codes (e.g. "en", "de", "fr").
# Defaults to English if not set.
DEFAULT_LANGUAGE=
# Define the ldap-server storage location. Set the paths for config and data to a local path.
# LDAP_CERTS_DIR=
# LDAP_DATA_DIR=
# Leaving it default stores data in docker internal volumes.
LDAP_CERTS_DIR=
LDAP_DATA_DIR=
# S3 Storage configuration - optional
# OpenCloud supports S3 storage as primary storage.
@@ -175,7 +203,11 @@ START_ADDITIONAL_SERVICES=""
# search/tika.yml or by using the following command:
# docker compose -f docker-compose.yml -f search/tika.yml up -d
# Set the desired docker image tag or digest.
# Defaults to "apache/tika:latest-full"
# Defaults to "apache/tika:latest"
# The slim variant is recommended for most use cases as it provides core text extraction
# functionality with a smaller image size and faster startup time.
# Only use the full variant (apache/tika:latest-full) if you need specialized features
# like advanced OCR or specific image processing capabilities.
TIKA_IMAGE=
### IMPORTANT Note for Online Office Apps ###
@@ -187,9 +219,9 @@ TIKA_IMAGE=
# Domain of Collabora, where you can find the frontend.
# Defaults to "collabora.opencloud.test"
COLLABORA_DOMAIN=
# Domain of the wopiserver which handles Collabora.
# Defaults to "wopiserver.opencloud.test"
WOPISERVER_DOMAIN=
# NOTE: The WOPI server runs inside the main OpenCloud process and is served by
# the OpenCloud proxy on the main OpenCloud domain (OC_DOMAIN) under the /wopi and
# /collaboration paths. It no longer needs its own domain.
# Admin user for Collabora.
# Defaults to "admin".
# Collabora Admin Panel URL:
@@ -211,10 +243,26 @@ COLLABORA_SSL_VERIFICATION=false
COLLABORA_HOME_MODE=
### Euro Office Settings ###
# Domain of Euro Office, where you can find the document server.
# Defaults to "euro-office.opencloud.test"
EURO_OFFICE_DOMAIN=
# JWT Secret for Euro Office. IMPORTANT: Change this for production!
# Defaults to "changeme"
EURO_OFFICE_JWT_SECRET=
# Euro Office Docker image.
# Defaults to "ghcr.io/euro-office/documentserver"
EURO_OFFICE_DOCKER_IMAGE=
# Euro Office Docker tag.
# Defaults to "latest"
EURO_OFFICE_DOCKER_TAG=
### Virusscanner Settings ###
# IMPORTANT: If you enable antivirus, you also MUST configure the START_ADDITIONAL_SERVICES
# envvar in the OpenCloud Settings above by adding 'antivirus' to the list.
# The maximum scan size the virus scanner can handle, needs adjustment in the scanner config as well.
# The maximum scan size the virus scanner can handle, needs adjustment in the scanner config as well:
# For ClamAV, set CLAMD_CONF_StreamMaxLength in antivirus/clamav.yml to the same or a higher value.
# Usable common abbreviations: [KB, KiB, MB, MiB, GB, GiB, TB, TiB, PB, PiB, EB, EiB], example: 2GB.
# Defaults to "100MB"
#ANTIVIRUS_MAX_SCAN_SIZE=
@@ -275,6 +323,14 @@ LDAP_BIND_PASSWORD=
## Autoprovisioning Mode ##
# Use together with idm/external-idp.yml
# Role assignment driver for the proxy. Defaults to "oidc".
# Possible values: "oidc", "default"
# When set to "oidc", roles are assigned based on OIDC claims.
# When set to "default", all users get the 'user' role assigned.
PROXY_ROLE_ASSIGNMENT_DRIVER=
# Assign the default 'user' role to new users. Defaults to "false".
# Set to "true" when using PROXY_ROLE_ASSIGNMENT_DRIVER=default
GRAPH_ASSIGN_DEFAULT_USER_ROLE=
# If you want to use a keycloak for local testing, you can use testing/external-keycloak.yml and testing/ldap-manager.yml
# Domain of your Identity Provider.
IDP_DOMAIN=
@@ -284,6 +340,23 @@ IDP_DOMAIN=
IDP_ISSUER_URL=
# Url of the account edit page from your Identity Provider.
IDP_ACCOUNT_URL=
# Global Client ID: You can override this by specifying a custom client ID, or leave it blank to use the OC defaults, as described in the documentation
#OC_OIDC_CLIENT_ID=
# Declares which property should be used for the oidc claim
# Example: "roles"
PROXY_ROLE_ASSIGNMENT_OIDC_CLAIM=
# Defines the OIDC client scope
# Example: "openid profile email roles"
OC_OIDC_CLIENT_SCOPES=
# Client specific environment vars
#WEBFINGER_WEB_OIDC_CLIENT_ID=
#WEBFINGER_WEB_OIDC_CLIENT_SCOPES=
#WEBFINGER_IOS_OIDC_CLIENT_ID=
#WEBFINGER_IOS_OIDC_CLIENT_SCOPES=
#WEBFINGER_ANDROID_OIDC_CLIENT_ID=
#WEBFINGER_ANDROID_OIDC_CLIENT_SCOPES=
#WEBFINGER_DESKTOP_OIDC_CLIENT_ID=
#WEBFINGER_DESKTOP_OIDC_CLIENT_SCOPES=
## Shared User Directory Mode ##
# Use together with idm/ldap-keycloak.yml and traefik/ldap-keycloak.yml
@@ -293,11 +366,26 @@ KEYCLOAK_DOMAIN=
KEYCLOAK_ADMIN=
# Admin user login password. Defaults to "admin".
KEYCLOAK_ADMIN_PASSWORD=
# Configure the log level for Keycloak.
# Possible values are "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". Default is "INFO".
KC_LOG_LEVEL=
# Keycloak Database username. Defaults to "keycloak".
KC_DB_USERNAME=
# Keycloak Database password. Defaults to "keycloak".
KC_DB_PASSWORD=
## Demo Users ##
# Enable demo users and groups in the shared LDAP directory.
# To enable, create custom/ldap-keycloak-demo-users.yml with:
# services:
# ldap-server:
# volumes:
# - ./config/ldap/ldif/30_demo_users.ldif:/ldifs/30_demo_users.ldif
# - ./config/ldap/ldif/40_demo_groups.ldif:/ldifs/40_demo_groups.ldif
#
# Then add it to: COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:traefik/opencloud.yml:traefik/collabora.yml:idm/ldap-keycloak.yml:traefik/ldap-keycloak.yml:custom/ldap-keycloak-demo-users.yml
# WARNING: Do not use in production.
### Radicale Setting ###
# Radicale is a small open-source CalDAV (calendars, to-do lists) and CardDAV (contacts) server.
# When enabled OpenCloud is configured as a reverse proxy for Radicale, providing all authenticated

111
README.md
View File

@@ -12,10 +12,12 @@ OpenCloud Compose offers a modular approach to deploying OpenCloud with several
- **Standard deployment** with Traefik reverse proxy and Let's Encrypt certificates or certificates from files
- **External proxy** support for environments with existing reverse proxies (like Nginx, Caddy, etc.)
- **Collabora Online** integration for document editing
- **Euro Office** integration for document editing
- **Keycloak and LDAP** integration for centralized identity management
- **Full text search** with Apache Tika for content extraction and metadata analysis
- **Monitoring** with metrics endpoints for observability and performance monitoring
- **Radicale** integration for Calendar and Contacts
- **ClamAV** antivirus scanning with ClamAV
## Quick Start Guide
@@ -106,9 +108,12 @@ This setup includes:
### With Collabora Online
> [!NOTE]
> Collabora Online and [Euro Office](#with-euro-office) are mutually exclusive web office backends — both use the same `collaboration` (WOPI) service, which runs inside the main OpenCloud process. Enable only one of them at a time.
Include Collabora for document editing using either method:
> **DNS Requirements**: This setup requires DNS entries for the main OpenCloud domain, Collabora subdomain, and WOPI server subdomain. Configure DNS A/AAAA records for your domains (e.g., `cloud.example.com`, `collabora.example.com`, `wopiserver.example.com`) or use a wildcard DNS entry (`*.example.com`).
> **DNS Requirements**: This setup requires DNS entries for the main OpenCloud domain and the Collabora subdomain. The WOPI server is served by OpenCloud on the main domain, so it does not need its own subdomain. Configure DNS A/AAAA records for your domains (e.g., `cloud.example.com`, `collabora.example.com`) or use a wildcard DNS entry (`*.example.com`).
Using `-f` flags:
```bash
@@ -123,9 +128,44 @@ COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:traefik/opencloud.yml:tr
> **For local development only**: Add to `/etc/hosts`:
> ```
> 127.0.0.1 collabora.opencloud.test
> 127.0.0.1 wopiserver.opencloud.test
> ```
> [!IMPORTANT]
> **Upgrading from a previous setup**: The `collaboration` (WOPI) service no longer runs as a separate container or on its own `wopiserver.*` domain — it now runs inside the main OpenCloud process and is served by the OpenCloud proxy on the main domain under the `/wopi` and `/collaboration` paths. When upgrading:
> - Pull the latest compose files and recreate the stack (`docker compose up -d`). The old `collaboration` container is removed automatically.
> - You can retire the `wopiserver.*` DNS entry (and its `/etc/hosts` line), its reverse-proxy/Traefik route, and the `WOPISERVER_DOMAIN` variable in `.env` — all are now unused.
> - If you run behind an external proxy, make sure it forwards `/wopi` and `/collaboration` on the OpenCloud domain to OpenCloud (port 9200). Forwarding the whole OpenCloud domain, as already configured, covers this.
### With Euro Office
> [!NOTE]
> Euro Office and [Collabora Online](#with-collabora-online) are mutually exclusive web office backends — both use the same `collaboration` (WOPI) service, which runs inside the main OpenCloud process. Enable only one of them at a time.
Include Euro Office for document editing using either method:
> **DNS Requirements**: This setup requires DNS entries for the main OpenCloud domain and the Euro Office subdomain. The WOPI server is served by OpenCloud on the main domain, so it does not need its own subdomain. Configure DNS A/AAAA records for your domains (e.g., `cloud.example.com`, `euro-office.example.com`) or use a wildcard DNS entry (`*.example.com`).
Using `-f` flags:
```bash
docker compose -f docker-compose.yml -f weboffice/euro-office.yml -f traefik/opencloud.yml -f traefik/euro-office.yml up -d
```
Or by setting in `.env`:
```
COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:traefik/opencloud.yml:traefik/euro-office.yml
```
> **For local development only**: Add to `/etc/hosts`:
> ```
> 127.0.0.1 euro-office.opencloud.test
> ```
> [!IMPORTANT]
> Set a strong `EURO_OFFICE_JWT_SECRET` in your `.env` file for production. The default value (`changeme`) is intended for local development only.
> [!NOTE]
> Upgrading from a previous setup? See [Upgrading from a previous setup](#with-collabora-online) under Collabora Online — the WOPI server changes (no more separate container or `wopiserver.*` domain) apply to Euro Office as well.
### With Full Text Search
Enable full text search capabilities with Apache Tika using either method:
@@ -147,6 +187,14 @@ This setup includes:
- Full text search functionality in the OpenCloud interface
- Support for documents, PDFs, images, and other file types
**Tika Image Variant:**
By default, OpenCloud Compose uses `apache/tika:latest` which provides:
- Smaller image size (~300MB vs ~1.2GB for the full variant)
- Faster container startup and deployment
- Core text extraction functionality for common document formats (PDF, Office docs, text files, etc.)
The base variant is recommended for most use cases. If you need advanced features like specialized OCR processing or specific image format support, you can override the image by setting `TIKA_IMAGE=apache/tika:latest-full` in your `.env` file.
### With Radicale
Enable CalDAV (calendars, to-do lists) and CardDAV (contacts) server.
@@ -217,12 +265,52 @@ COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:external-proxy/opencloud
This exposes the necessary ports:
- OpenCloud: 9200
- Collabora: 9980
- WOPI server: 9300
The WOPI server runs inside the OpenCloud process and is served on the OpenCloud port (9200) under the `/wopi` and `/collaboration` paths, so no separate port needs to be exposed for it.
To use Euro Office instead of Collabora behind an external proxy, swap the web office compose files:
```bash
docker compose -f docker-compose.yml -f weboffice/euro-office.yml -f external-proxy/opencloud.yml -f external-proxy/euro-office.yml up -d
```
Or by setting in `.env`:
```
COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:external-proxy/opencloud.yml:external-proxy/euro-office.yml
```
This exposes the necessary ports:
- OpenCloud: 9200
- Euro Office: 9900
As with Collabora, the WOPI server is served on the OpenCloud port (9200) under the `/wopi` and `/collaboration` paths and needs no separate port.
> [!WARNING]
> `external-proxy/euro-office.yml` binds the exposed ports to `127.0.0.1` only. If your external proxy runs on a different host, use `external-proxy/euro-office-exposed.yml`, which binds to all interfaces (`0.0.0.0`). Only expose these ports when you know what you are doing.
**Please note:**
If you're using **Nginx Proxy Manager (NPM)**, you **should NOT** activate **"Block Common Exploits"** for the Proxy Host.
Otherwise, the desktop app authentication will return **error 403 Forbidden**.
### ClamAV anti-virus
Enable anti-virus scans for uploaded files.
Using `-f` flags:
```bash
docker compose -f docker-compose.yml -f antivirus/clamav.yml -f traefik/opencloud.yml up -d
```
Or by setting in `.env`:
```
COMPOSE_FILE=docker-compose.yml:antivirus/clamav.yml:traefik/opencloud.yml
```
**Important:** adjust the variable in `.env` to start the antivirus service. Add additional services separated by comma, e.g. `notifications,antivirus`:
```
START_ADDITIONAL_SERVICES="antivirus"
```
## SSL Certificate Support
@@ -231,12 +319,12 @@ OpenCloud Compose supports adding SSL certificates for public domains and develo
### Use Let's Encrypt with ACME Challenge
1. **Enable Let's Encrypt**:
- Set `TRAEFIK_LETSENCRYPT_EMAIL` to your email address for the ACME challenge
- Set `TRAEFIK_ACME_MAIL` to your email address for the ACME challenge
- Set `TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt"` to use Let's Encrypt (default value)
```bash
# In your .env file
TRAEFIK_LETSENCRYPT_EMAIL=devops@your-domain.tld
TRAEFIK_ACME_MAIL=devops@your-domain.tld
TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt"
```
@@ -257,10 +345,6 @@ OpenCloud Compose supports adding SSL certificates for public domains and develo
keyFile: /certs/opencloud.test.key
stores:
- default
- certFile: /certs/wildcard.example.com.crt
keyFile: /certs/wildcard.example.com.key
stores:
- default
```
3. **Configure environment variables**:
@@ -317,15 +401,18 @@ Key variables:
| `OC_DATA_DIR` | Data directory path | (Docker volume) |
| `INSECURE` | Skip certificate validation | true |
| `COLLABORA_DOMAIN` | Collabora domain | collabora.opencloud.test |
| `WOPISERVER_DOMAIN` | WOPI server domain | wopiserver.opencloud.test |
| `TIKA_IMAGE` | Apache Tika image tag | apache/tika:latest-full |
| `EURO_OFFICE_DOMAIN` | Euro Office document server domain | euro-office.opencloud.test |
| `EURO_OFFICE_JWT_SECRET` | JWT secret for Euro Office (change for production!) | changeme |
| `EURO_OFFICE_DOCKER_IMAGE` | Euro Office Docker image | ghcr.io/euro-office/documentserver |
| `EURO_OFFICE_DOCKER_TAG` | Euro Office Docker tag | latest |
| `TIKA_IMAGE` | Apache Tika image tag | apache/tika:slim |
| `KEYCLOAK_DOMAIN` | Keycloak domain | keycloak.opencloud.test |
| `KEYCLOAK_ADMIN` | Keycloak admin username | kcadmin |
| `KEYCLOAK_ADMIN_PASSWORD` | Keycloak admin password | admin |
| `LDAP_BIND_PASSWORD` | LDAP password for the bind user | admin |
| `KC_DB_USERNAME` | Database user for keycloak | keycloak |
| `KC_DB_PASSWORD` | Database password for keycloak | keycloak |
| `TRAEFIK_LETSENCRYPT_EMAIL` | Email Address for the Let's Encrypt ACME challenge | example@example.org |
| `TRAEFIK_ACME_MAIL` | Email Address for the Let's Encrypt ACME challenge | example@example.org |
| `TRAEFIK_SERVICES_TLS_CONFIG` | Tell traefik and the services which TLS config to use | tls.certresolver=letsencrypt |
| `TRAEFIK_CERTS_DIR` | Directory for custom certificates. | ./certs |

38
antivirus/clamav.yml Normal file
View File

@@ -0,0 +1,38 @@
---
services:
opencloud:
environment:
POSTPROCESSING_STEPS: "virusscan"
STORAGE_USERS_DATA_GATEWAY_URL: "http://opencloud:9200/data"
ANTIVIRUS_MAX_SCAN_SIZE: ${ANTIVIRUS_MAX_SCAN_SIZE:-100MB}
ANTIVIRUS_INFECTED_FILE_HANDLING: abort
ANTIVIRUS_MAX_SCAN_SIZE_MODE: ${ANTIVIRUS_MAX_SCAN_SIZE_MODE:-partial}
ANTIVIRUS_WORKERS: 1
ANTIVIRUS_CLAMAV_SOCKET: /var/run/clamav/clamd.sock
ANTIVIRUS_SCANNER_TYPE: clamav
volumes:
- clamav-socket:/var/run/clamav
depends_on:
clamav:
condition: service_healthy
clamav:
image: clamav/clamav:${CLAMAV_DOCKER_TAG:-latest}
environment:
# Accepts a number with optional K, M or G suffix. Must be greater or equal to ANTIVIRUS_MAX_SCAN_SIZE above.
# K = KiB (1024), M = MiB (1024 * 1024), G = GiB (1024 * 1024 * 1024)
CLAMD_CONF_StreamMaxLength: 100M
networks:
opencloud-net:
volumes:
- clamav-socket:/tmp
- clamav-db:/var/lib/clamav
logging:
driver: ${LOG_DRIVER:-local}
restart: always
healthcheck:
test: sh -c "[ -S /tmp/clamd.sock ]"
timeout: 1s
retries: 20
volumes:
clamav-db:
clamav-socket:

View File

@@ -0,0 +1,71 @@
app_registry:
mimetypes:
- mime_type: application/pdf
extension: pdf
name: PDF
description: PDF document
icon: ''
default_app: ''
allow_creation: false
- mime_type: application/vnd.oasis.opendocument.text
extension: odt
name: OpenDocument
description: OpenDocument text document
icon: ''
default_app: Collabora
allow_creation: true
- mime_type: application/vnd.oasis.opendocument.spreadsheet
extension: ods
name: OpenSpreadsheet
description: OpenDocument spreadsheet document
icon: ''
default_app: Collabora
allow_creation: true
- mime_type: application/vnd.oasis.opendocument.presentation
extension: odp
name: OpenPresentation
description: OpenDocument presentation document
icon: ''
default_app: Collabora
- mime_type: application/vnd.oasis.opendocument.graphics
extension: odg
name: OpenGraphics
description: OpenDocument graphics document
icon: ''
default_app: Collabora
allow_creation: true
- mime_type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
extension: docx
name: Microsoft Word
description: Microsoft Word document
icon: ''
default_app: Euro-Office
allow_creation: true
- mime_type: application/vnd.openxmlformats-officedocument.wordprocessingml.form
extension: docxf
name: Form Document
description: Form Document
icon: ''
default_app: Euro-Office
allow_creation: true
- mime_type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
extension: xlsx
name: Microsoft Excel
description: Microsoft Excel document
icon: ''
default_app: Euro-Office
allow_creation: true
- mime_type: application/vnd.openxmlformats-officedocument.presentationml.presentation
extension: pptx
name: Microsoft PowerPoint
description: Microsoft PowerPoint document
icon: ''
default_app: Euro-Office
allow_creation: true
- mime_type: application/vnd.jupyter
extension: ipynb
name: Jupyter Notebook
description: Jupyter Notebook
icon: ''
default_app: ''
allow_creation: true

View File

@@ -1,5 +1,8 @@
#!/bin/bash
printenv
# print env variables for trace/debug log levels
log_level=$(printf '%s' "$KC_LOG_LEVEL" | tr '[:upper:]' '[:lower:]')
case "$log_level" in trace|debug) printenv ;; *) ;; esac
# replace openCloud domain and LDAP password in keycloak realm import
mkdir /opt/keycloak/data/import
sed -e "s/cloud.opencloud.test/${OC_DOMAIN}/g" -e "s/ldap-admin-password/${LDAP_ADMIN_PASSWORD:-admin}/g" /opt/keycloak/data/import-dist/openCloud-realm.json > /opt/keycloak/data/import/openCloud-realm.json

View File

@@ -1,8 +1,9 @@
:root {
--pf-global--primary-color--100: #e2baff;
--pf-global--primary-color--200: #e2baff;
--pf-global--primary-color--dark-100: #e2baff;
--pf-global--Color--light-100: #20434f;
--pf-v5-global--primary-color--100: #e2baff;
--pf-v5-global--primary-color--200: #e2baff;
--pf-v5-global--primary-color--dark-100: #e2baff;
--pf-v5-c-button--m-secondary--Color: #e2baff;
--pf-v5-global--Color--light-100: #20434f;
}
@font-face {
@@ -21,18 +22,36 @@
body {
font-family: "OpenCloud", "Open Sans", Helvetica, Arial, sans-serif;
background: url(../img/background.png) no-repeat center !important;
background: url(../img/background.png) no-repeat center fixed !important;
background-size: cover !important;
}
.kc-logo-text {
background-image: url(../img/logo.svg) !important;
display: block;
width: 300px;
height: 63px;
background: url('../img/logo.svg') no-repeat center;
background-size: contain;
width: 400px;
margin: 0 !important;
}
#kc-header-wrapper{
.kc-logo-text span {
display: none;
}
#kc-header-wrapper {
display: flex;
justify-content: center;
}
.pf-v5-c-login__main-header {
border-top: 4px solid var(--pf-v5-global--primary-color--100);
}
@media (min-width: 1200px) {
.pf-v5-c-login__container {
grid-template-columns: 34rem;
grid-template-areas:
"header"
"main";
}
}

View File

@@ -1,4 +1,4 @@
parent=keycloak
parent=keycloak.v2
import=common/keycloak
styles=css/login.css css/theme.css

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{t as e}from"./preload-helper-DafEc2pQ.mjs";await(await e(()=>import(`./remoteEntry-lxWu31Tr.mjs`),[],import.meta.url)).init();

View File

@@ -0,0 +1 @@
import"./dist-r7AkbZvS.mjs";var e={"@opencloud-eu/web-client":{name:`@opencloud-eu/web-client`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-client' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"@opencloud-eu/web-client/graph":{name:`@opencloud-eu/web-client/graph`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-client/graph' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"@opencloud-eu/web-client/graph/generated":{name:`@opencloud-eu/web-client/graph/generated`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-client/graph/generated' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"@opencloud-eu/web-client/ocs":{name:`@opencloud-eu/web-client/ocs`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-client/ocs' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"@opencloud-eu/web-client/sse":{name:`@opencloud-eu/web-client/sse`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-client/sse' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"@opencloud-eu/web-client/webdav":{name:`@opencloud-eu/web-client/webdav`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-client/webdav' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"@opencloud-eu/web-pkg":{name:`@opencloud-eu/web-pkg`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module '@opencloud-eu/web-pkg' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},luxon:{name:`luxon`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module 'luxon' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},pinia:{name:`pinia`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module 'pinia' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},vue:{name:`vue`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module 'vue' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}},"vue3-gettext":{name:`vue3-gettext`,version:void 0,scope:[`default`],loaded:!1,from:`maps`,async get(){throw Error(`[Module Federation] Shared module 'vue3-gettext' must be provided by host`)},shareConfig:{singleton:!0,requiredVersion:`*`,import:!1}}},t=[];export{t as usedRemotes,e as usedShared};

View File

@@ -0,0 +1 @@
import{t as e}from"./src-CIfRBuLG.mjs";export{e as default};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
var e=`__mf_init____mf__virtual/maps__mf_v__runtimeInit__mf_v__.js__`,t=globalThis[e];if(!t){let n,r,i=new Promise((e,t)=>{n=e,r=t});t=globalThis[e]={initPromise:i,initResolve:n,initReject:r},typeof window>`u`&&n({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}var n=await t.initPromise.then(e=>e.loadShare(`vue3-gettext`,{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:`*`}}})).then(e=>typeof e==`function`?e():e);n.__esModule,n.default;var{createGettext:r,defineGettextConfig:i,makePO:a,parseSrc:o,tokenize:s,useGettext:c}=n;export{c as t};

View File

@@ -0,0 +1 @@
var e=`__mf_init____mf__virtual/maps__mf_v__runtimeInit__mf_v__.js__`,t=globalThis[e];if(!t){let n,r,i=new Promise((e,t)=>{n=e,r=t});t=globalThis[e]={initPromise:i,initResolve:n,initReject:r},typeof window>`u`&&n({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}var n=await t.initPromise.then(e=>e.loadShare(`vue`,{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:`*`}}})).then(e=>typeof e==`function`?e():e);n.__esModule,n.default;var{compile:r,Transition:i,TransitionGroup:a,VueElement:ee,createApp:te,createSSRApp:ne,defineCustomElement:re,defineSSRCustomElement:ie,hydrate:ae,initDirectivesForSSR:oe,nodeOps:se,patchProp:ce,render:le,useCssModule:ue,useCssVars:de,useHost:fe,useShadowRoot:pe,vModelCheckbox:me,vModelDynamic:he,vModelRadio:ge,vModelSelect:_e,vModelText:o,vShow:s,withKeys:c,withModifiers:l,EffectScope:u,ReactiveEffect:d,TrackOpTypes:f,TriggerOpTypes:p,customRef:m,effect:h,effectScope:g,getCurrentScope:_,getCurrentWatcher:v,isProxy:y,isReactive:b,isReadonly:x,isRef:S,isShallow:C,markRaw:w,onScopeDispose:T,onWatcherCleanup:E,proxyRefs:D,reactive:O,readonly:k,ref:A,shallowReactive:j,shallowReadonly:M,shallowRef:N,stop:P,toRaw:F,toRef:I,toRefs:ve,toValue:ye,triggerRef:be,unref:L,camelize:xe,capitalize:Se,normalizeClass:R,normalizeProps:Ce,normalizeStyle:we,toDisplayString:z,toHandlerKey:Te,BaseTransition:Ee,BaseTransitionPropsValidators:De,Comment:Oe,DeprecationTypes:ke,ErrorCodes:Ae,ErrorTypeStrings:je,Fragment:Me,KeepAlive:Ne,Static:Pe,Suspense:Fe,Teleport:Ie,Text:Le,assertNumber:Re,callWithAsyncErrorHandling:ze,callWithErrorHandling:Be,cloneVNode:Ve,compatUtils:He,computed:B,createBlock:V,createCommentVNode:H,createElementBlock:U,createElementVNode:W,createHydrationRenderer:Ue,createPropsRestProxy:We,createRenderer:Ge,createSlots:Ke,createStaticVNode:qe,createTextVNode:Je,createVNode:Ye,defineAsyncComponent:Xe,defineComponent:G,defineEmits:Ze,defineExpose:K,defineModel:Qe,defineOptions:$e,defineProps:et,defineSlots:tt,devtools:nt,getCurrentInstance:rt,getTransitionRawChildren:it,guardReactiveProps:at,h:ot,handleError:st,hasInjectionContext:ct,hydrateOnIdle:lt,hydrateOnInteraction:ut,hydrateOnMediaQuery:dt,hydrateOnVisible:ft,initCustomFormatter:pt,inject:mt,isMemoSame:ht,isRuntimeOnly:gt,isVNode:_t,mergeDefaults:vt,mergeModels:yt,mergeProps:bt,nextTick:xt,onActivated:St,onBeforeMount:Ct,onBeforeUnmount:q,onBeforeUpdate:wt,onDeactivated:Tt,onErrorCaptured:Et,onMounted:J,onRenderTracked:Dt,onRenderTriggered:Ot,onServerPrefetch:kt,onUnmounted:Y,onUpdated:At,openBlock:X,popScopeId:jt,provide:Mt,pushScopeId:Nt,queuePostFlushCb:Pt,registerRuntimeCompiler:Ft,renderList:It,renderSlot:Lt,resolveComponent:Rt,resolveDirective:zt,resolveDynamicComponent:Bt,resolveFilter:Vt,resolveTransitionHooks:Ht,setBlockTracking:Ut,setDevtoolsHook:Wt,setTransitionHooks:Gt,ssrContextKey:Kt,ssrUtils:qt,toHandlers:Jt,transformVNodeArgs:Yt,useAttrs:Xt,useId:Zt,useModel:Qt,useSSRContext:$t,useSlots:en,useTemplateRef:Z,useTransitionState:tn,version:nn,warn:rn,watch:Q,watchEffect:an,watchPostEffect:on,watchSyncEffect:sn,withAsyncContext:cn,withCtx:$,withDefaults:ln,withDirectives:un,withMemo:dn,withScopeId:fn}=n;export{G as _,Z as a,A as c,z as d,B as f,W as g,U as h,X as i,L as l,H as m,J as n,Q as o,V as p,Y as r,$ as s,q as t,R as u};

View File

@@ -0,0 +1 @@
var e=`modulepreload`,t=function(e,t){return new URL(e,t).href},n={},r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})};export{r as t};

View File

@@ -0,0 +1,2 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./localSharedImportMap-CALnqYrs.mjs","./dist-r7AkbZvS.mjs","./preload-helper-DafEc2pQ.mjs","./virtualExposes-CZMUMkHF.mjs"])))=>i.map(i=>d[i]);
import{t as e}from"./dist-r7AkbZvS.mjs";import{t}from"./preload-helper-DafEc2pQ.mjs";typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var n=`__mf_init____mf__virtual/maps__mf_v__runtimeInit__mf_v__.js__`,r=globalThis[n];if(!r){let e,t,i=new Promise((n,r)=>{e=n,t=r});r=globalThis[n]={initPromise:i,initResolve:e,initReject:t},typeof window>`u`&&e({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}var i=r.initResolve,a={},o=`default`,s=`maps`,c,l;async function u(){return c??=t(()=>import(`./localSharedImportMap-CALnqYrs.mjs`),__vite__mapDeps([0,1,2]),import.meta.url),c}async function d(){return l??=t(()=>import(`./virtualExposes-CZMUMkHF.mjs`).then(e=>e.default??e),__vite__mapDeps([3,2]),import.meta.url),l}async function f(t={},n=[]){let{usedShared:r,usedRemotes:c}=await u(),l=e({name:s,remotes:c,shared:r,plugins:[],shareStrategy:`version-first`});var d=a[o];if(d||=a[o]={from:s},!(n.indexOf(d)>=0)){n.push(d),l.initShareScopeMap(`default`,t),i(l);try{await Promise.all(await l.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))}catch(e){console.error(`[Module Federation]`,e)}return l}}async function p(e){let t=await d();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return t[e]().then(e=>()=>e)}export{p as get,f as init};

View File

@@ -0,0 +1 @@
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{c as n,o as t};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{t as e}from"./src-CIfRBuLG.mjs";export{e as default};

View File

@@ -0,0 +1,2 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../assets/src-D755RU42.css"])))=>i.map(i=>d[i]);
import{t as e}from"./preload-helper-DafEc2pQ.mjs";var t={},n=new Set;async function r(e){if(typeof document>`u`)return;let r=t[e]||[];await Promise.all(r.map(e=>{let t=new URL(e,import.meta.url).href;return n.has(t)||(n.add(t),document.querySelector(`link[rel="stylesheet"][data-mf-href="${t}"]`))?Promise.resolve():new Promise((e,n)=>{let r=document.createElement(`link`);r.rel=`stylesheet`,r.href=t,r.setAttribute(`data-mf-href`,t),r.onload=()=>e(),r.onerror=()=>n(Error(`[Module Federation] Failed to load CSS asset: ${t}`)),document.head.appendChild(r)})}))}var i={".":async()=>{await r(`.`);let t=await e(()=>import(`./maps-BAf8IhJ5.mjs`),__vite__mapDeps([0]),import.meta.url),n={};return Object.assign(n,t),Object.defineProperty(n,`__esModule`,{value:!0,enumerable:!1}),n}};export{i as default};

View File

@@ -1,3 +1,3 @@
{
"entrypoint": "js/maps-uKkx1qsf.js"
"entrypoint": "js/remoteEntry-lxWu31Tr.mjs"
}

View File

@@ -4,11 +4,12 @@ directives:
connect-src:
- '''self'''
- 'blob:'
- 'https://${COMPANION_DOMAIN|companion.opencloud.test}/'
- 'wss://${COMPANION_DOMAIN|companion.opencloud.test}/'
- 'https://${COMPANION_DOMAIN|companion.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
- 'wss://${COMPANION_DOMAIN|companion.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
- 'https://raw.githubusercontent.com/opencloud-eu/awesome-apps/'
- 'https://${IDP_DOMAIN|keycloak.opencloud.test}/'
- 'https://${IDP_DOMAIN|keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
- 'https://update.opencloud.eu/'
- 'https://tile.openstreetmap.org/'
default-src:
- '''none'''
font-src:
@@ -20,9 +21,11 @@ directives:
- 'blob:'
- 'https://embed.diagrams.net/'
# In contrary to bash and docker the default is given after the | character
- 'https://${COLLABORA_DOMAIN|collabora.opencloud.test}/'
- 'https://${COLLABORA_DOMAIN|collabora.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
- 'https://${EURO_OFFICE_DOMAIN|euro-office.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
# This is needed for the external-sites web extension when embedding sites
- 'https://docs.opencloud.eu'
- 'https://${IDP_DOMAIN|keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
img-src:
- '''self'''
- 'data:'
@@ -30,7 +33,8 @@ directives:
- 'https://raw.githubusercontent.com/opencloud-eu/awesome-apps/'
- 'https://tile.openstreetmap.org/'
# In contrary to bash and docker the default is given after the | character
- 'https://${COLLABORA_DOMAIN|collabora.opencloud.test}/'
- 'https://${COLLABORA_DOMAIN|collabora.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
- 'https://${EURO_OFFICE_DOMAIN|euro-office.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
manifest-src:
- '''self'''
media-src:
@@ -41,7 +45,10 @@ directives:
script-src:
- '''self'''
- '''unsafe-inline'''
- 'https://${IDP_DOMAIN|keycloak.opencloud.test}/'
- 'https://${IDP_DOMAIN|keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
style-src:
- '''self'''
- '''unsafe-inline'''
worker-src:
- "'self'"
- 'blob:'

View File

@@ -14,10 +14,10 @@ add_arg "--log.level=${TRAEFIK_LOG_LEVEL:-ERROR}"
# enable dashboard
add_arg "--api.dashboard=true"
# define entrypoints
add_arg "--entryPoints.http.address=:80"
add_arg "--entryPoints.http.address=:${TRAEFIK_PORT_HTTP:-80}"
add_arg "--entryPoints.http.http.redirections.entryPoint.to=https"
add_arg "--entryPoints.http.http.redirections.entryPoint.scheme=https"
add_arg "--entryPoints.https.address=:443"
add_arg "--entryPoints.https.address=:${TRAEFIK_PORT_HTTPS:-443}"
# change default timeouts for long-running requests
# this is needed for webdav clients that do not support the TUS protocol
add_arg "--entryPoints.https.transport.respondingTimeouts.readTimeout=12h"

View File

@@ -1,9 +1,11 @@
---
services:
opencloud:
image: ${OC_DOCKER_IMAGE:-opencloudeu/opencloud-rolling}:${OC_DOCKER_TAG:-latest}
# renovate: depName=opencloudeu/opencloud-rolling
image: ${OC_DOCKER_IMAGE:-opencloudeu/opencloud-rolling}:${OC_DOCKER_TAG:-7.2.0}
# changelog: https://github.com/opencloud-eu/opencloud/tree/main/changelog
# release notes: https://docs.opencloud.eu/opencloud_release_notes.html
user: ${OC_CONTAINER_UID_GID:-1000:1000}
networks:
opencloud-net:
entrypoint:
@@ -15,7 +17,7 @@ services:
environment:
# enable services that are not started automatically
OC_ADD_RUN_SERVICES: ${START_ADDITIONAL_SERVICES}
OC_URL: https://${OC_DOMAIN:-cloud.opencloud.test}
OC_URL: https://${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
OC_LOG_LEVEL: ${LOG_LEVEL:-info}
OC_LOG_COLOR: "${LOG_PRETTY:-false}"
OC_LOG_PRETTY: "${LOG_PRETTY:-false}"
@@ -35,22 +37,25 @@ services:
NOTIFICATIONS_SMTP_SENDER: "${SMTP_SENDER:-OpenCloud Notifications <notifications@cloud.opencloud.test>}"
NOTIFICATIONS_SMTP_USERNAME: "${SMTP_USERNAME}"
NOTIFICATIONS_SMTP_PASSWORD: "${SMTP_PASSWORD}"
NOTIFICATIONS_SMTP_INSECURE: "${SMTP_INSECURE}"
NOTIFICATIONS_SMTP_INSECURE: "${SMTP_INSECURE:-false}"
NOTIFICATIONS_SMTP_AUTHENTICATION: "${SMTP_AUTHENTICATION}"
NOTIFICATIONS_SMTP_ENCRYPTION: "${SMTP_TRANSPORT_ENCRYPTION:-none}"
FRONTEND_ARCHIVER_MAX_SIZE: "10000000000"
FRONTEND_CHECK_FOR_UPDATES: "${CHECK_FOR_UPDATES:-true}"
PROXY_CSP_CONFIG_FILE_LOCATION: /etc/opencloud/csp.yaml
# enable to allow using the banned passwords list
OC_PASSWORD_POLICY_BANNED_PASSWORDS_LIST: banned-password-list.txt
# control the password enforcement and policy for public shares
OC_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD: "${OC_SHARING_PUBLIC_SHARE_MUST_HAVE_PASSWORD:-true}"
OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD: "${OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD:-true}"
OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD: "${OC_SHARING_PUBLIC_WRITEABLE_SHARE_MUST_HAVE_PASSWORD:-false}"
OC_PASSWORD_POLICY_DISABLED: "${OC_PASSWORD_POLICY_DISABLED:-false}"
OC_PASSWORD_POLICY_MIN_CHARACTERS: "${OC_PASSWORD_POLICY_MIN_CHARACTERS:-8}"
OC_PASSWORD_POLICY_MIN_LOWERCASE_CHARACTERS: "${OC_PASSWORD_POLICY_MIN_LOWERCASE_CHARACTERS:-1}"
OC_PASSWORD_POLICY_MIN_UPPERCASE_CHARACTERS: "${OC_PASSWORD_POLICY_MIN_UPPERCASE_CHARACTERS:-1}"
OC_PASSWORD_POLICY_MIN_DIGITS: "${OC_PASSWORD_POLICY_MIN_DIGITS:-1}"
OC_PASSWORD_POLICY_MIN_SPECIAL_CHARACTERS: "${OC_PASSWORD_POLICY_MIN_SPECIAL_CHARACTERS:-1}"
# default language for services/WebUI; defaults to English, language code (ISO 639-1, e.g. de, en, fr)
OC_DEFAULT_LANGUAGE: ${DEFAULT_LANGUAGE}
volumes:
- ./config/opencloud/csp.yaml:/etc/opencloud/csp.yaml
- ./config/opencloud/banned-password-list.txt:/etc/opencloud/banned-password-list.txt

View File

@@ -0,0 +1,7 @@
---
# only expose the ports when you know what you are doing!
services:
collabora:
ports:
# expose the collabora server on all interfaces
- "0.0.0.0:9980:9980"

View File

@@ -1,10 +1,6 @@
---
services:
collaboration:
ports:
# expose the wopi server
- "9300:9300"
collabora:
ports:
# expose the collabora server
- "9980:9980"
# expose the collabora server on localhost
- "127.0.0.1:9980:9980"

View File

@@ -0,0 +1,7 @@
---
# only expose the ports when you know what you are doing!
services:
euro-office:
ports:
# expose the euro-office document server on all interfaces
- "0.0.0.0:9900:80"

View File

@@ -0,0 +1,6 @@
---
services:
euro-office:
ports:
# expose the euro-office document server on localhost
- "127.0.0.1:9900:80"

View File

@@ -0,0 +1,8 @@
---
# only expose the ports when you know what you re doing!
services:
keycloak:
ports:
# expose the keycloak server on all interfaces
- "0.0.0.0:9000:9000"
- "0.0.0.0:8080:8080"

View File

@@ -2,5 +2,6 @@
services:
keycloak:
ports:
- "9000:9000"
- "8080:8080"
# expose the keycloak server on localhost
- "127.0.0.1:9000:9000"
- "127.0.0.1:8080:8080"

View File

@@ -0,0 +1,10 @@
---
# only expose the ports when you know what you are doing!
services:
opencloud:
environment:
# bind to all interfaces
PROXY_HTTP_ADDR: "0.0.0.0:9200"
ports:
# expose the opencloud server on all interfaces
- "0.0.0.0:9200:9200"

View File

@@ -5,5 +5,5 @@ services:
# bind to all interfaces
PROXY_HTTP_ADDR: "0.0.0.0:9200"
ports:
# expose the opencloud server
- "9200:9200"
# expose the opencloud server on localhost
- "127.0.0.1:9200:9200"

View File

@@ -14,8 +14,18 @@ services:
GRAPH_LDAP_REFINT_ENABLED: "true" # osixia has refint enabled.
FRONTEND_READONLY_USER_ATTRIBUTES: "user.onPremisesSamAccountName,user.displayName,user.mail,user.passwordProfile,user.accountEnabled,user.appRoleAssignments"
PROXY_OIDC_REWRITE_WELLKNOWN: "true"
WEB_OIDC_CLIENT_ID: ${OC_OIDC_CLIENT_ID:-web}
PROXY_ROLE_ASSIGNMENT_DRIVER: "oidc"
OC_OIDC_CLIENT_ID: ${OC_OIDC_CLIENT_ID}
OC_OIDC_CLIENT_SCOPES: ${OC_OIDC_CLIENT_SCOPES}
PROXY_ROLE_ASSIGNMENT_OIDC_CLAIM: ${PROXY_ROLE_ASSIGNMENT_OIDC_CLAIM:-roles}
WEBFINGER_WEB_OIDC_CLIENT_ID: ${WEBFINGER_WEB_OIDC_CLIENT_ID:-web}
WEBFINGER_WEB_OIDC_CLIENT_SCOPES: ${WEBFINGER_WEB_OIDC_CLIENT_SCOPES:-openid profile email}
WEBFINGER_ANDROID_OIDC_CLIENT_ID: ${WEBFINGER_ANDROID_OIDC_CLIENT_ID:-OpenCloudAndroid}
WEBFINGER_ANDROID_OIDC_CLIENT_SCOPES: ${WEBFINGER_ANDROID_OIDC_CLIENT_SCOPES:-openid profile email offline_access}
WEBFINGER_IOS_OIDC_CLIENT_ID: ${WEBFINGER_IOS_OIDC_CLIENT_ID:-OpenCloudIOS}
WEBFINGER_IOS_OIDC_CLIENT_SCOPES: ${WEBFINGER_IOS_OIDC_CLIENT_SCOPES:-openid profile email offline_access}
WEBFINGER_DESKTOP_OIDC_CLIENT_ID: ${WEBFINGER_DESKTOP_OIDC_CLIENT_ID:-OpenCloudDesktop}
WEBFINGER_DESKTOP_OIDC_CLIENT_SCOPES: ${WEBFINGER_DESKTOP_OIDC_CLIENT_SCOPES:-openid profile email offline_access}
PROXY_ROLE_ASSIGNMENT_DRIVER: ${PROXY_ROLE_ASSIGNMENT_DRIVER:-oidc}
OC_OIDC_ISSUER: ${IDP_ISSUER_URL:-https://keycloak.opencloud.test/realms/openCloud}
# This specifies to start all services except idm and idp. These are replaced by external services.
OC_EXCLUDE_RUN_SERVICES: idm,idp
@@ -37,7 +47,7 @@ services:
OC_LDAP_DISABLE_USER_MECHANISM: "attribute"
OC_ADMIN_USER_ID: ""
SETTINGS_SETUP_DEFAULT_ASSIGNMENTS: "false"
GRAPH_ASSIGN_DEFAULT_USER_ROLE: "false"
GRAPH_ASSIGN_DEFAULT_USER_ROLE: ${GRAPH_ASSIGN_DEFAULT_USER_ROLE:-false}
GRAPH_USERNAME_MATCH: "none"
# We need to set the IDP_DOMAIN to allow the CSP rules to be set correctly
IDP_DOMAIN: ${IDP_DOMAIN:-keycloak.opencloud.test}
@@ -45,6 +55,7 @@ services:
WEB_OPTION_ACCOUNT_EDIT_LINK_HREF: ${IDP_ACCOUNT_URL}
ldap-server:
image: bitnamilegacy/openldap:2.6
# Bitnami images require GID 0 to write to internal socket and PID directories
networks:
opencloud-net:
entrypoint: [ "/bin/sh", "/opt/bitnami/scripts/openldap/docker-entrypoint-override.sh", "/opt/bitnami/scripts/openldap/run.sh" ]

View File

@@ -23,19 +23,19 @@ services:
# Keycloak IDP specific configuration
PROXY_AUTOPROVISION_ACCOUNTS: "false"
PROXY_ROLE_ASSIGNMENT_DRIVER: "oidc"
OC_OIDC_ISSUER: https://${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}/realms/openCloud
OC_OIDC_ISSUER: https://${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}/realms/openCloud
PROXY_OIDC_REWRITE_WELLKNOWN: "true"
WEB_OIDC_CLIENT_ID: ${OC_OIDC_CLIENT_ID:-web}
PROXY_USER_OIDC_CLAIM: "uuid"
PROXY_USER_CS3_CLAIM: "userid"
WEB_OPTION_ACCOUNT_EDIT_LINK_HREF: "https://${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}/realms/openCloud/account"
WEB_OPTION_ACCOUNT_EDIT_LINK_HREF: "https://${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}/realms/openCloud/account"
# admin and demo accounts must be created in Keycloak
OC_ADMIN_USER_ID: ""
SETTINGS_SETUP_DEFAULT_ASSIGNMENTS: "false"
GRAPH_ASSIGN_DEFAULT_USER_ROLE: "false"
GRAPH_USERNAME_MATCH: "none"
# This is needed to set the correct CSP rules for OpenCloud
IDP_DOMAIN: ${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}
IDP_DOMAIN: ${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
ldap-server:
image: bitnamilegacy/openldap:2.6
@@ -64,7 +64,7 @@ services:
restart: always
postgres:
image: postgres:17-alpine
image: postgres:17.10-alpine
networks:
opencloud-net:
volumes:
@@ -78,7 +78,7 @@ services:
restart: always
keycloak:
image: quay.io/keycloak/keycloak:26.3.3
image: quay.io/keycloak/keycloak:26.6.3
networks:
opencloud-net:
command: [ "start", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm" ]
@@ -89,13 +89,14 @@ services:
- "./config/keycloak/themes/opencloud:/opt/keycloak/themes/opencloud"
environment:
LDAP_ADMIN_PASSWORD: ${LDAP_BIND_PASSWORD:-admin}
OC_DOMAIN: ${OC_DOMAIN:-cloud.opencloud.test}
OC_DOMAIN: ${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
KC_HOSTNAME: ${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}
KC_DB: postgres
KC_DB_URL: "jdbc:postgresql://postgres:5432/keycloak"
KC_DB_USERNAME: ${KC_DB_USERNAME:-keycloak}
KC_DB_PASSWORD: ${KC_DB_PASSWORD:-keycloak}
KC_FEATURES: impersonation
KC_LOG_LEVEL: ${KC_LOG_LEVEL:-INFO}
KC_PROXY_HEADERS: xforwarded
KC_HTTP_ENABLED: true
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-kcadmin}

View File

@@ -6,6 +6,7 @@ services:
- ./config/opencloud/proxy.yaml:/etc/opencloud/proxy.yaml
radicale:
image: ${RADICALE_DOCKER_IMAGE:-opencloudeu/radicale}:${RADICALE_DOCKER_TAG:-latest}
user: ${OC_CONTAINER_UID_GID:-1000:1000}
networks:
opencloud-net:
logging:

43
renovate.json Normal file
View File

@@ -0,0 +1,43 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"platformAutomerge": true,
"enabledManagers": ["docker-compose", "custom.regex"],
"baseBranchPatterns": ["main", "stable-4.0"],
"packageRules": [
{
"matchManagers": ["docker-compose", "custom.regex"],
"labels": ["Type:Dependencies", "Bot:Renovate"]
},
{
"matchManagers": ["docker-compose"],
"matchUpdateTypes": ["patch"],
"automerge": true
},
{
"matchBaseBranches": ["stable-4.0"],
"matchUpdateTypes": ["major", "minor"],
"enabled": false
},
{
"matchPackageNames": ["postgres"],
"matchManagers": ["docker-compose"],
"allowedVersions": "/^17\\.\\d+-alpine$/"
}
],
"docker-compose": {
"managerFilePatterns": ["/.+\\.ya?ml$/"]
},
"customManagers": [
{
"customType": "regex",
"managerFilePatterns": [
"/^docker-compose\\.yml$/",
"/^weboffice\\/collabora\\.yml$/"
],
"matchStrings": [
"# renovate: depName=(?<depName>[^\\s]+)\\n\\s+image: \\$\\{[^}]+\\}:\\$\\{[^}]+-(?<currentValue>[0-9]+\\.[0-9]+\\.[0-9]+)\\}"
],
"datasourceTemplate": "docker"
}
]
}

59
search/opensearch.yml Normal file
View File

@@ -0,0 +1,59 @@
---
services:
opencloud:
environment:
# Point the search service at OpenSearch instead of the embedded bleve index.
SEARCH_ENGINE_TYPE: open-search
SEARCH_ENGINE_OPEN_SEARCH_CLIENT_ADDRESSES: http://opensearch:9200
SEARCH_ENGINE_OPEN_SEARCH_CLIENT_INSECURE: "true"
SEARCH_ENGINE_OPEN_SEARCH_RESOURCE_INDEX_NAME: ${OPENSEARCH_RESOURCE_INDEX:-opencloud-resources}
depends_on:
opensearch:
condition: service_healthy
opensearch:
image: ${OPENSEARCH_DOCKER_IMAGE:-opensearchproject/opensearch}:${OPENSEARCH_DOCKER_TAG:-2.19.5}
environment:
discovery.type: single-node
bootstrap.memory_lock: "true"
OPENSEARCH_JAVA_OPTS: ${OPENSEARCH_JAVA_OPTS:--Xms512m -Xmx512m}
# Security plugin is disabled: OpenSearch is only reachable on the
# internal opencloud-net bridge and no port is published to the host.
# Do NOT enable a published port or expose this via the reverse proxy
# without first enabling and configuring the security plugin.
DISABLE_SECURITY_PLUGIN: "true"
DISABLE_INSTALL_DEMO_CONFIG: "true"
# Disable the disk-based shard allocation watermarks. By default OpenSearch
# marks indices read-only when the host disk is <5% free, which silently
# turns bulk upserts into no-ops. Fine to disable on a single-node dev box.
cluster.routing.allocation.disk.threshold_enabled: "false"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
networks:
opencloud-net:
volumes:
- ${OPENSEARCH_DATA_DIR:-opensearch-data}:/usr/share/opensearch/data
healthcheck:
# Single-node clusters can't go green (replicas have nowhere to land), so
# yellow is the healthy state. Still gates opencloud until opensearch accepts
# requests.
test:
[
"CMD-SHELL",
"curl -sf 'http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=5s' > /dev/null || exit 1"
]
interval: 5s
timeout: 10s
retries: 24
start_period: 60s
logging:
driver: ${LOG_DRIVER:-local}
restart: always
volumes:
opensearch-data:

View File

@@ -1,13 +1,28 @@
---
services:
tika:
image: ${TIKA_IMAGE:-apache/tika:latest-full}
image: ${TIKA_IMAGE:-apache/tika:latest}
# Using the base variant for smaller image size and faster startup
# The base variant includes core functionality for text extraction
# Full variant is only needed for specialized OCR/image processing
# release notes: https://tika.apache.org
networks:
opencloud-net:
restart: always
logging:
driver: ${LOG_DRIVER:-local}
healthcheck:
test:
[
"CMD",
"bash",
"-c",
"exec 3<>/dev/tcp/127.0.0.1/9998 && printf 'GET /tika HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3 && grep '200 OK' <&3",
]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
opencloud:
environment:
@@ -15,3 +30,6 @@ services:
SEARCH_EXTRACTOR_TYPE: tika
SEARCH_EXTRACTOR_TIKA_TIKA_URL: http://tika:9998
FRONTEND_FULL_TEXT_SEARCH_ENABLED: "true"
depends_on:
tika:
condition: service_healthy

View File

@@ -1,7 +1,7 @@
---
services:
postgres:
image: postgres:17-alpine
image: postgres:17.10-alpine
networks:
opencloud-net:
volumes:
@@ -15,7 +15,7 @@ services:
restart: always
keycloak:
image: quay.io/keycloak/keycloak:26.3.3
image: quay.io/keycloak/keycloak:26.6.3
networks:
opencloud-net:
command: [ "start", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm" ]
@@ -32,6 +32,7 @@ services:
KC_DB_USERNAME: ${KC_DB_USERNAME:-keycloak}
KC_DB_PASSWORD: ${KC_DB_PASSWORD:-keycloak}
KC_FEATURES: impersonation
KC_LOG_LEVEL: ${KC_LOG_LEVEL:-INFO}
KC_PROXY_HEADERS: xforwarded
KC_HTTP_ENABLED: true
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-kcadmin}

View File

@@ -5,15 +5,6 @@ services:
opencloud-net:
aliases:
- ${COLLABORA_DOMAIN:-collabora.opencloud.test}
- ${WOPISERVER_DOMAIN:-wopiserver.opencloud.test}
collaboration:
labels:
- "traefik.enable=true"
- "traefik.http.routers.collaboration.entrypoints=https"
- "traefik.http.routers.collaboration.rule=Host(`${WOPISERVER_DOMAIN:-wopiserver.opencloud.test}`)"
- "traefik.http.routers.collaboration.${TRAEFIK_SERVICES_TLS_CONFIG}"
- "traefik.http.routers.collaboration.service=collaboration"
- "traefik.http.services.collaboration.loadbalancer.server.port=9300"
collabora:
labels:
- "traefik.enable=true"
@@ -21,4 +12,5 @@ services:
- "traefik.http.routers.collabora.rule=Host(`${COLLABORA_DOMAIN:-collabora.opencloud.test}`)"
- "traefik.http.routers.collabora.${TRAEFIK_SERVICES_TLS_CONFIG}"
- "traefik.http.routers.collabora.service=collabora"
- "traefik.http.routers.collabora.middlewares=hsts-header"
- "traefik.http.services.collabora.loadbalancer.server.port=9980"

18
traefik/euro-office.yml Normal file
View File

@@ -0,0 +1,18 @@
---
services:
traefik:
networks:
opencloud-net:
aliases:
- ${EURO_OFFICE_DOMAIN:-euro-office.opencloud.test}
euro-office:
labels:
- "traefik.enable=true"
- "traefik.http.routers.euro-office.entrypoints=https"
- "traefik.http.routers.euro-office.rule=Host(`${EURO_OFFICE_DOMAIN:-euro-office.opencloud.test}`)"
- "traefik.http.routers.euro-office.${TRAEFIK_SERVICES_TLS_CONFIG}"
- "traefik.http.routers.euro-office.service=euro-office"
- "traefik.http.services.euro-office.loadbalancer.server.port=80"
# websockets can't be opened when this is omitted
- "traefik.http.middlewares.euro-office.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.routers.euro-office.middlewares=euro-office"

View File

@@ -12,4 +12,5 @@ services:
- "traefik.http.routers.keycloak.rule=Host(`${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}`)"
- "traefik.http.routers.keycloak.${TRAEFIK_SERVICES_TLS_CONFIG}"
- "traefik.http.routers.keycloak.service=keycloak"
- "traefik.http.routers.keycloak.middlewares=hsts-header"
- "traefik.http.services.keycloak.loadbalancer.server.port=8080"

View File

@@ -3,14 +3,22 @@ services:
opencloud:
labels:
- "traefik.enable=true"
# define middleware here, to make sure its loaded with the first defined container (opencloud)
# if defined in the traefik container with a disabled dashboard it won't be loaded fast enough
- "traefik.http.middlewares.hsts-header.headers.stsSeconds=31536000"
- "traefik.http.middlewares.hsts-header.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.hsts-header.headers.stsPreload=true"
- "traefik.http.middlewares.hsts-header.headers.forceSTSHeader=true"
- "traefik.http.routers.opencloud.entrypoints=https"
- "traefik.http.routers.opencloud.rule=Host(`${OC_DOMAIN:-cloud.opencloud.test}`)"
- "traefik.http.routers.opencloud.service=opencloud"
- "traefik.http.routers.opencloud.middlewares=hsts-header"
- "traefik.http.services.opencloud.loadbalancer.server.port=9200"
- "traefik.http.routers.opencloud.${TRAEFIK_SERVICES_TLS_CONFIG}"
traefik:
image: traefik:v3
image: traefik:v3.6.14
# release notes: https://github.com/traefik/traefik/releases
user: ${TRAEFIK_CONTAINER_UID_GID:-0:0}
networks:
opencloud-net:
aliases:
@@ -22,9 +30,11 @@ services:
- "TRAEFIK_ACME_CASERVER=${TRAEFIK_ACME_CASERVER:-https://acme-v02.api.letsencrypt.org/directory}"
- "TRAEFIK_LOG_LEVEL=${TRAEFIK_LOG_LEVEL:-ERROR}"
- "TRAEFIK_ACCESS_LOG=${TRAEFIK_ACCESS_LOG:-false}"
- "TRAEFIK_PORT_HTTP=${TRAEFIK_PORT_HTTP:-80}"
- "TRAEFIK_PORT_HTTPS=${TRAEFIK_PORT_HTTPS:-443}"
ports:
- "80:80"
- "443:443"
- "${TRAEFIK_PORT_HTTP:-80}:${TRAEFIK_PORT_HTTP:-80}"
- "${TRAEFIK_PORT_HTTPS:-443}:${TRAEFIK_PORT_HTTPS:-443}"
volumes:
- "${DOCKER_SOCKET_PATH:-/var/run/docker.sock}:/var/run/docker.sock:ro"
- "./config/traefik/docker-entrypoint-override.sh:/opt/traefik/bin/docker-entrypoint-override.sh"

View File

@@ -5,66 +5,48 @@ services:
environment:
# this is needed for setting the correct CSP header
COLLABORA_DOMAIN: ${COLLABORA_DOMAIN:-collabora.opencloud.test}
# expose nats and the reva gateway for the collaboration service
NATS_NATS_HOST: 0.0.0.0
GATEWAY_GRPC_ADDR: 0.0.0.0:9142
TRAEFIK_PORT_HTTPS: ${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
# run the collaboration (WOPI) service inside the main opencloud process,
# appended to any user defined services in START_ADDITIONAL_SERVICES
OC_ADD_RUN_SERVICES: ${START_ADDITIONAL_SERVICES:-}${START_ADDITIONAL_SERVICES:+,}collaboration
# make collabora the secure view app
FRONTEND_APP_HANDLER_SECURE_VIEW_APP_ADDR: eu.opencloud.api.collaboration
GRAPH_AVAILABLE_ROLES: "b1e2218d-eef8-4d4c-b82d-0f1a1b48f3b5,a8d5fe5e-96e3-418d-825b-534dbdf22b99,fb6c3e19-e378-47e5-b277-9732f9de6e21,58c63c02-1d89-4572-916a-870abc5a1b7d,2d00ce52-1fc2-4dbc-8b95-a73b73395f5a,1c996275-f1c9-4e71-abdf-a42f6495e960,312c0871-5ef7-4b3a-85b6-0e4074c64049,aa97fe03-7980-45ac-9e50-b325749fd7e6"
collaboration:
image: ${OC_DOCKER_IMAGE:-opencloudeu/opencloud-rolling}:${OC_DOCKER_TAG:-latest}
networks:
opencloud-net:
depends_on:
opencloud:
condition: service_started
collabora:
condition: service_healthy
entrypoint:
- /bin/sh
command: [ "-c", "opencloud collaboration server" ]
environment:
COLLABORATION_GRPC_ADDR: 0.0.0.0:9301
COLLABORATION_HTTP_ADDR: 0.0.0.0:9300
MICRO_REGISTRY: "nats-js-kv"
MICRO_REGISTRY_ADDRESS: "opencloud:9233"
COLLABORATION_WOPI_SRC: https://${WOPISERVER_DOMAIN:-wopiserver.opencloud.test}
# collaboration service configuration; the WOPI endpoint is served by the
# opencloud proxy on the opencloud domain (/wopi and /collaboration routes),
# so no separate wopiserver domain, route or port is needed
COLLABORATION_WOPI_SRC: https://${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
COLLABORATION_APP_NAME: "CollaboraOnline"
COLLABORATION_APP_PRODUCT: "Collabora"
COLLABORATION_APP_ADDR: https://${COLLABORA_DOMAIN:-collabora.opencloud.test}
COLLABORATION_APP_ICON: https://${COLLABORA_DOMAIN:-collabora.opencloud.test}/favicon.ico
COLLABORATION_APP_ADDR: https://${COLLABORA_DOMAIN:-collabora.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
COLLABORATION_APP_ICON: https://${COLLABORA_DOMAIN:-collabora.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}/favicon.ico
COLLABORATION_APP_INSECURE: "${INSECURE:-true}"
COLLABORATION_CS3API_DATAGATEWAY_INSECURE: "${INSECURE:-true}"
COLLABORATION_LOG_LEVEL: ${LOG_LEVEL:-info}
OC_URL: https://${OC_DOMAIN:-cloud.opencloud.test}
volumes:
# configure the .env file to use own paths instead of docker internal volumes
- ${OC_CONFIG_DIR:-opencloud-config}:/etc/opencloud
logging:
driver: ${LOG_DRIVER:-local}
restart: always
collabora:
image: collabora/code:25.04.4.2.1
image: collabora/code:26.04.1.4.1
# release notes: https://www.collaboraonline.com/release-notes/
networks:
opencloud-net:
environment:
aliasgroup1: https://${WOPISERVER_DOMAIN:-wopiserver.opencloud.test}:443
# WOPI host allowlist; the WOPI endpoint is served by the opencloud proxy on the opencloud domain
aliasgroup1: https://${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
DONT_GEN_SSL_CERT: "YES"
extra_params: |
--o:ssl.enable=${COLLABORA_SSL_ENABLE:-true} \
--o:ssl.ssl_verification=${COLLABORA_SSL_VERIFICATION:-true} \
--o:ssl.termination=true \
--o:welcome.enable=false \
--o:net.frame_ancestors=${OC_DOMAIN:-cloud.opencloud.test} \
--o:net.lok_allow.host[14]=${OC_DOMAIN-cloud.opencloud.test} \
--o:net.frame_ancestors=${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} \
--o:net.lok_allow.host[14]=${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} \
--o:home_mode.enable=${COLLABORA_HOME_MODE:-false}
username: ${COLLABORA_ADMIN_USER:-admin}
password: ${COLLABORA_ADMIN_PASSWORD:-admin}
cap_add:
- MKNOD
- SYS_ADMIN
security_opt:
- seccomp=unconfined
- apparmor:unconfined
volumes:
# Mount local TrueType fonts so the container can use system fonts
# (e.g. Microsoft fonts like Arial, Calibri, Cambria by installing the `ttf-mscorefonts-installer` package).
@@ -76,7 +58,13 @@ services:
entrypoint: [ '/bin/bash', '-c' ]
command: [ 'coolconfig generate-proof-key && /start-collabora-online.sh' ]
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:9980/hosting/discovery" ]
test:
[
"CMD",
"bash",
"-c",
"exec 3<>/dev/tcp/127.0.0.1/9980 && printf 'GET /hosting/discovery HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3 && cat <&3 | head -1 | grep -q '200 OK'"
]
interval: 15s
timeout: 10s
retries: 5

53
weboffice/euro-office.yml Normal file
View File

@@ -0,0 +1,53 @@
---
services:
opencloud:
environment:
# this is needed for setting the correct CSP header
EURO_OFFICE_DOMAIN: ${EURO_OFFICE_DOMAIN:-euro-office.opencloud.test}
TRAEFIK_PORT_HTTPS: ${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
# run the collaboration (WOPI) service inside the main opencloud process,
# appended to any user defined services in START_ADDITIONAL_SERVICES
OC_ADD_RUN_SERVICES: ${START_ADDITIONAL_SERVICES:-}${START_ADDITIONAL_SERVICES:+,}collaboration
# collaboration service configuration; the WOPI endpoint is served by the
# opencloud proxy on the opencloud domain (/wopi and /collaboration routes),
# so no separate wopiserver domain, route or port is needed
COLLABORATION_WOPI_SRC: https://${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
COLLABORATION_APP_NAME: "Euro-Office"
COLLABORATION_APP_PRODUCT: "OnlyOffice"
COLLABORATION_APP_ADDR: https://${EURO_OFFICE_DOMAIN:-euro-office.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
COLLABORATION_APP_ICON: https://${EURO_OFFICE_DOMAIN:-euro-office.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}/web-apps/apps/documenteditor/main/resources/img/favicon.ico
COLLABORATION_APP_INSECURE: "${INSECURE:-true}"
COLLABORATION_CS3API_DATAGATEWAY_INSECURE: "${INSECURE:-true}"
COLLABORATION_APP_PROOF_DISABLE: "true"
volumes:
- ./config/euro-office/app-registry.yaml:/etc/opencloud/app-registry.yaml
euro-office:
image: ${EURO_OFFICE_DOCKER_IMAGE:-ghcr.io/euro-office/documentserver}:${EURO_OFFICE_DOCKER_TAG:-latest}
# changelog https://github.com/EURO-office/DocumentServer/releases
networks:
opencloud-net:
environment:
WOPI_ENABLED: "true"
# self-signed certificates
USE_UNAUTHORIZED_STORAGE: "${INSECURE:-false}"
volumes:
# Mount local TrueType fonts so the container can use system fonts
# (e.g. Microsoft fonts like Arial, Calibri, Cambria by installing the `ttf-mscorefonts-installer` package).
- /usr/share/fonts/truetype:/usr/share/fonts/truetype/more:ro
logging:
driver: ${LOG_DRIVER:-local}
restart: always
healthcheck:
test:
[
"CMD",
"bash",
"-c",
"exec 3<>/dev/tcp/127.0.0.1/80 && printf 'GET /hosting/discovery HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3 && cat <&3 | head -1 | grep -q '200 OK'"
]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s