Skip to content

Commit d7dd502

Browse files
committed
docs: add documentation for running OpenCloud behind an external Nginx proxy and configure Euro Office category
1 parent a1c26f0 commit d7dd502

3 files changed

Lines changed: 263 additions & 8 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"label": "Euro Office",
3+
"position": 31
4+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
---
2+
sidebar_position: 1
3+
id: euro-office
4+
title: Euro Office
5+
description: Configuration guides for Euro Office integration in OpenCloud
6+
draft: false
7+
---
8+
9+
# Euro Office
10+
11+
[Euro Office](https://github.com/EURO-office/DocumentServer) is a sovereign document editing suite based on ONLYOFFICE that integrates with OpenCloud via the WOPI protocol.
12+
13+
:::warning
14+
The Euro Office project is currently in its early stages and may have stability issues.
15+
:::
16+
17+
## What you will find here
18+
19+
- Set up Euro Office with OpenCloud using Docker Compose.
20+
- Configure Euro Office behind an external Nginx reverse proxy.
21+
22+
## Docker Compose Setup
23+
24+
Euro Office is available as a compose module in the [opencloud-compose](https://github.com/opencloud-eu/opencloud-compose) project.
25+
26+
### With Traefik (built-in reverse proxy)
27+
28+
Set the following in your `.env` file:
29+
30+
```env
31+
COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:traefik/opencloud.yml:traefik/euroffice.yml
32+
33+
EURO_OFFICE_DOMAIN=euro-office.YOUR.DOMAIN
34+
EURO_OFFICE_WOPISERVER_DOMAIN=wopiserver-eo.YOUR.DOMAIN
35+
EURO_OFFICE_JWT_SECRET=YOUR.SECRET
36+
```
37+
38+
### With an external proxy (Nginx, Caddy, etc.)
39+
40+
Set the following in your `.env` file:
41+
42+
```env
43+
COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:external-proxy/opencloud.yml:external-proxy/euroffice.yml
44+
45+
EURO_OFFICE_DOMAIN=euro-office.YOUR.DOMAIN
46+
EURO_OFFICE_WOPISERVER_DOMAIN=wopiserver-eo.YOUR.DOMAIN
47+
EURO_OFFICE_JWT_SECRET=YOUR.SECRET
48+
```
49+
50+
For the full Nginx configuration guide, see [Behind External Proxy](../../getting-started/container/docker-compose/external-proxy).
51+
52+
### Using both Collabora and Euro Office
53+
54+
Both office suites can run simultaneously. In this case, OpenDocument formats (`.odt`, `.ods`, `.odp`) open in Collabora while Microsoft Office formats (`.docx`, `.xlsx`, `.pptx`) open in Euro Office.
55+
56+
:::info
57+
To avoid app interlocking issues, be aware that there is currently no cross-app file locking. If a file is opened in one app, the other app must wait for the lock to be released.
58+
:::
59+
60+
With Traefik:
61+
62+
```env
63+
COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:weboffice/euroffice.yml:traefik/opencloud.yml:traefik/collabora.yml:traefik/euroffice.yml
64+
```
65+
66+
With external proxy:
67+
68+
```env
69+
COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:weboffice/euroffice.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml:external-proxy/euroffice.yml
70+
```
71+
72+
## Environment Variables
73+
74+
| Variable | Default | Description |
75+
|---|---|---|
76+
| `EURO_OFFICE_DOMAIN` | `euro-office.opencloud.test` | Domain of the Euro Office document server |
77+
| `EURO_OFFICE_WOPISERVER_DOMAIN` | `wopiserver-eo.opencloud.test` | Domain of the WOPI server for Euro Office |
78+
| `EURO_OFFICE_JWT_SECRET` | `changeme` | JWT secret for Euro Office. **Change this for production!** |
79+
| `EURO_OFFICE_DOCKER_IMAGE` | `ghcr.io/euro-office/documentserver` | Docker image for the document server |
80+
| `EURO_OFFICE_DOCKER_TAG` | `latest` | Docker image tag |
81+
82+
## Exposed Ports (External Proxy)
83+
84+
When using an external reverse proxy, the following ports are exposed on the host:
85+
86+
| Service | Host Port | Description |
87+
|---|---|---|
88+
| Euro Office Document Server | `9900` | The document editing interface |
89+
| Euro Office WOPI Server | `9302` | WOPI protocol endpoint (collaboration service) |
90+
91+
## DNS Entries
92+
93+
When deploying with custom domains, make sure DNS records point to your server for:
94+
95+
- `euro-office.YOUR.DOMAIN`
96+
- `wopiserver-eo.YOUR.DOMAIN`
97+
98+
For local testing with `.test` domains, add to `/etc/hosts`:
99+
100+
```text
101+
127.0.0.1 euro-office.opencloud.test
102+
127.0.0.1 wopiserver-eo.opencloud.test
103+
```

docs/admin/getting-started/container/docker-compose/docker-external-proxy.md

Lines changed: 156 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@ This guide walks you through setting up OpenCloud behind an external Nginx rever
1515
- A public server with a static IP
1616
- Proper DNS records for your domain:
1717
- `cloud.YOUR.DOMAIN`
18-
- `collabora.YOUR.DOMAIN`
19-
- `wopiserver.YOUR.DOMAIN`
18+
- `collabora.YOUR.DOMAIN` (if using Collabora)
19+
- `wopiserver.YOUR.DOMAIN` (if using Collabora)
20+
- `euro-office.YOUR.DOMAIN` (if using Euro Office)
21+
- `wopiserver-eo.YOUR.DOMAIN` (if using Euro Office)
2022
- Installed software:
2123
- [Docker & Docker Compose](https://docs.docker.com/engine/install/)
2224
- `nginx`
2325
- `certbot`
2426

27+
:::tip Office Suite Choice
28+
OpenCloud supports [Collabora](../../../configuration/collabora) and [Euro Office](../../../configuration/euro-office) as web office editors. You can use one or both. Adjust the DNS entries, certificates, and Nginx configuration below based on your choice.
29+
:::
30+
2531
## Connect to Your Server
2632

2733
Log into your server via SSH:
@@ -67,9 +73,10 @@ Create a temporary config to allow HTTP validation:
6773
sudo nano /etc/nginx/sites-available/certbot-challenge
6874
```
6975

70-
Paste the following config and adjust the URLs:
76+
Paste the following config and adjust the URLs. Include the domains for the office suite(s) you are using:
7177

7278
```nginx
79+
# Collabora only:
7380
server {
7481
listen 80;
7582
server_name cloud.YOUR.DOMAIN collabora.YOUR.DOMAIN wopiserver.YOUR.DOMAIN;
@@ -83,6 +90,24 @@ server {
8390
}
8491
```
8592

93+
If using Euro Office (alone or alongside Collabora), add the Euro Office domains to `server_name`:
94+
95+
```nginx
96+
# Euro Office only:
97+
server {
98+
listen 80;
99+
server_name cloud.YOUR.DOMAIN euro-office.YOUR.DOMAIN wopiserver-eo.YOUR.DOMAIN;
100+
# ...same location block as above...
101+
}
102+
103+
# Both Collabora and Euro Office:
104+
server {
105+
listen 80;
106+
server_name cloud.YOUR.DOMAIN collabora.YOUR.DOMAIN wopiserver.YOUR.DOMAIN euro-office.YOUR.DOMAIN wopiserver-eo.YOUR.DOMAIN;
107+
# ...same location block as above...
108+
}
109+
```
110+
86111
Enable and reload Nginx:
87112

88113
```bash
@@ -92,14 +117,41 @@ sudo nginx -t && sudo systemctl reload nginx
92117

93118
## Obtain SSL Certificates
94119

95-
Use `certbot` to get your TLS certificates with adjusted URLs:
120+
Use `certbot` to get your TLS certificates with adjusted URLs. Include all domains you need:
121+
122+
```bash
123+
# Collabora only:
124+
sudo certbot certonly --webroot \
125+
-w /var/www/certbot \
126+
-d cloud.YOUR.DOMAIN \
127+
-d collabora.YOUR.DOMAIN \
128+
-d wopiserver.YOUR.DOMAIN \
129+
--email your@email.com \
130+
--agree-tos \
131+
--no-eff-email
132+
```
133+
134+
If using Euro Office, add the Euro Office domains:
96135

97136
```bash
137+
# Euro Office only:
138+
sudo certbot certonly --webroot \
139+
-w /var/www/certbot \
140+
-d cloud.YOUR.DOMAIN \
141+
-d euro-office.YOUR.DOMAIN \
142+
-d wopiserver-eo.YOUR.DOMAIN \
143+
--email your@email.com \
144+
--agree-tos \
145+
--no-eff-email
146+
147+
# Both Collabora and Euro Office:
98148
sudo certbot certonly --webroot \
99149
-w /var/www/certbot \
100150
-d cloud.YOUR.DOMAIN \
101151
-d collabora.YOUR.DOMAIN \
102152
-d wopiserver.YOUR.DOMAIN \
153+
-d euro-office.YOUR.DOMAIN \
154+
-d wopiserver-eo.YOUR.DOMAIN \
103155
--email your@email.com \
104156
--agree-tos \
105157
--no-eff-email
@@ -121,7 +173,9 @@ cp .env.example .env
121173
nano .env
122174
```
123175

124-
Set the following environment variables:
176+
Set the following environment variables based on your office suite choice:
177+
178+
**Collabora only:**
125179

126180
```env
127181
# INSECURE=true
@@ -137,6 +191,43 @@ COLLABORA_DOMAIN=collabora.YOUR.DOMAIN
137191
WOPISERVER_DOMAIN=wopiserver.YOUR.DOMAIN
138192
```
139193

194+
**Euro Office only:**
195+
196+
```env
197+
# INSECURE=true
198+
199+
COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:external-proxy/opencloud.yml:external-proxy/euroffice.yml
200+
201+
OC_DOMAIN=cloud.YOUR.DOMAIN
202+
203+
INITIAL_ADMIN_PASSWORD=YOUR.SECRET.PASSWORD
204+
205+
EURO_OFFICE_DOMAIN=euro-office.YOUR.DOMAIN
206+
207+
EURO_OFFICE_WOPISERVER_DOMAIN=wopiserver-eo.YOUR.DOMAIN
208+
209+
EURO_OFFICE_JWT_SECRET=YOUR.EURO.OFFICE.SECRET
210+
```
211+
212+
**Both Collabora and Euro Office:**
213+
214+
```env
215+
# INSECURE=true
216+
217+
COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:weboffice/euroffice.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml:external-proxy/euroffice.yml
218+
219+
OC_DOMAIN=cloud.YOUR.DOMAIN
220+
221+
INITIAL_ADMIN_PASSWORD=YOUR.SECRET.PASSWORD
222+
223+
COLLABORA_DOMAIN=collabora.YOUR.DOMAIN
224+
WOPISERVER_DOMAIN=wopiserver.YOUR.DOMAIN
225+
226+
EURO_OFFICE_DOMAIN=euro-office.YOUR.DOMAIN
227+
EURO_OFFICE_WOPISERVER_DOMAIN=wopiserver-eo.YOUR.DOMAIN
228+
EURO_OFFICE_JWT_SECRET=YOUR.EURO.OFFICE.SECRET
229+
```
230+
140231
The initial Admin password is mandatory for security reasons.
141232

142233
For production releases, please refer to the considerations outlined in the Docker Compose base instructions:
@@ -163,13 +254,16 @@ sudo rm /etc/nginx/sites-enabled/certbot-challenge
163254
sudo nano /etc/nginx/sites-available/opencloud
164255
```
165256

166-
Paste the following configuration and adjust the URLs:
257+
Paste the following configuration and adjust the URLs. Include only the server blocks you need based on your office suite choice.
258+
259+
### Core blocks (always required)
167260

168261
```nginx
169262
# Redirect HTTP to HTTPS
263+
# Add all domains you use to server_name
170264
server {
171265
listen 80;
172-
server_name cloud.YOUR.DOMAIN collabora.YOUR.DOMAIN wopiserver.YOUR.DOMAIN;
266+
server_name cloud.YOUR.DOMAIN collabora.YOUR.DOMAIN wopiserver.YOUR.DOMAIN euro-office.YOUR.DOMAIN wopiserver-eo.YOUR.DOMAIN;
173267
174268
location /.well-known/acme-challenge/ {
175269
root /var/www/certbot;
@@ -213,7 +307,11 @@ server {
213307
proxy_set_header X-Forwarded-Proto $scheme;
214308
}
215309
}
310+
```
216311

312+
### Collabora blocks (if using Collabora)
313+
314+
```nginx
217315
# Collabora
218316
server {
219317
listen 443 ssl http2;
@@ -239,7 +337,7 @@ server {
239337
240338
}
241339
242-
# WOPI Server
340+
# Collabora WOPI Server
243341
server {
244342
listen 443 ssl http2;
245343
server_name wopiserver.YOUR.DOMAIN;
@@ -258,6 +356,56 @@ server {
258356
}
259357
```
260358

359+
### Euro Office blocks (if using Euro Office)
360+
361+
```nginx
362+
# Euro Office Document Server
363+
server {
364+
listen 443 ssl http2;
365+
server_name euro-office.YOUR.DOMAIN;
366+
367+
ssl_certificate /etc/letsencrypt/live/cloud.YOUR.DOMAIN/fullchain.pem;
368+
ssl_certificate_key /etc/letsencrypt/live/cloud.YOUR.DOMAIN/privkey.pem;
369+
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
370+
client_max_body_size 100M;
371+
372+
location / {
373+
proxy_pass http://127.0.0.1:9900;
374+
proxy_set_header Host $host;
375+
proxy_set_header X-Real-IP $remote_addr;
376+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
377+
# Required for WebSocket support
378+
proxy_set_header X-Forwarded-Proto https;
379+
}
380+
381+
location ~ ^/(web-apps/apps/.*/(main|mobile|embed)/.*\.json|doc/.*/(c|s)/.*) {
382+
proxy_pass http://127.0.0.1:9900;
383+
proxy_set_header Upgrade $http_upgrade;
384+
proxy_set_header Connection "Upgrade";
385+
proxy_set_header Host $host;
386+
proxy_set_header X-Forwarded-Proto https;
387+
}
388+
}
389+
390+
# Euro Office WOPI Server
391+
server {
392+
listen 443 ssl http2;
393+
server_name wopiserver-eo.YOUR.DOMAIN;
394+
395+
ssl_certificate /etc/letsencrypt/live/cloud.YOUR.DOMAIN/fullchain.pem;
396+
ssl_certificate_key /etc/letsencrypt/live/cloud.YOUR.DOMAIN/privkey.pem;
397+
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
398+
399+
location / {
400+
proxy_pass http://127.0.0.1:9302;
401+
proxy_set_header Host $host;
402+
proxy_set_header X-Real-IP $remote_addr;
403+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
404+
proxy_set_header X-Forwarded-Proto $scheme;
405+
}
406+
}
407+
```
408+
261409
:::info Version Differences
262410
Starting from nginx 1.25.0, the `http2` directive syntax changed from: `listen 443 ssl http2;` to `listen 443 ssl; http2 on;`
263411
:::

0 commit comments

Comments
 (0)