Umzug vom Nextcloud Server in einen Docker Container
Die Tage habe ich es geschafft, meine Nextcloud Instanz komplett in einen Docker Container, um zu ziehen. Als erstes komplettes Datenbank Backup gemacht.
Aktualität der Anleitung: 25.11.2021
Backup der Datenbank erstellen
sudo mysqldump –uroot –p nextcloud_db.sql > backup.sql
Als nächstes habe ich Docker–compose installiert und eingerichtet.
Docker-compose und Nextcloud 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.
cd /opt && sudo git clone https://github.com/Happyfeet01/Nextcloud-Docker && cd Nextcloud-Docker
Datenbank Passwort setzen
sudo vi db.env
Diese wird folgende Konfiguration wird rein geschrieben.
MYSQL_PASSWORD=passwort ändern # < -- abändern!
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
Alle benötigten Ordner usw. werden automatisch erstellt sobald die Container erstellt werden.
<code>sudo docker-compose up –d</code>
Alles sollte nun laufen.
Nginx Konfiguration erstellen
sudo /etc/nginx/sites–available/cloud.domain.tld
server {
server_name cloud.domain.tld;
root /dev/null;
index index.html;
location / {
proxy_pass http://localhost:9024/;
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;
#include /etc/nginx/snippets/ssl.conf;
}
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 nextcloud_app_1 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.
NGinx config für Collabora
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name office.domain.tld;
# SSL
ssl_certificate /etc/letsencrypt/live/office.domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/office.domain.tld/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/office.domain.tld/chain.pem;
access_log /var/log/nginx/office.domain.tld.access_log;
error_log /var/log/nginx/office.domain.tld.error_log info;
# static files
location ^~ /loleaflet {
proxy_pass http://localhost:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting {
proxy_pass http://localhost:9980;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/lool/(.*)/ws$ {
proxy_pass http://localhost:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
location ~ ^/lool {
proxy_pass http://localhost:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /lool/adminws {
proxy_pass http://localhost:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass http://localhost:9980;
proxy_set_header Host $http_host;
}
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name .office.domain.tld;
location / {
return 301 https://office.domain.tld$request_uri;
}
}
Cronjob einrichten
Der Cron-Daemon dient der zeitbasierten Ausführung von Prozessen in Unix und unixartigen Betriebssystemen wie Linux, BSD oder macOS, um wiederkehrende Aufgaben – Cronjobs – zu automatisieren. Häufig führt der Cron-Daemon regelmäßig Computerprogramme für die Instandhaltung des Systems aus, üblicherweise auf Serversystemen, welche rund um die Uhr laufen.
Dies hab im Crontab für den Root User:
@hourly docker exec -u33 nextcloud_app_1 php -f occ news:updater:update-feed <User>
@daily docker exec -u33 nextcloud_app_1 php -f occ maps:scan-photos
@daily docker exec -u33 nextcloud_app_1 php -f occ files:scan --all
@daily docker exec -u33 nextcloud_app_1 php -f occ music:scan --all
@weekly docker exec -u33 nextcloud_app_1 php -f occ versions:cleanup