Kompletter Umzug eines Nextcloud Servers in einen Docker Container4 min zu lesen

Die Tage habe ich es geschafft, meine Nextcloud Instanz komplett in einen Docker Container um zu ziehen. Als erstes komplettes Datenbank Backup gemacht.

Backup der Datenbank erstellen

sudo mysqldump –uroot –p nextcloud_db.sql > backup.sql

Als nächstes habe ich da Docker–compose installiert und eingerichtet.

Docker-compose einrichten

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

Dann habe ich ein Verzeichnis eingerichtet wo die zukünftige Konfiguration der Cloud abgespeichert wird.

sudo mkdir –p /docker/nextcloud && cd /docker/nextcloud

Die Datei die zuerst erstellt wird, ist eine Docker-compose.yml Datei.

Docker Konfiguration erstellen

sudo vi docker–compose.yml

Diese wird folgende Konfiguration wird rein geschrieben.

version: '2.2'

services:
  db:
    image: mariadb
    container_name: nextcloud-pro-mariadb
    networks:
      - nextcloud-pro_network
    volumes:
      - /home/nextcloud-pro/db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD=SuperSecretPassword
      - MYSQL_PASSWORD=SecretPassword
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    restart: unless-stopped
  redis:
    container_name: nextcloud-pro_redis
    networks:
      - nextcloud-pro_network
    image: redis:alpine
    restart: always 
  app:
    image: nextcloud:latest
    container_name: nextcloud-pro
    networks:
      - nextcloud-pro_network
    depends_on:
      - db
      - redis
    volumes:
      - /home/nextcloud/config:/var/www/html/config
      - /home/nextcloud/custom_apps:/var/www/html/custom_apps
      - /home/nextcloud/data:/var/www/html/data
      - /home/nextcloud/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - NEXTCLOUD_TRUSTED_DOMAINS=cloud.domain.tld
      - NEXTCLOUD_ADMIN_USER=NCuser
      - NEXTCLOUD_ADMIN_PASSWORD=Password
      - REDIS_HOST=redis
      - REDIS_HOST_PORT=6379
      - MYSQL_PASSWORD=SecretPassword
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    ports:
      - '8090:80'
    restart: unless-stopped
  elasticsearch:
    build: ./elasticsearch
    container_name: els_nextcloud
    restart: always
    environment:
      - cluster.name=ncsearch
      - bootstrap.memory_lock=true
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms750m -Xmx750m"
      - "network.host=0.0.0.0"
    ulimits:
      memlock:
        soft: -1
        hard: -1
        # location for persistent data
    volumes:
      - /home/nextcloud/els_data:/usr/share/elasticsearch/data
    ports:
      - "127.0.0.1:9200:9200"
    expose:  # make elasticsearch reachable in the internal docker network
      - "9200" # direct elasticsearch connection
    networks:
      - nextcloud-pro_network

volumes:
  nextcloud:
  db:

networks:
  nextcloud-pro_network:

Mit diesem Setup hat man eine funktionierende Cloud, mit Redis als Cache und Fulltextsearch als Suchmaschine.

Verzeichnisse erstellen

Jetzt müssen die Ordner die als Volume angegeben sind erstellt werden. In diese wird beim start der Container der Inhalt geladen der beim restart und bei einem Upate erhalten bleiben soll.

mkdir –p /home/nextcloud/config
mkdir –p /home/nextcloud/data
mkdir –p /home/nextcloud/themes
mkdir –p /home/nextcloud/custom_apps
mkdir –p /home/nextcloud/els_data
chown –R www–data:www–data /home/nextcloud/

Danach wird der Container gestartet.

sudo docker-compose up –d

Alles sollte nun laufen. Damit Matomo funktioniert muss noch eine Datei angepasst werden.

Nginx Konfiguration erstellen

sudo /etc/nginx/sites–available/ cloud.domain.tld
 server {
    server_name cloud.domain.tld;
   

    index index.html;

    location / {
        proxy_pass http://localhost:8090/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
        client_max_body_size 0;

        access_log /var/log/nginx/nextcloud.access.log;
        error_log /var/log/nginx/nextcloud.error.log;
    }

    location /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }

    location /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    listen [::]:443 ssl http2; # managed by Certbot
    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/cloud.domain.tld/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/cloud.domain.tld/privkey.pem; # managed by Certbot
    ssl_trusted_certificate /etc/letsencrypt/live/cloud.domain.tld/chain.pem;
    
}

server {
    if ($host = cloud.domain.tld) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80;
        listen [::]:80;

        server_name cloud.domain.tld;
    return 404; # managed by Certbot
}
        

        

Als nächstes werden die Zertifikate erstellt, die wir für die Seite genötigen.

Zertifikate erstellen

sudo certbot –certonly –d cloud.domain.tld
sudo service nginx reload

Jetzt sollte alles passen und laufen.

Um nun die Datenbank wieder zurückzuspielen benutzen wir folgendes Kommando.

 cat /home/backup/mysqldump/cloud.sql | docker exec -i <containerid> mysql  -unextcloud –p SecretPassword nextcloud

Das zurück spielen wird je nach Größe der datenbank etwas dauern, aber dann sollte alles wieder funktionieren. Wenn nicht schreibt es in die Kommentare.

Wie hat dir der Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (1 Stimme(n), durchschnittliche Bewertung: 5,00 von 5)
Loading...
Folgt mir

lars

Ich bin Blogger, Technikfan und Fachangestellter für Bäderbetriebe seit 15 Jahren. Ein Leben am Beckenrand 🙂
Folgt mir auf Telegram https://t.me/dasnetzundich
lars
Folgt mir

Letzte Artikel von lars (Alle anzeigen)

4 Kommentare

  1. also um ehrlich zu sein fehlen mir ein paar Details hinsichtlich des erstellen des Nutzers nextcloud unter ‚/home/nextcloud‘. Ich vermute du hast nicht einfach ein Verzeichnis angelegt sondern einen Nutzer, der das Homeverzeichnis besitzt, und dieser Nutzer ist auch in der Docker group ?!

    Weil ich mir sonst vorstelle das es doch irgendwo zwackt mit den Rechten.

      1. Ok, der Nutzer nextcloud existiert Weill du es vorher local installiert hattest.
        Also wirklich nur im Umzugsfall von local host aug docker.
        Die locale installation habe ich frecher weiße übersprungen. Dann gibt es auch keinen User. So macht das Sinn.

        Danke für den Exkurs.
        Chanti

Schreibe einen Kommentar zu chanti Antworten abbrechen

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

Ich akzeptiere