OpenCloud: Difference between revisions
I added a section for people wanting to install Collabora Online and extra fonts on OpenCloud, as it is tricky. |
→Nginx: Won't work without proxy_set_header |
||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 3: | Line 3: | ||
==== OpenCloud ==== | ==== OpenCloud ==== | ||
The snippet below enables the [https://github.com/opencloud-eu OpenCloud] service and disables TLS between the proxy and OpenCloud (only recommended when using together with a reverse proxy, see below)<syntaxhighlight lang="nix"> | The snippet below enables the [https://github.com/opencloud-eu OpenCloud] service and disables TLS between the proxy and OpenCloud (only recommended when using together with a reverse proxy, see below)<syntaxhighlight lang="nix"> | ||
environment.etc."opencloud-admin-pass".text = '' | |||
IDM_ADMIN_PASSWORD=secure-password | |||
''; | |||
services.opencloud = { | services.opencloud = { | ||
enable = true; | enable = true; | ||
| Line 10: | Line 13: | ||
environment = { | environment = { | ||
PROXY_TLS = "false"; # disable https when behind reverse-proxy | PROXY_TLS = "false"; # disable https when behind reverse-proxy | ||
}; | }; | ||
environmentFile = "/etc/opencloud-admin-pass"; | |||
}; | }; | ||
| Line 17: | Line 20: | ||
==== Nginx ==== | ==== Nginx ==== | ||
This snippet enables the Nginx endpoint for OpenCloud | This snippet enables the Nginx endpoint for OpenCloud. | ||
<syntaxhighlight lang="nix"> | |||
services.nginx.virtualHosts = { | services.nginx.virtualHosts = { | ||
"cloud.your.domain" = { | "cloud.your.domain" = { | ||
enableACME = true; | enableACME = true; | ||
forceSSL = true; | forceSSL = true; | ||
locations | locations."/" = { | ||
proxyPass = "http://127.0.0.1:9200"; | |||
proxyWebsockets = true; | |||
extraConfig = '' | |||
proxy_set_header Host $host; | |||
''; | |||
}; | }; | ||
}; | }; | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Radicale ==== | ==== Radicale ==== | ||
OpenCloud doesn't natively support CalDAV and CardDAV but can serve as a proxy to a Radicale service. | |||
<syntaxhighlight lang="nix"> | |||
services.opencloud.settings.proxy.additional_policies = [ | |||
{ | |||
name = "default"; | |||
routes = [ | |||
{ | |||
endpoint = "/caldav/"; | |||
backend = "127.0.0.1:5232"; | |||
remote_user_header = "X-Remote-User"; | |||
skip_x_access_token = true; | |||
additional_headers = [{"X-Script-Name" = "/caldav";}]; | |||
} | |||
{ | |||
endpoint = "/.well-known/caldav"; | |||
backend = "127.0.0.1:5232"; | |||
remote_user_header = "X-Remote-User"; | |||
skip_x_access_token = true; | |||
additional_headers = [{"X-Script-Name" = "/caldav";}]; | |||
} | |||
{ | |||
endpoint = "/carddav/"; | |||
backend = "127.0.0.1:5232"; | |||
remote_user_header = "X-Remote-User"; | |||
skip_x_access_token = true; | |||
additional_headers = [{"X-Script-Name" = "/carddav";}]; | |||
} | |||
{ | |||
endpoint = "/.well-known/carddav"; | |||
backend = "127.0.0.1:5232"; | |||
remote_user_header = "X-Remote-User"; | |||
skip_x_access_token = true; | |||
additional_headers = [{"X-Script-Name" = "/carddav";}]; | |||
} | |||
]; | |||
} | |||
]; | |||
services.radicale = { | services.radicale = { | ||
enable = true; | enable = true; | ||
| Line 75: | Line 85: | ||
}; | }; | ||
auth = { | auth = { | ||
type = "http_x_remote_user"; # disable authentication, and use the username that OpenCloud provides | type = "http_x_remote_user"; # disable authentication, and use the username that OpenCloud provides | ||
}; | }; | ||
web = { | web = { | ||
| Line 82: | Line 92: | ||
storage = { | storage = { | ||
filesystem_folder = "/var/lib/radicale/collections"; | filesystem_folder = "/var/lib/radicale/collections"; | ||
predefined_collections = builtins.toJSON { | |||
def-addressbook = { | |||
"D:displayname" = "OpenCloud Address Book"; | |||
tag = "VADDRESSBOOK"; | |||
}; | |||
def-calendar = { | |||
"C:supported-calendar-component-set" = "VEVENT,VJOURNAL,VTODO"; | |||
"D:displayname" = "OpenCloud Calendar"; | |||
tag = "VCALENDAR"; | |||
}; | |||
}; | |||
}; | }; | ||
logging = { | logging = { | ||