Okt
06
2020
0

Kompletter Umzug eines Nextcloud Servers in einen Docker Container

0
(0)

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 einrichte

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/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/db
mkdir -p /home/nextcloud/els_data
mkdir -p /home/nextcloud/data
mkdir -p /home/nextcloud/themes
mkdir -p /home/nextcloud/custom_apps
mkdir -p /home/nextcloud/config
mkdir elasticsearch

Dockerfile erstellen

Danach wird im Ordner elasticsearch ein Dockerfile erstellt.

sudo vi elasticsearch/Dockerfile

<figure class="kg-card kg-code-card">
<pre><code class="language-bash">FROM nextcloud:production


RUN apt update && apt -y install lsb-release apt-transport-https ca-certificates wget
RUN wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
RUN echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.3.list
  
RUN apt-get -y install apt-utils curl cmake make gcc libc-dev g++ libopenblas-dev libx11-dev pkg-config aria2 python ruby-redis memcached coturn ffmpeg imagemagick ghostscript bash vim git

RUN curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl && chmod a+rx /usr/local/bin/youtube-dl
 chmod 740 /var/www/html/custom_apps/ocdownloader/SERVER/fallback.*
ADD turnserver.conf /etc/turnserver.conf
RUN echo "TURNSERVER_ENABLED=1" >> /etc/default/coturn && service coturn restart

# DLib https://github.com/goodspb/pdlib#dependencies

RUN git clone https://github.com/davisking/dlib.git 
 ;  cd dlib/dlib 
 ;  mkdir build 
 ;  cd build 
 ;  cmake -DBUILD_SHARED_LIBS=ON .. 
 ;  make 
 ;  make DESTDIR=/dlib-install install 
 ;  make install

# https://github.com/goodspb/pdlib#installati

RUN git clone https://github.com/goodspb/pdlib.git 
  ; cd pdlib 
  ; phpize 
  ; ./configure  
  ; make 
  ; make DESTDIR=/pdlib-install install</code></pre>
<figcaption>Update vom 16.04.2020 </figcaption>
</figure>