Nextcloud mit Docker und Docker-Compose installiert

Nachdem ich zunehmend den Eindruck habe, dass der Owncloud-Fork Nextcloud 1. aktiver und 2. mehr auf Sicherheit bedacht ist als der Vorgänger Owncloud, habe ich mir Nextcloud mit Docker installiert. Das ging ziemlich einfach und “strightforward”.

Unten das docker-compose-File. Hier ein paar Anmerkungen:

  • Die Mariadb wird mit einem root-Passwort aus MYSQL_ROOT_PASSWORD und einem User mit Zugriff auf eine neue DB (Username/Passwort und DB-Name aus db.env) eingerichtet.
  • Nextcloud erhält Zugriff über die gleichen Variablen in db.env.
  • Die Daten lege ich ein separates Volume .../data.
  • Backup der DB erstelle ich vollautomatisch über das Docker-Image dsteinkopf/backup-all-mysql.
  • Backup der Dateien erfolgt über ohnehin bei mir existierende Backup-Mechanismen, die das gesamte Basisverzeichnis der Docker-Volumes (bei mir /opt/dockervolumes) sichern.
  • Die Volumes /etc/timezone und /etc/localtime sorgen dafür, dass der Container mit der Zeitzone des Hosts läuft.
  • Alles steckt in einem eigenen, gemeinsamen Netz nextcloudnet.
  • Die Erreichbarkeit von außen und die SSL-Verschlüsselung erreiche ich via separatem Reverse-Proxy (Config-File: siehe unten) mit letsencrypt-Automatik. Damit Nextcloud gut darüber arbeitet war noch Folgendes in /opt/dockervolumes/nextcloud/var_www_html/config/config.php nötig:
    • trusted_domains muss noch die außen sichtbare Domain enthalten.
    • overwrite.cli.url muss ebenfalls die öffentliche URL enthalten.
    • overwriteprotocol: https.
  • Außerdem habe ich in der genannten config.php noch den Mailserver konfiguriert:
     'mail_from_address' => 'nextcloud',
      'mail_smtpmode' => 'smtp',
      'mail_smtpauthtype' => 'LOGIN',
      'mail_domain' => 'my.public.domain',
      'mail_smtpsecure' => 'tls',
      'mail_smtpauth' => 1,
      'mail_smtphost' => 'my.mail.server',
      'mail_smtpport' => '25',
    
  • P.S. Es wäre sicher sinnvoll, alle Passworte aus dem Compose-File herauszuhalten, aber die Mühe habe ich mir für meine eigene “kleine” Umgebung nicht gemacht.

Ich hoffe, ich habe an alles gedacht – das ganze läuft so inzwischen seit ein paar Wochen bei mir stabil.

Links

docker-compose.yml für Nextcloud

version: '2' 

services:

  db:
    image: mariadb
    restart: always
    volumes:
      - /opt/dockervolumes/nextcloud/mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=sehrgeheimroot
    env_file:
      - db.env
    networks:
      - nextcloudnet

  backup-mysql:
    image: dsteinkopf/backup-all-mysql:latest
    restart: always
    environment:
      - BACKUP_INTERVAL=86400
      - BACKUP_FIRSTDELAY=4000
      - 'MYSQL_CONNECTION_PARAMS=--user=root --host=db --password=sehrgeheim123'
    links:
      - db
    volumes:
      - /opt/dockervolumes/nextcloud/mysql-backup:/var/dbdumps
    networks:
      - nextcloudnet

  nextcloud:
    image: nextcloud:apache
    restart: always
    ports:
      - 8094:80
    links:
      - db
    volumes:
      - /opt/dockervolumes/nextcloud/var_www_html:/var/www/html
      - /opt/dockervolumes/nextcloud/data:/var/www/html/data
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    environment:
      - MYSQL_HOST=db
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=sehrgeheim456
    env_file:
      - db.env
    networks:
      - nextcloudnet


networks:

  nextcloudnet:
    # empty

Das zugehörig db.env sieht so aus:

db.env

MYSQL_PASSWORD=sehrgeheim123
MYSQL_DATABASE=nextcloud

Reverse-Proxy-Config

<IfModule mod_ssl.c>
<VirtualHost *:443>

        #  General setup for the virtual host
        DocumentRoot "/var/www"
        ServerName my-nextcloud.steinkopf.net
        ServerAdmin webmaster@steinkopf.net
        ErrorLog /var/log/apache2/my-nextcloud.steinkopf.net_error.log
        TransferLog /var/log/apache2/my-nextcloud.steinkopf.net_access.log

        Include /etc/apache2/dstk-all-sites-incl.conf

        # see https://doc.owncloud.org/server/8.1/admin_manual/configuration_server/harden_server.html
        Header always add Strict-Transport-Security "max-age=15768000"

        # RewriteLogLevel 3

        RewriteEngine On
        ProxyRequests Off

        ProxyPass        / http://docker-prod.steinkopf.net:8094/
        ProxyPassReverse / http://docker-prod.steinkopf.net:8094/

        SSLCertificateFile /etc/letsencrypt/live/my-nextcloud.steinkopf.net/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/my-nextcloud.steinkopf.net/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

6 thoughts on “Nextcloud mit Docker und Docker-Compose installiert

  1. Danke. Das stimmt natürlich… ist für eine “low traffic”-Installation wohl weniger wichtig – für den “Echtbetrieb” schon eher. Und es gilt wohl für DB- und für Filesytem-Backup. Ich denke drüber nach…

  2. Das ist recht einfach gemacht, per “docker in docker” und per: ‘docker exec –user www-data nextclouddocker php occ maintenance:mode –on’

    1. Richtig. Bei mir sieht das konkret so aus:
      docker exec --user www-data nextcloud_nextcloud_1 php occ maintenance:mode --off

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.