NextCloud and OnlyOffice via Docker: Difference between revisions

From WikiMLT
Line 1: Line 1:
<noinclude><!--[[Category:Linux_Server|?]]-->{{ContentArticleHeader/Linux_Server}}</noinclude>
<noinclude><!--[[Category:Linux_Server|?]]-->{{ContentArticleHeader/Linux_Server}}</noinclude>
Here is a short step-by-step manual:
Here is a short step-by-step manual: '''How to setup OnlyOffice Docker container and proxy it by Apache2 for NextCloud usage.'''
 
'''How I do setup OnlyOffice 6.x Docker container and proxy it by Apache2 for NextCloud 22.x usage at my Ubuntu 20.04 Server.'''


== Install Docker ==
== Install Docker ==
{{collapse/begin}}
{{collapse/begin}}
According to the Docker installation, read the guide [[Docker Basic Setup]]. The following part of this section is deprecated, but is leaved here as historical note :)
According to the Docker installation, read the guide [[Docker Basic Setup]]. The following part of this section is deprecated, but is leaved here as historical note :)
{{collapse/div|#Deprecated Section}}
{{collapse/div|#Remove me: Deprecated Section}}
<syntaxhighlight lang="shell" line="1">
<syntaxhighlight lang="shell" line="1">
sudo apt update
sudo apt update
Line 35: Line 33:


== Install latest OnlyOffice ==
== Install latest OnlyOffice ==
{{collapse/begin}}
The rest part of this section is deprecated, but is leaved here as historical note :)
{{collapse/div|#Remove me: Deprecated Section}}
Get a list of all available versions of OnlyOffice images ([https://stackoverflow.com/a/42879158/6543935 reference]).<syntaxhighlight lang="shell" line="1">
Get a list of all available versions of OnlyOffice images ([https://stackoverflow.com/a/42879158/6543935 reference]).<syntaxhighlight lang="shell" line="1">
wget -q https://registry.hub.docker.com/v1/repositories/onlyoffice/documentserver/tags -O - | jq -r '.[].name'
wget -q https://registry.hub.docker.com/v1/repositories/onlyoffice/documentserver/tags -O - | jq -r '.[].name'
Line 44: Line 45:
* Note the option <code>--restart=always</code> means the container will run automatically when Docker is started/restarted.
* Note the option <code>--restart=always</code> means the container will run automatically when Docker is started/restarted.
* Docker will pull the image automatically when it is not available locally.
* Docker will pull the image automatically when it is not available locally.
 
{{collapse/end}}
== Apache2 Proxy Virtual Host ==
== Apache2 Proxy Virtual Host ==
Test Whether the cesessary Apache2 modules are enabled.<syntaxhighlight lang="shell" line="1">
Test Whether the cesessary Apache2 modules are enabled.<syntaxhighlight lang="shell" line="1">
Line 108: Line 109:
== References ==
== References ==


* [https://helpcenter.onlyoffice.com/installation/docs-community-install-docker.aspx#Installing OnlyOffice Help Center: Installing ONLYOFFICE Docs Community Edition for Docker on a local server]
* OnlyOffice Help Center: [https://helpcenter.onlyoffice.com/installation/docs-community-install-docker.aspx#Installing Installing ONLYOFFICE Docs Community Edition for Docker on a local server]
* [https://hub.docker.com/r/onlyoffice/documentserver Docker Hub: onlyoffice/documentserver]
* Docker Hub: [https://hub.docker.com/r/onlyoffice/documentserver onlyoffice/documentserver]
* [https://github.com/ONLYOFFICE/onlyoffice-nextcloud GitHub: ONLYOFFICE/onlyoffice-nextcloud]
* GitHub: [https://github.com/ONLYOFFICE/onlyoffice-nextcloud ONLYOFFICE/onlyoffice-nextcloud]
* [https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases GitHub: ONLYOFFICE/onlyoffice-nextcloud/releases]
* GitHub: [https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases ONLYOFFICE/onlyoffice-nextcloud/releases]
* [https://api.onlyoffice.com/editors/nextcloud OnlyOffice Api Docs:  Nextcloud ONLYOFFICE integration app]
* OnlyOffice Api Docs: [https://api.onlyoffice.com/editors/nextcloud Nextcloud ONLYOFFICE integration app]
* [https://github.com/ONLYOFFICE/onlyoffice-nextcloud/issues/297 <nowiki>GitHub: ONLYOFFICE/onlyoffice-nextcloud/issues/[Can't connect do document server after update to NC19 #297]</nowiki>]
* GitHub: [https://github.com/ONLYOFFICE/onlyoffice-nextcloud/issues/297 <nowiki>ONLYOFFICE/onlyoffice-nextcloud/issues/[Can't connect do document server after update to NC19 #297]</nowiki>]
* [https://phoenixnap.com/kb/install-docker-on-ubuntu-20-04 phoenixNAP: How To Install and Use Docker on Ubuntu 20.04]
* PhoenixNAP: [https://phoenixnap.com/kb/install-docker-on-ubuntu-20-04 How To Install and Use Docker on Ubuntu 20.04]
<noinclude>
<noinclude>
<div id='devStage'>
<div id='devStage'>

Revision as of 09:03, 25 September 2022

Here is a short step-by-step man­u­al: How to set­up On­ly­Of­fice Dock­er con­tain­er and proxy it by Apache2 for NextCloud us­age.

In­stall Dock­er

Ac­cord­ing to the Dock­er in­stal­la­tion, read the guide Dock­er Ba­sic Set­up. The fol­low­ing part of this sec­tion is dep­re­cat­ed, but is leaved here as his­tor­i­cal note :)

#Re­move me: Dep­re­cat­ed Sec­tion
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable"
sudo apt install docker-ce
docker --version
sudo systemctl start docker
sudo systemctl enable docker
Al­low Dock­er us­age by your $USER with­out us­ing su­do.
sudo groupadd docker
sudo usermod -aG docker $USER
su - $USER
id -nG
Prune un­used Dock­er con­tain­ers and im­ages pe­ri­od­i­cal­ly.
sudo crontab -l | grep -i 'docker'
0 2 * * 7 /usr/bin/docker container prune
In my case the fol­low­ing was the most im­por­taint step to get On­ly­Of­fice con­tain­er works cor­rect­ly.
sudo sed 's/^#DOCKER_OPTS/DOCKER_OPTS/' /etc/default/docker -i
sudo systemctl restart docker

In­stall lat­est On­ly­Of­fice

The rest part of this sec­tion is dep­re­cat­ed, but is leaved here as his­tor­i­cal note :)

#Re­move me: Dep­re­cat­ed Sec­tion
Get a list of all avail­able ver­sions of On­ly­Of­fice im­ages (ref­er­ence).
wget -q https://registry.hub.docker.com/v1/repositories/onlyoffice/documentserver/tags -O - | jq -r '.[].name'
Down­lad the lat­est On­ly­Of­fice im­age and run it at port 81 of 127.0.0.1 lo­cal­host.
# docker pull onlyoffice/documentserver
docker run -i -t -d -p 81:80 --restart=always onlyoffice/documentserver:latest
  • Note the op­tion –restart=always means the con­tain­er will run au­to­mat­i­cal­ly when Dock­er is started/​​​restarted.
  • Dock­er will pull the im­age au­to­mat­i­cal­ly when it is not avail­able lo­cal­ly.

Apache2 Proxy Vir­tu­al Host

Test Whether the ce­ses­sary Apache2 mod­ules are en­abled.

sudo apache2ctl -M | grep -E 'auth[nz]_core|unixd|proxy|headers|setenvif'
 unixd_module (static)          # Required
 authn_core_module (shared)     # Required
 authz_core_module (shared)     # Required
 headers_module (shared)        # Required
 proxy_module (shared)          # Required
 proxy_fcgi_module (shared)
 proxy_http_module (shared)     # Required
 proxy_http2_module (shared)
 proxy_wstunnel_module (shared) # Required
 setenvif_module (shared)       # Required

Set­up a new vir­tu­al host as fol­low and restart Apache2. Note in this sce­nar­i­ou you need a valid SSL/TLS certivi­cate.

sudo nano /etc/apache2/sites-enabled/docs.example.com.conf
<VirtualHost *:80>
    ServerName docs.example.com
    ServerAdmin admin@example.com
    Redirect permanent "/" "https://docs.example.com/"
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
    ServerName docs.example.com
    ServerAdmin admin@example.com

    ErrorLog ${APACHE_LOG_DIR}/docs.example.com.error.log
    CustomLog ${APACHE_LOG_DIR}/docs.example.com.access.log combined

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

    <IfModule pagespeed_module>
        ModPagespeed off
    </IfModule>
    
    <IfModule security2_module>
      # SecRuleEngine Off
    </IfModule>
    
    # ProxyPreserveHost On
    # ProxyRequests Off

    SetEnvIf Host "^(.*)$" THE_HOST=$1
    Header edit Set-Cookie ^(.*)$ "$1; HttpOnly; Secure"
    RequestHeader setifempty X-Forwarded-Proto https
    RequestHeader setifempty X-Forwarded-Host %{THE_HOST}e
    ProxyAddHeaders Off

    ProxyPassMatch (.*)(\/websocket)$ "ws://localhost:81/$1$2"
    ProxyPass / "http://localhost:81/"
    ProxyPassReverse / "http://localhost:81/"

</VirtualHost>
</IfModule>

Ref­er­ences