Albisteak

Nextcloud + Collabora-Xuxen + MariaDB + Redis instalazioa docker-compose erabiliz

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.

  1. Hasteko docker eta docker-compose instalatu behar ditugu. Horretarako egin beharrekoa artikulu honetan azaldu genuen.
  2. 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.
  3. Beharrezko karpetak sortu:
    • volumes/nextcloud/_data
    • volumes/mariadb/_data
  4. Kontainerrak martxan jarriko ditugu:
    docker-compose up -d
  5. Apache2 zerbitzaria instalatuko dugu:
    apt install apache2
  6. Apacheren moduluak gaitu:
    a2enmod ssl headers proxy proxy_wstunnel proxy_http rewrite env dir mime
  7. Apache berrabiarazi:
    systemctl restart apache2
  8. /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.
  9.  /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.
  10. Bi webguneak gaitu:
    a2ensite nextcloud.conf
    a2ensite collabora.conf
  11. Apache birkargatu:
    systemctl reload apache2
  12. 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
  13. 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
  14. 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.
  15. 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.
  16. Collabora aplikazioa instalatzeko Nextcloudeko Konfigurazioa > Aplikazioak-era joan eta bilatzailea erabiliz edo zuzenean “Collabora Online” aplikazioa aurkitu eta “Deskargatu eta gaitu” botoia sakatuko dugu.
  17. Konfigurazioa > Ezarpenak > Administrazioa> Collabora Online atalera joan eta “Erabili zure zerbitzaria” aukera hautatuko dugu jarraian.
  18. “Collabora Online zerbitzariaren URL (eta ataka)” sartzeko eremua agertuko zaigu. Dagokion URLa idatzi eta Gorde sakatu (https-rekin). Adibidez: https://collabora.adibidea.eus
Menua