Nextcloud is a popular open-source online file storage solution, and Collabora Online, a LibreOffice-based online office suite, adds more along with NextCloud. The combination of the two is a powerful self-hosting alternative to Google Drive and Google Docs. And they could be easily set up using Docker and Nginx (or any other reverse proxy you like).
Collabora Online supports dozens of document formats including DOC, DOCX, PPT, PPTX, XLS, XLSX + ODF, Import/View Visio, Publisher and many more...[1]
Setting Up Docker Services
Nextcloud could work with SQLite, MariaDB or Postgresql, and optional redis cache support. Here we would run Nextcloud with MariaDB and redis. Using the docker-compose.yml
file:
version: '2'
services:
'nc':
image: 'nextcloud:latest'
ports:
- '127.0.0.1:8180:80'
- '127.0.0.1:9980:9980'
volumes:
- '/srv/nextcloud/drive:/var/www/html'
links:
- 'redis:redis'
depends_on:
- 'redis'
restart: always
'redis':
image: 'redis:latest'
restart: always
'db':
image: 'mariadb:latest'
volumes:
- '/mnt/docker/data/nextcloud-db:/var/lib/mysql'
environment:
- 'MYSQL_ROOT_PASSWORD=${password}'
restart: 'unless-stopped'
'code-office':
image: 'collabora/code:latest'
environment:
- "domain=${your_nextcloud_domain1}[|${your_nextcloud_domain2}]"
- 'username=${admin}'
- 'password=${password}'
cap_add:
- 'MKNOD'
network_mode: 'service:nc' # !important
restart: 'unless-stopped'
Here we are using a trick: adding CODE[2] container to Nextcloud container network by network_mode: 'service:nc'
. This enables full access between NextCloud and Collabora Online, and makes life easier. When you get prepared, just run the containers:
$ docker-compose up -d
Setting Up Reverse Proxy
Configure Nginx as a reverse proxy for Nextcloud:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name drive.sakuragawa.moe;
ssl on;
ssl_certificate /path/to/your/certficate;
ssl_certificate_key /path/to/your/key;
client_max_body_size 10G;
location / {
proxy_pass http://localhost:8180;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
Then add another server for Collabora Online:
server {
listen 443 ssl http2;
# You can set a dedicated domain like:
server_name office.sakuragawa.moe;
ssl on
ssl_certificate /path/to/your/certficate;
ssl_certificate_key /path/to/your/key;
# Static files
location ^~ /loleaflet {
proxy_pass https://localhost:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass https://localhost:9980;
proxy_set_header Host $http_host;
}
# Main websocket
location ~ /lool/(.*)/ws$ {
proxy_pass https://localhost:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# Admin Console websocket
location ^~ /lool/adminws {
proxy_pass https://localhost:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# Download, presentation and image upload
location ^~ /lool {
proxy_pass https://localhost:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
}
}
Then test and reload nginx
:
$ nginx -t
$ systemctl reload nginx
You should be able to access Nextcloud at nextcloud.sakuragawa.moe
now. You absolutely need to replace it with your own domain and prepare your SSL certificates.
Configure Nextcloud
Log in Nextcloud as admin, then click you avatar at the top-right and go to Apps menu. In Office & text tab, find Collabora Online and click Enable.
Then open Settings, find Collabora Online, fill in your CODE server, and then click Apply. Your private G Suite is now set and go.