OnlyOffice

OnlyOffice and NextCloud in Docker. Both proxied by NGINX rev proxy.

References

NGINX config

Additional config lines for NextCloud virtual site config:

upstream docservice {
    server 192.168.64.231:3077;
}
 
map $http_x_forwarded_proto $the_scheme {
     default $http_x_forwarded_proto;
     "" $scheme;
}
 
map $http_x_forwarded_host $the_host {
    default $http_x_forwarded_host;
    "" $host;
}
 
map $http_upgrade $proxy_connection {
    default upgrade;
    "" close;
}
 
server { 
    ..
    location /documentserver {
        return 302 /documentserver/;
    }
    location ~ ^/web-apps/(.*) {
         # rewrite     ^   https://$server_name$request_uri? permanent;
         return 302 /documentserver/web-apps/$1$is_args$args;
    }
    location /documentserver/ {
        proxy_pass http://docservice/;
        proxy_http_version 1.1;
 
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Forwarded-Host $the_host/documentserver;
        proxy_set_header X-Forwarded-Proto $the_scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Based on hints from: https://github.com/ONLYOFFICE/document-server-proxy

docker-compose

https://github.com/ONLYOFFICE/docker-onlyoffice-nextcloud https://hub.docker.com/r/onlyoffice/documentserver/

OnlyOffice network in Docker is configured:

  • as 'onlyoffice' node on port 80 (internal linked services network)
  • as TCP:3077 on Docker host (rev proxied by NGINX )

Test OnlyOffice server

Web page should be shown on link: https://nc.example.com/documentserver/welcome/

NextCloud

Install and enable `OnlyOffice` plugin.

Configure it as follows:

### Trusted domain 
./occ config:system:get trusted_domains
 
# Put correct indexes in commands below:
./occ config:system:set trusted_domains 0 --value="nc.example.com"
 
# NC http port is exposed from Docker to host port 3007
./occ config:system:set trusted_domains 1 --value="host_ip:3007"
 
### OnlyOffice config
# OnlyOffice server URL:
./occ config:system:set onlyoffice DocumentServerUrl --value="https://nc.example.com/documentserver/"
# How OnlyOffice can reach NC:
./occ config:system:set onlyoffice StorageUrl --value="http://nc.grinn-global.com/"
# NOTE; it is possible to put external URL like above, but NC can communicate directly inside private Docker network
./occ config:system:set onlyoffice DocumentServerInternalUrl --value="https://onlyoffice/"
 
# And permit NC to communicate with local addresses
# Without this you can got error: Error when trying to connect (Host violates local access rules)
./occ config:system:set allow_local_remote_servers --value true --type bool