Artikulu honetan docker-compose erabiliz Nextcloud instalazio bat nola egin azalduko dugu. Dokumentuak kolaboratiboki editatzeko Collabora-Xuxen erabiliko dugu, datu-base bezala MariaDB eta Redis memoriaren cache-rako. Instalazioaren oinarrian Debian 10 Buster dagoela suposatzen da, beste GNU/Linux banaketa bat erabili nahi izanez gero, nahiko erraz egokitu daitezke hemengo pausoak.
- Hasteko docker eta docker-compose instalatu behar ditugu. Horretarako egin beharrekoa artikulu honetan azaldu genuen.
- docker-compose.yml fitxategi bat sortu eduki hauekin:
version: '2.4' services: db: image: mariadb mem_limit: 512m memswap_limit: 512m container_name: nextcloud-db command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW restart: unless-stopped volumes: - ./volumes/mariadb/_data:/var/lib/mysql - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /etc/default/keyboard:/etc/default/keyboard:ro - /etc/default/locale:/etc/default/locale:ro environment: - MYSQL_ROOT_PASSWORD=JARRI_HEMEN_MARIADB_ROOT_PASAHITZA - MYSQL_PASSWORD=JARRI_HEMEN_MARIADB_PASAHITZA - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud networks: - nextcloud_network redis: image: redis:alpine mem_limit: 100m memswap_limit: 100m container_name: nextcloud-redis command: redis-server --requirepass JARRI_HEMEN_REDIS_PASAHITZA restart: unless-stopped networks: - nextcloud_network app: image: nextcloud:20.0.4 mem_limit: 512m memswap_limit: 512m container_name: nextcloud-app networks: - nextcloud_network ports: - 127.0.0.1:8080:80 depends_on: - db - redis volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /etc/default/keyboard:/etc/default/keyboard:ro - /etc/default/locale:/etc/default/locale:ro - ./volumes/nextcloud/_data:/var/www/html environment: - MYSQL_HOST=db - REDIS_HOST=redis - REDIS_HOST_PASSWORD=JARRI_HEMEN_REDIS_PASAHITZA restart: unless-stopped cron: image: nextcloud:20.0.4 container_name: nextcloud-cron networks: - nextcloud_network restart: unless-stopped volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /etc/default/keyboard:/etc/default/keyboard:ro - /etc/default/locale:/etc/default/locale:ro - ./volumes/nextcloud/_data:/var/www/html environment: - MYSQL_HOST=db - REDIS_HOST=redis - REDIS_HOST_PASSWORD=JARRI_HEMEN_REDIS_PASAHITZA entrypoint: /cron.sh depends_on: - db - redis collabora_xuxen: image: iametza/collabora-xuxen:4.2.5.3 mem_limit: 1G memswap_limit: 1G container_name: collabora-xuxen networks: - nextcloud_network cap_add: - MKNOD ports: - 127.0.0.1:9980:9980 environment: # This nees to be the same as what you set your app domain too (ex: cloud.domain.tld). - domain=JARRI_HEMEN_NEXTCLOUD_DOMEINUA - username=admin - password=JARRI_HEMEN_COLLABORA_ADMIN_PASAHITZA - VIRTUAL_PROTO=https - VIRTUAL_PORT=443 - VIRTUAL_HOST=JARRI_HEMEN_COLLABORA_DOMEINUA - dictionaries=eu es_ES fr_FR en_GB en_US restart: unless-stopped networks: nextcloud_network:
Ordezkatu beharrekoak:
- Jarri instalatu nahi diren Nextcloud (app eta cron kontainerretan) eta Collabora-xuxen-en bertsioak.
- JARRI_HEMEN_MARIADB_ROOT_PASAHITZA: MariaDBko root erabiltzailearen pasahitza.
- JARRI_HEMEN_MARIADB_PASAHITZA: MariaDBko nextcloud erabiltzailearen pasahitza.
- JARRI_HEMEN_REDIS_PASAHITZA: Redis-en pasahitza. 3 kontainerri jarri behar zaie: redis, app eta cron. Hiruetan berdina jarri behar da, bestela Nextcloud kontainerrak ezingo du Redis-era konektatu.
- JARRI_HEMEN_NEXTCLOUD_DOMEINUA: Nextcloud instalazioaren domeinua edo azpi-domeinua (https:// gabe). Adibidez: nextcloud.adibidea.eus.
- JARRI_HEMEN_COLLABORA_DOMEINUA: Collabora instalazioaren domeinua edo azpi-domeinua (https:// gabe). Adibidez: collabora.adibidea.eus.
- JARRI_HEMEN_COLLABORA_ADMIN_PASAHITZA: Collaboraren administrazioko interfazera konektatzeko pasahitza.
- Beharrezko karpetak sortu:
volumes/nextcloud/_data
volumes/mariadb/_data
- Kontainerrak martxan jarriko ditugu:
docker-compose up -d
- Apache2 zerbitzaria instalatuko dugu:
apt install apache2
- Apacheren moduluak gaitu:
a2enmod ssl headers proxy proxy_wstunnel proxy_http rewrite env dir mime
- Apache berrabiarazi:
systemctl restart apache2
- /etc/apache2/sites-available/ karpetan nextcloud.conf fitxategia sortu eduki honekin:
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin JARRI_HEMEN_ADMINISTRATZAILEAREN_HELBIDE_ELEKTRONIKOA ServerName JARRI_HEMEN_NEXTCLOUD_DOMEINUA <Location "/"> ProxyPreserveHost On ProxyPass http://localhost:8080/ ProxyPassReverse http://localhost:8080/ </Location> # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error-nextcloud.log CustomLog ${APACHE_LOG_DIR}/access-nextcloud.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost>
Ordezkatu beharrekoak:
- JARRI_HEMEN_ADMINISTRATZAILEAREN_HELBIDE_ELEKTRONIKOA: Zure helbide elektronikoa jarri.
- JARRI_HEMEN_NEXTCLOUD_DOMEINUA: Nextcloud instalazioaren domeinua (https:// gabe). Adibidez: nextcloud.adibidea.eus.
- /etc/apache2/sites-available/ karpetan collabora.conf fitxategia sortu eduki hauekin:
<VirtualHost *:443> ServerName HEMEN_COLLABORA_DOMEINUA_JARRI:443 Options -Indexes # SSL configuration, you may want to take the easy route instead and use Lets Encrypt! #SSLEngine on #SSLProtocol all -SSLv2 -SSLv3 #SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS #SSLHonorCipherOrder on # Encoded slashes need to be allowed AllowEncodedSlashes NoDecode # Container uses a unique non-signed certificate SSLProxyEngine On SSLProxyVerify None SSLProxyCheckPeerCN Off SSLProxyCheckPeerName Off # keep the host ProxyPreserveHost On # static html, js, images, etc. served from loolwsd # loleaflet is the client part of LibreOffice Online ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0 ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet # WOPI discovery URL ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0 ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery # Capabilities ProxyPass /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0 ProxyPassReverse /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities # Main websocket ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon # Admin Console websocket ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws # Download as, Fullscreen presentation and Image upload operations ProxyPass /lool https://127.0.0.1:9980/lool ProxyPassReverse /lool https://127.0.0.1:9980/lool </VirtualHost>
Ordezkatu beharrekoak:
- JARRI_HEMEN_COLLABORA_DOMEINUA: Collabora instalazioaren domeinua edo azpi-domeinua (https:// gabe). Adibidez: collabora.adibidea.eus.
- Bi webguneak gaitu:
a2ensite nextcloud.conf a2ensite collabora.conf
- Apache birkargatu:
systemctl reload apache2
- Certbot erabiliz https ziurtagiriak konfiguratuko ditugu. Trafikoa HTTPtik HTTPSra birbideratu nahi al dugun galdetzen digunean baietz erantzungo diogu.
apt update apt install certbot python-certbot-apache certbot --apache
- Collaboraren SSL Engine On eta ondorengo lerroak desiruzkindu.
SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS SSLHonorCipherOrder on
- Certbot-ek Nextcloud-entzako nextcloud-le-ssl.conf sortu du automatikoki. Lerro hauek gehituko ditugu bertan:
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule> RewriteEngine On RewriteRule ^/\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L] RewriteRule ^/\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
Strict Transport Security goiburua HTTPS ez diren eskaerak ez onartzeko jartzen da. headers modulua instalatuta eduki behar da erabili ahal izateko. Ikusi: https://docs.nextcloud.com/server/20/admin_manual/installation/harden_server.html#enable-http-strict-transport-security
Bestela mezu hau agertzen da Nextcloud-eko administrazioko “Ikuspegi orokorra” orriko “Segurtasun eta konfigurazio abisuak” atalean:
"Strict-Transport-Security" HTTP goiburua ez dago gutxienez "15552000" segundora ezarria. Segurtasuna hobetzeko, segurtasun aholkuetan gomendatu bezala, HSTS gaitzea gomendatzen da.
Bi Rewrite arauak helbide liburuen eta egutegien carddav eta caldav protokoloen URLak dagokion lekura berbideratzeko dira. Jartzen ez badira, mezu hauek agertzen dira Nextcloud-eko administrazioko “Ikuspegi orokorra” orriko “Segurtasun eta konfigurazio abisuak” atalean:
Zure web zerbitzaria ez dago behar bezala konfiguratuta "/.well-known/caldav" ebazteko. Dokumentazioan aurkituko duzu informazio gehiago. Zure web zerbitzaria ez dago behar bezala konfiguratuta "/.well-known/carddav" ebazteko. Dokumentazioan aurkituko duzu informazio gehiago.
- Nabigatzailean Nextcloud dagoen URLra joan. Administratzailearen erabiltzaile-izena eta pasahitza eta MariaDBren datu-basearen konfigurazioko datuak sartu behar dira (docker-compose.yml fitxategian jarri ditugunak). Datu-basearen domeinu bezala db jarri.
- Collabora aplikazioa instalatzeko Nextcloudeko Konfigurazioa > Aplikazioak-era joan eta bilatzailea erabiliz edo zuzenean “Collabora Online” aplikazioa aurkitu eta “Deskargatu eta gaitu” botoia sakatuko dugu.
- Konfigurazioa > Ezarpenak > Administrazioa> Collabora Online atalera joan eta “Erabili zure zerbitzaria” aukera hautatuko dugu jarraian.
- “Collabora Online zerbitzariaren URL (eta ataka)” sartzeko eremua agertuko zaigu. Dagokion URLa idatzi eta Gorde sakatu (https-rekin). Adibidez: https://collabora.adibidea.eus