<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://portunity.de/wiki/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Portunity Wiki - Neue Seiten [de]</title>
		<link>https://portunity.de/wiki/Spezial:Neue_Seiten</link>
		<description>Aus Portunity Wiki</description>
		<language>de</language>
		<generator>MediaWiki 1.15.4</generator>
		<lastBuildDate>Fri, 01 May 2026 08:41:35 GMT</lastBuildDate>
		<item>
			<title>Offsite-Backups mit Restic: Portunity secureBackup (S3)</title>
			<link>https://portunity.de/wiki/Offsite-Backups_mit_Restic:_Portunity_secureBackup_(S3)</link>
			<description>&lt;p&gt;Tfr@superroot:&amp;#32;/* S3-Bucket erzeugen */ +&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Portunity secureBackup (S3) mit restic nutzen =&lt;br /&gt;
== Variante A: per REST zum Restic-Server ==&lt;br /&gt;
&lt;br /&gt;
Anders als bei einem klassischen FTP- oder SFTP-Zugang bietet Restic die Möglichkeit, über ein eigenes Protokoll namens REST mit einem Restic-Server zu kommunizieren. Diese Art der Verbindung ist für Datensicherungen optimiert.&lt;br /&gt;
&lt;br /&gt;
Zudem stehen separate Zugangsdaten zur Verfügung, über die neue Snapshots hinzugefügt, aber bestehende nicht bearbeitet oder entfernt werden können. Dies bietet einen verbesserten Schutz gegen Ransomware und ist im Kundencenter als &amp;quot;Append-Only-Zugang&amp;quot; betitelt.&lt;br /&gt;
&lt;br /&gt;
Restic benötigt Zugangsdaten bestehend aus einer URL, einem Benutzernamen und einem Server-Kennwort. Das Server-Kennwort ist &amp;lt;em&amp;gt;nicht&amp;lt;/em&amp;gt; die Repository-Passphrase, die zur Ende-zu-Ende-Verschlüsselung der Daten verwendet wird. Diese fragt Restic erst bei der Einrichtung auf Ihrem Computer während des init-Befehls ab.&lt;br /&gt;
&lt;br /&gt;
=== Zugang erstellen ===&lt;br /&gt;
&lt;br /&gt;
Um einen Zugang zu erstellen und zu aktivieren, können Sie im Kundencenter auf [https://service.portunity.net service.portunity.net] nach Aufruf des gebuchten Produkts im Menüpunkt &amp;quot;Backup-Restic&amp;quot; folgendermaßen vorgehen:&lt;br /&gt;
&lt;br /&gt;
* Öffnen Sie einen der Zugangsdaten-Kästen durch Klick auf das Dreieck&lt;br /&gt;
* Wählen Sie &amp;quot;Konto aktivieren&amp;quot;&lt;br /&gt;
* Legen Sie im Kennwort-Feld ein Kennwort für den Standard-Zugang fest&lt;br /&gt;
* Wählen Sie &amp;quot;abweichendes Append only-Kennwort aktivieren&amp;quot;&lt;br /&gt;
* Legen Sie ein Kennwort für den Append-only-Zugang fest&lt;br /&gt;
* Speichern Sie die Änderung durch Klick auf den grünen Knopf oben rechts&lt;br /&gt;
&lt;br /&gt;
Zur Nutzung des Append-only-Zugangs werden die untere URL und das Append-only-Kennwort benötigt.&lt;br /&gt;
&lt;br /&gt;
=== Restic nutzen ===&lt;br /&gt;
&lt;br /&gt;
Erste Schritte mit Restic auf der Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
==== Repository initialisieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;restic -r 'rest:https://Benutzername:Kennwort@restic-rw-….portunity.de/backup1234_01' init&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sicherung durchführen (z.B. für den Ordner ~/Dokumente) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;restic -r 'rest:https://Benutzername:Kennwort@restic-rw-….portunity.de/backup1234_01' backup ~/Dokumente&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bestehende Sicherungen auflisten ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;restic -r 'rest:https://Benutzername:Kennwort@restic-rw-….portunity.de/backup1234_01' snapshots&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== bestimmte Sicherung wiederherstellen (z.B. ID &amp;quot;12345ABC&amp;quot;) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;restic -r 'rest:https://Benutzername:Kennwort@restic-rw-….portunity.de/backup1234_01' restore 12345ABC --target ~/Wiederherstellung&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variante B: über die S3-kompatible Schnittstelle ==&lt;br /&gt;
&lt;br /&gt;
Sofern Sie nicht Restic als Backup-Software einsetzen und das noch besser dafür spezialisierte REST-Protokoll nutzen möchten, ist eine S3-kompatible Schnittstelle das Mittel der Wahl, falls Ihre Software es anbietet.&lt;br /&gt;
&lt;br /&gt;
Sie können im Kundencenter auf [https://service.portunity.net service.portunity.net] nach Aufruf des gebuchten Produkts im Menüpunkt &amp;quot;Backup-S3&amp;quot; sogennante ''Buckets'' anlegen und den Zugriffsschlüssel einsehen bzw. neu generieren lassen. Die angezeigte Key-ID und der zugehörige Secret Access Key sind die Zugangsdaten für das jeweilige Bucket und müssen in der Backupsoftware hinterlegt werden.&lt;br /&gt;
&lt;br /&gt;
=== S3-Bucket erzeugen ===&lt;br /&gt;
&lt;br /&gt;
* Klicken Sie – sofern noch nicht geschehen – auf &amp;quot;Neuen Schlüssel generieren&amp;quot;.&lt;br /&gt;
* Tragen Sie die danach angezeigte Key-ID und den Secret Access Key in Ihre Backupsoftware ein.&lt;br /&gt;
* Je nach Software wird die Angabe einer Region verlangt. Tragen Sie in diesem Fall den angezeigten Wert aus dem Feld &amp;quot;S3-Region&amp;quot; ein.&lt;br /&gt;
&lt;br /&gt;
=== Restic-Beispielbefehle ===&lt;br /&gt;
&lt;br /&gt;
Für die Nutzung mit der Backup-Software Restic empfehlen wir die Nutzung des Restic-Servers anstelle der S3-kompatiblen Schnittstelle. Falls Sie jedoch S3 bevorzugen, beispielsweise zur Wahrung von Kompatibilität mit anderer Software und zum Exportieren der Backup-Daten, können Sie folgende Befehle verwenden.&lt;br /&gt;
&lt;br /&gt;
Die export-Befehle werden in jeder Shell-Sitzung nur einmal benötigt. Tipp: Ersetzen Sie die Zeilenumbrüche durch Semikolons, dann haben Sie eine einzige Zeile mit einem bequem erneut aufrufbaren Backup-Befehl inklusive Key-ID und Access Key.&lt;br /&gt;
&lt;br /&gt;
==== Repository initialisieren ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AWS_ACCESS_KEY_ID=die-angezeigte-key-id&lt;br /&gt;
export AWS_SECRET_ACCESS_KEY=der-angezeigte-secret-access-key&lt;br /&gt;
restic -r 's3:https://.....s3.portunityhosted.de/backupYYYYY-ZZ' init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sicherung durchführen (z.B. für den Ordner ~/Dokumente) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AWS_ACCESS_KEY_ID=die-angezeigte-key-id&lt;br /&gt;
export AWS_SECRET_ACCESS_KEY=der-angezeigte-secret-access-key&lt;br /&gt;
restic -r 's3:https://.....s3.portunityhosted.de/backupYYYYY-ZZ' backup ~/Dokumente&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Bestehende Sicherungen auflisten ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AWS_ACCESS_KEY_ID=die-angezeigte-key-id&lt;br /&gt;
export AWS_SECRET_ACCESS_KEY=der-angezeigte-secret-access-key&lt;br /&gt;
restic -r 's3:https://.....s3.portunityhosted.de/backupYYYYY-ZZ' snapshots&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== bestimmte Sicherung wiederherstellen (z.B. ID &amp;quot;12345ABC&amp;quot;) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AWS_ACCESS_KEY_ID=die-angezeigte-key-id&lt;br /&gt;
export AWS_SECRET_ACCESS_KEY=der-angezeigte-secret-access-key&lt;br /&gt;
restic -r 's3:https://.....s3.portunityhosted.de/backupYYYYY-ZZ' restore 12345ABC --target ~/Wiederherstellung&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Tue, 24 Feb 2026 18:53:06 GMT</pubDate>			<dc:creator>Tfr@superroot</dc:creator>			<comments>https://portunity.de/wiki/Diskussion:Offsite-Backups_mit_Restic:_Portunity_secureBackup_(S3)</comments>		</item>
		<item>
			<title>Offsite-Backups mit UniFi NAS Kopia Backup Software (Docker) Portunity secureBackup (S3/Ceph)</title>
			<link>https://portunity.de/wiki/Offsite-Backups_mit_UniFi_NAS_Kopia_Backup_Software_(Docker)_Portunity_secureBackup_(S3/Ceph)</link>
			<description>&lt;p&gt;Tfr@superroot:&amp;#32;hat „Offsite-Backups mit UniFi NAS Kopia Backup Software (Docker) Portunity secureBackup (S3/Ceph)“ nach „Offsite-Backups mit UniFi NAS Kopia Backup Software (Docker) Portunity secureBackup (S3)“ verschoben&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Zielbild (kurz) =&lt;br /&gt;
Dieses Setup kombiniert zwei Dinge:&lt;br /&gt;
* '''Schnelle lokale Wiederherstellung''' über Snapshots auf dem UniFi NAS (für „Mist gebaut / Datei versehentlich gelöscht“).&lt;br /&gt;
* '''Echte externe Datensicherung (Offsite)''' über Kopia-Snapshots in ein Portunity Secure-Backup S3-Bucket – inkrementell, dedupliziert, mit Aufbewahrungsregeln (täglich/wöchentlich/monatlich), ohne 20-fache Vollkopien.&lt;br /&gt;
&lt;br /&gt;
UniFi Drive/Unifi UNAS Pro 8 &amp;amp; Co bietet aktuell primär Backup als '''1:1-Kopie''' (Delta bezogen auf Dateien). Für längere Historien und „richtige“ Snapshot-Backups mit Dedupe/Encryption setzen wir deshalb Kopia auf einem separaten Docker-Host ein.&lt;br /&gt;
&lt;br /&gt;
'''''Hinweis:''' &lt;br /&gt;
* Wir haben das im Mitarbeiter-Kreis mit einem Unifi NAS Pro 8 getestet und dies von daher hier auch benannt. Die Anleitung ist aber allgemeingültig auch für andere NAS-Systeme wie Synology, QNAP, Windows-Freigabe, Linux Samba-Dienste u.a. und sollte dort ähnlich / gleichwertig funktionieren und stellt keine Wertung oder Empfehlung für Unifi von Ubiquiti dar. &lt;br /&gt;
* Auf NAS-Systemen anderer Hersteller haben Sie aber möglicherweise auch gesonderte / herstellereigene Backup-Lösungen, welche über eine 1:1 Kopie analog zu Kopia auch inkrementelle und deduplizierte Backups direkt vom NAS aus ermöglichen. Dennoch kann auch dabei Kopia Sinn machen, wenn Sie weitere Backupquellen einbinden möchten.''&lt;br /&gt;
&lt;br /&gt;
= Architektur =&lt;br /&gt;
'''Komponenten:'''&lt;br /&gt;
* '''UniFi NAS Pro 8''' mit mehreren SMB-Shares (z. B. Daten, Homeassistant, Paperless, Kasse, Media).&lt;br /&gt;
** oder andere NAS-Systeme wie Synology, QNAP, FreeNas, Windows-Freigaben u.a.&lt;br /&gt;
* '''Docker-Host''' (Linux) im gleichen Netz:&lt;br /&gt;
** mountet SMB-Shares read-only (quellseitig)&lt;br /&gt;
** stellt ein separates SMB-Share „Restore“ read-write bereit (zielseitig)&lt;br /&gt;
** betreibt '''Kopia als Docker-Container''' (Web-UI + Scheduler).&lt;br /&gt;
* '''Portunity Secure-Backup (S3 kompatibel)''' als Offsite-Ziel (Ceph Object Storage).&lt;br /&gt;
* '''HomeAssistant, lokales PaperLess &amp;amp; weitere Systeme''' &lt;br /&gt;
** sichern lokal zunächst 1x als 1:1 Kopie auf dem NAS, z.B. Paperless-Exporter via Cronjob, via Cronjob über Rsync o.ä.&lt;br /&gt;
** bzw. legen ihre von Haus aus möglichen Sicherungen auf einem Share ab, z.B. HomeAssistant, Registrierkassen o.ä. haben ein integriertes Backup, z.B. täglich für X Tage o.üä.&lt;br /&gt;
&lt;br /&gt;
'''Warum read-only Mounts?'''&lt;br /&gt;
Der Backup-Host soll im Normalbetrieb keine Produktivdaten verändern können. Restore erfolgt bewusst über ein separates Restore-Ziel.&lt;br /&gt;
&lt;br /&gt;
== UniFi NAS: Shares &amp;amp; lokale Snapshots ==&lt;br /&gt;
Auf dem UniFi NAS werden die Shares wie gewohnt angelegt. Lokale Snapshots sind optional, aber sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
'''Wichtiger Hinweis zur UniFi-Snapshot-Logik:'''&lt;br /&gt;
Pro Share ist in der UI typischerweise '''nur ein Snapshot-Schedule''' möglich (z. B. täglich ODER wöchentlich). Deshalb empfehlen wir:&lt;br /&gt;
* Produktiv-Shares (z. B. Daten, Paperless): '''täglich''' (z. B. 30–90 Versionen)&lt;br /&gt;
* Reine Backup-Shares (z. B. Backup_Paperless, Backup_Homeassistant): '''wöchentlich''' (z. B. 8–12)&lt;br /&gt;
* Große, „nice-to-have“ Daten (z. B. Media/Filmarchive): optional keine lokalen Snapshots&lt;br /&gt;
&lt;br /&gt;
Das ersetzt keine Offsite-Sicherung, ist aber für schnelle Rollbacks ideal. Bitte verwechsels Sie die Snapshoots auf dem NAS nicht mit den Snapshoots innerhalb von Kopia - dies sind zwei völlig getrennte Welten!&lt;br /&gt;
&lt;br /&gt;
= Portunity secureBackup (S3): Zugangsdaten finden =&lt;br /&gt;
Im Portunity Webinterface finden Sie pro Vertrag/Produkt eine „S3-kompatible Schnittstelle“ mit der Möglichkeit einen oder mehrere Buckets anzulegen.&lt;br /&gt;
&lt;br /&gt;
'''Screenshot (Beispiel):'''&lt;br /&gt;
[[Datei:secure-backup-s3-schnittstelle.jpg|800px|thumb|Portunity Secure-Backup – S3-Schnittstelle (Beispielansicht).]]&lt;br /&gt;
&lt;br /&gt;
'''Welche Felder braucht Kopia?'''&lt;br /&gt;
* '''S3-Bucket''' → Kopia Parameter: &amp;lt;code&amp;gt;--bucket&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Key-ID''' → Environment: &amp;lt;code&amp;gt;AWS_ACCESS_KEY_ID&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;S3_ACCESS_KEY&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Secret Access Key''' → Environment: &amp;lt;code&amp;gt;AWS_SECRET_ACCESS_KEY&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;S3_SECRET_KEY&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''S3-Region''' → Kopia Parameter: &amp;lt;code&amp;gt;--region&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''S3-Pfad / Endpoint''' → Kopia Parameter: &amp;lt;code&amp;gt;--endpoint&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Wichtig (Stolperfalle):'''&lt;br /&gt;
Bei Kopia muss &amp;lt;code&amp;gt;--endpoint&amp;lt;/code&amp;gt; '''nur der Hostname''' sein (ohne https:// und ohne /bucket-Pfad via bei Portunity ausgegeben mit s3://avcd123456.s3.backup1.portunityhosted.de/backup00000001-01).&lt;br /&gt;
Beispiel:&lt;br /&gt;
* korrekt: &amp;lt;code&amp;gt;--endpoint=avcd123456.s3.backup1.portunityhosted.de&amp;lt;/code&amp;gt;&lt;br /&gt;
* falsch: &amp;lt;code&amp;gt;--endpoint=s3://avcd123456.s3.backup1.portunityhosted.de/backup00000001-01&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Docker-Host: SMB-Mounts vorbereiten =&lt;br /&gt;
Wir mounten die UniFi-Shares auf dem Docker-Host unter &amp;lt;code&amp;gt;/mnt&amp;lt;/code&amp;gt;. Quellen sind read-only, Restore ist read-write.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Verzeichnislayout ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/backup-daten          (ro)  -&amp;gt; UniFi Share &amp;quot;Daten&amp;quot;&lt;br /&gt;
/mnt/backup-homeassistant  (ro)  -&amp;gt; UniFi Share &amp;quot;Backup_Homeassistant&amp;quot;&lt;br /&gt;
/mnt/backup-kasse          (ro)  -&amp;gt; UniFi Share &amp;quot;Backup_Kasse&amp;quot;&lt;br /&gt;
/mnt/paperless-backup      (ro)  -&amp;gt; UniFi Share &amp;quot;Backup_Paperless&amp;quot;&lt;br /&gt;
/mnt/backup-restore        (rw)  -&amp;gt; UniFi Share &amp;quot;Backup_Restore&amp;quot; (oder ähnlicher Name)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mount per /etc/fstab (Beispiel) ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Credentials-Dateien sollten root-only sein (chmod 600)&lt;br /&gt;
# Beispiel: /etc/samba/cred_backup-daten&lt;br /&gt;
&lt;br /&gt;
//192.168.220.3/Daten              /mnt/backup-daten          cifs  credentials=/etc/samba/cred_backup-daten,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
//192.168.220.3/Backup_Homeassistant /mnt/backup-homeassistant cifs  credentials=/etc/samba/cred_backup-ha,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
//192.168.220.3/Backup_Kasse        /mnt/backup-kasse         cifs  credentials=/etc/samba/cred_backup-kasse,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
//192.168.220.3/Backup_Paperless    /mnt/backup-paperless     cifs  credentials=/etc/samba/cred_backup-paperless,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
&lt;br /&gt;
//192.168.220.3/Backup_Restore      /mnt/backup-restore       cifs  credentials=/etc/samba/cred_backup-restore,vers=3.0,iocharset=utf8,rw,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0770,file_mode=0660  0  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' uid und gid sollten auf einen angelegten User und Gruppe von der ID passend sein, so dass Kopia an die Daten auch dran kommt. Am besten der selbe User, unter dem von Kopia auch der Doccer dann läuft.&lt;br /&gt;
&lt;br /&gt;
'''Credentials-Datei (Beispiel):'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
username=BACKUPUSER&lt;br /&gt;
password=SUPERGEHEIM&lt;br /&gt;
domain=WORKGROUP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kopia in Docker installieren =&lt;br /&gt;
Wir betreiben Kopia als Container mit:&lt;br /&gt;
* persistenter Config/Cache/Logs auf dem Host&lt;br /&gt;
* read-only Sources (SMB-Mounts)&lt;br /&gt;
* separatem Restore-Ziel (rw)&lt;br /&gt;
* Web-UI via Reverse Proxy (empfohlen: TLS)&lt;br /&gt;
&lt;br /&gt;
== Ordnerstruktur ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/kopia/kopia/&lt;br /&gt;
  docker-compose.yml&lt;br /&gt;
  .env&lt;br /&gt;
  config/&lt;br /&gt;
  cache/&lt;br /&gt;
  logs/&lt;br /&gt;
/mnt/&lt;br /&gt;
  backup-daten/&lt;br /&gt;
  backup-homeassistant/&lt;br /&gt;
  backup-kasse/&lt;br /&gt;
  backup-paperless/     &lt;br /&gt;
  backup-restore/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== .env (Beispiel, anonymisiert) ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Repository-Passwort (verschlüsselt ALLES im Repo; unbedingt sicher verwahren!)&lt;br /&gt;
KOPIA_PASSWORD=RANDOM-LONG-PASSPHRASE&lt;br /&gt;
&lt;br /&gt;
# Web-UI Login für Kopia-Server (nur UI/API Zugriff, NICHT die Repo-Verschlüsselung)&lt;br /&gt;
KOPIA_UI_USER=admnin&lt;br /&gt;
KOPIA_UI_PASS=RANDOM-UI-PASSWORD&lt;br /&gt;
&lt;br /&gt;
# Portunity Secure-Backup (S3/Ceph)&lt;br /&gt;
S3_ACCESS_KEY=AKIAxxxxxxxxxxxxxxxx&lt;br /&gt;
S3_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Warum drei Passwörter?'''&lt;br /&gt;
* &amp;lt;code&amp;gt;KOPIA_PASSWORD&amp;lt;/code&amp;gt; ist das '''Repository-Passwort''' (Key-Derivation/Encryption) – ohne dieses Passwort ist das Backup praktisch unlesbar. Mit diesem Passwort werden die Daten bei Portunity im secureBackup Speicher (=Repository) verschlüsselt. Bitte speichern Sie sich das Passwort sicher in Ihrem Passwort-Tresor oder Offline irgendwo sicher. Sollte der Docker-Host lokal ausfallen kommen Sie ohne dieses Passwort nicht mehr an Ihre gesicherten Daten lesbar heran.&lt;br /&gt;
* &amp;lt;code&amp;gt;KOPIA_UI_USER&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;KOPIA_UI_PASS&amp;lt;/code&amp;gt; ist der '''Login für den Kopia-Server''' für das lokale Web-UI und die API. Das schützt den Zugriff auf die Bedienoberfläche, ändert aber nicht die Verschlüsselung im Repository bei Portunity.&lt;br /&gt;
* &amp;lt;code&amp;gt;S3_ACCESS_KEY&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;S3_SECRET_KEY&amp;lt;/code&amp;gt; sind die Zugangsdaten zum angelegten s3-Bucket vom Portunity secureBackup.&lt;br /&gt;
&lt;br /&gt;
== docker-compose.yml (Beispiel) ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  kopia:&lt;br /&gt;
    image: kopia/kopia:latest&lt;br /&gt;
    container_name: kopia&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;51515:51515&amp;quot;&lt;br /&gt;
    environment:&lt;br /&gt;
      TZ: Europe/Berlin&lt;br /&gt;
&lt;br /&gt;
      # WICHTIG: Config-Pfad zeigt auf eine Datei, nicht auf ein Verzeichnis&lt;br /&gt;
      KOPIA_CONFIG_PATH: /app/config/kopia.config&lt;br /&gt;
      KOPIA_CACHE_DIRECTORY: /app/cache&lt;br /&gt;
      KOPIA_LOG_DIR: /app/logs&lt;br /&gt;
&lt;br /&gt;
      KOPIA_PASSWORD: &amp;quot;${KOPIA_PASSWORD}&amp;quot;&lt;br /&gt;
      AWS_ACCESS_KEY_ID: &amp;quot;${S3_ACCESS_KEY}&amp;quot;&lt;br /&gt;
      AWS_SECRET_ACCESS_KEY: &amp;quot;${S3_SECRET_KEY}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./config:/app/config&lt;br /&gt;
      - ./cache:/app/cache&lt;br /&gt;
      - ./logs:/app/logs&lt;br /&gt;
&lt;br /&gt;
      # Quellen (read-only)&lt;br /&gt;
      - /mnt/backup-daten:/sources/Daten:ro&lt;br /&gt;
      - /mnt/backup-paperless:/sources/Paperless:ro&lt;br /&gt;
      - /mnt/backup-homeassistant:/sources/Homeassistant:ro&lt;br /&gt;
      - /mnt/backup-kasse:/sources/Kasse:ro&lt;br /&gt;
&lt;br /&gt;
      # Restore-Ziel (read-write)&lt;br /&gt;
      - /mnt/backup-restore:/restore:rw&lt;br /&gt;
&lt;br /&gt;
    command:&lt;br /&gt;
      - server&lt;br /&gt;
      - start&lt;br /&gt;
      - --address=0.0.0.0:51515&lt;br /&gt;
      - --insecure&lt;br /&gt;
      - --server-username=${KOPIA_UI_USER}&lt;br /&gt;
      - --server-password=${KOPIA_UI_PASS}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Hinweis zu --insecure:'''&lt;br /&gt;
Kopia spricht dann HTTP ohne eigene TLS-Verschlüsselung. Das ist ok, wenn davor ein Reverse Proxy mit HTTPS-Termination sitzt - was wir empfehlen (z.B. NGIX / TRAEFIK). Ohne Proxy sollte Kopia selbst mit TLS betrieben werden.&lt;br /&gt;
&lt;br /&gt;
= Repository im Portunity S3 initialisieren =&lt;br /&gt;
Das Repository wird einmalig im S3-Speicher vom Portunity secureBackup angelegt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /home/kopia/kopia&lt;br /&gt;
&lt;br /&gt;
docker compose run --rm kopia \&lt;br /&gt;
  repository create s3 \&lt;br /&gt;
  --config-file=/app/config/kopia.config \&lt;br /&gt;
  --bucket=MEIN_BUCKET_NAME \&lt;br /&gt;
  --endpoint=s3.backup1.portunityhosted.de \&lt;br /&gt;
  --region=eu-wup-2 \&lt;br /&gt;
  --prefix=kopiahost1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach startet ihr Kopia normal:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Snapshots &amp;amp; Policies (GFS-Logik) =&lt;br /&gt;
Kopia-Snapshots werden in der Web-UI erstellt. Wichtig: In der Kopia-UI wählt ihr die '''Container-Pfade''' unter &amp;lt;code&amp;gt;/sources/…&amp;lt;/code&amp;gt;, nicht die Host-Mounts unter &amp;lt;code&amp;gt;/mnt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Homeassistant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Kasse&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Paperless&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Daten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empfehlung für Policies:&lt;br /&gt;
* Homeassistant/Kasse: eher häufige Snapshots (z. B. täglich + wöchentlich), da viele kleine Änderungen.&lt;br /&gt;
* Daten/Paperless: täglich + wöchentlich + monatlich (je nach Datenwert).&lt;br /&gt;
* Große Media-Archive: meist auslassen oder separate Strategie.&lt;br /&gt;
&lt;br /&gt;
= Restore-Konzept =&lt;br /&gt;
Restore läuft bewusst über ein separates Ziel (Share &amp;lt;code&amp;gt;Backup_Restore&amp;lt;/code&amp;gt;):&lt;br /&gt;
1. In Kopia Web-UI Snapshot auswählen&lt;br /&gt;
2. Datei/Ordner nach &amp;lt;code&amp;gt;/restore&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;/restore/backup-homeassistant-vom-11.12.2033&amp;lt;/code&amp;gt; wiederherstellen&lt;br /&gt;
3. Von dort aus gezielt zurück in die Produktiv-Shares kopieren (manuell/skriptgesteuert)&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Backup-Host braucht für Quellen nur read-only&lt;br /&gt;
* Restore ist nachvollziehbar und kontrolliert&lt;br /&gt;
* Kein „aus Versehen“ Überschreiben in Produktivpfaden&lt;br /&gt;
&lt;br /&gt;
= Automatisierung =&lt;br /&gt;
Kopia kann Snapshots über die Web-UI als Tasks planen. Alternativ lässt sich per Cron triggern.&lt;br /&gt;
&lt;br /&gt;
== Snapshot per Cron anstoßen (Beispiel) ==&lt;br /&gt;
Bauen Sie sich kleine Shell-Scripte und starten Sie diese per cronjob z.B. täglich:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# alle konfigurierten Snapshot-Quellen einmal sichern:&lt;br /&gt;
docker compose exec -T kopia kopia snapshot create --all&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder gezielt. Dies hat den Vorteil verschiedene Backups zu verschiedenen Zeiten starten zu können und dies mit weiteren Backupzyklen abzustimmen (z.B. HomeAssistant sichert auf das NAS um 3 Uhr nachts, von dort geht es um 5 Uhr mit Kopia weiter nach Extern):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose exec -T kopia kopia snapshot create /sources/Homeassistant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Betrieb &amp;amp; Praxis-Tipps =&lt;br /&gt;
* '''Monitoring:''' regelmäßig ins Kopia UI „Tasks“/„Maintenance“ schauen; Logs liegen zusätzlich im Host-Verzeichnis &amp;lt;code&amp;gt;/home/kopia/kopia/logs&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Repository-Passwort sicher verwahren:''' Ohne &amp;lt;code&amp;gt;KOPIA_PASSWORD&amp;lt;/code&amp;gt; ist ein Restore nicht möglich.&lt;br /&gt;
* '''Netz/Firewall:''' Port 51515 am Docker-Host nur intern freigeben. Externer Zugriff idealerweise per VPN.&lt;br /&gt;
* '''TLS für komfortablen Zugriff:''' Reverse Proxy (z. B. Nginx Proxy Manager) + internes Zertifikat (z. B. Let’s Encrypt via DNS-01 oder interne CA).&lt;br /&gt;
* '''Dedup/Inkremenz:''' Kopia arbeitet blockbasiert; wiederkehrende Daten (z. B. ähnliche HA-Backups) werden sehr effizient gespeichert.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
'''Kopia startet nicht / Config-Fehler'''&lt;br /&gt;
Wenn im Log sowas steht wie „config json … is a directory“: &amp;lt;code&amp;gt;KOPIA_CONFIG_PATH&amp;lt;/code&amp;gt; muss eine Datei sein (z. B. &amp;lt;code&amp;gt;/app/config/kopia.config&amp;lt;/code&amp;gt;), nicht ein Ordner.&lt;br /&gt;
&lt;br /&gt;
'''S3 Endpoint Fehler'''&lt;br /&gt;
Wenn „Endpoint url cannot have fully qualified paths“: &amp;lt;code&amp;gt;--endpoint&amp;lt;/code&amp;gt; darf keinen &amp;lt;code&amp;gt;/bucket&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
&lt;br /&gt;
'''Restore scheitert wegen Dateinamen/Path-Limits (SMB)'''&lt;br /&gt;
Sehr lange Pfade können auf manchen SMB/NAS Kombinationen Probleme machen. Dann Restore erst nach &amp;lt;code&amp;gt;/restore&amp;lt;/code&amp;gt; (lokal oder anderes Ziel) und anschließend mit angepasster Struktur zurückkopieren.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hosting_Anleitungen]][[Category:Hosting]]&lt;/div&gt;</description>
			<pubDate>Fri, 09 Jan 2026 18:20:14 GMT</pubDate>			<dc:creator>Lr@superroot</dc:creator>			<comments>https://portunity.de/wiki/Diskussion:Offsite-Backups_mit_UniFi_NAS_Kopia_Backup_Software_(Docker)_Portunity_secureBackup_(S3/Ceph)</comments>		</item>
		<item>
			<title>Offsite-Backups mit UniFi NAS + Kopia Backup Software (Docker) + Portunity secureBackup (S3/Ceph)</title>
			<link>https://portunity.de/wiki/Offsite-Backups_mit_UniFi_NAS_%2B_Kopia_Backup_Software_(Docker)_%2B_Portunity_secureBackup_(S3/Ceph)</link>
			<description>&lt;p&gt;Lr@superroot:&amp;#32;Erste Version der Kopia-Backup Anleitung by Lea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Zielbild (kurz) =&lt;br /&gt;
Dieses Setup kombiniert zwei Dinge:&lt;br /&gt;
* '''Schnelle lokale Wiederherstellung''' über Snapshots auf dem UniFi NAS (für „Mist gebaut / Datei versehentlich gelöscht“).&lt;br /&gt;
* '''Echte externe Datensicherung (Offsite)''' über Kopia-Snapshots in ein Portunity Secure-Backup S3-Bucket (Ceph/RGW) – inkrementell, dedupliziert, mit Aufbewahrungsregeln (täglich/wöchentlich/monatlich), ohne 20-fache Vollkopien.&lt;br /&gt;
&lt;br /&gt;
UniFi Drive/Unifi UNAS Pro 8 &amp;amp; Co bietet aktuell primär Backup als '''1:1-Kopie''' (Delta bezogen auf Dateien). Für längere Historien und „richtige“ Snapshot-Backups mit Dedupe/Encryption setzen wir deshalb Kopia auf einem separaten Docker-Host ein.&lt;br /&gt;
&lt;br /&gt;
= Architektur =&lt;br /&gt;
'''Komponenten:'''&lt;br /&gt;
* '''UniFi NAS Pro 8''' mit mehreren SMB-Shares (z. B. Daten, Homeassistant, Paperless, Kasse, Media).&lt;br /&gt;
* '''Docker-Host''' (Linux) im gleichen Netz:&lt;br /&gt;
** mountet SMB-Shares read-only (quellseitig)&lt;br /&gt;
** stellt ein separates SMB-Share „Restore“ read-write bereit (zielseitig)&lt;br /&gt;
** betreibt '''Kopia als Docker-Container''' (Web-UI + Scheduler).&lt;br /&gt;
* '''Portunity Secure-Backup (S3 kompatibel)''' als Offsite-Ziel (Ceph Object Storage).&lt;br /&gt;
* '''HomeAssistant, lokales PaperLess &amp;amp; weitere Systeme''' &lt;br /&gt;
** sichern lokal zunächst 1x als 1:1 Kopie auf dem NAS, z.B. Paperless-Exporter via Cronjob, via Cronjob über Rsync o.ä.&lt;br /&gt;
** bzw. legen ihre von Haus aus möglichen Sicherungen auf einem Share ab, z.B. HomeAssistant, Registrierkassen o.ä. haben ein integriertes Backup, z.B. täglich für X Tage o.üä.&lt;br /&gt;
&lt;br /&gt;
'''Warum read-only Mounts?'''&lt;br /&gt;
Der Backup-Host soll im Normalbetrieb keine Produktivdaten verändern können. Restore erfolgt bewusst über ein separates Restore-Ziel.&lt;br /&gt;
&lt;br /&gt;
== UniFi NAS: Shares &amp;amp; lokale Snapshots ==&lt;br /&gt;
Auf dem UniFi NAS werden die Shares wie gewohnt angelegt. Lokale Snapshots sind optional, aber sehr praktisch.&lt;br /&gt;
&lt;br /&gt;
'''Wichtiger Hinweis zur UniFi-Snapshot-Logik:'''&lt;br /&gt;
Pro Share ist in der UI typischerweise '''nur ein Snapshot-Schedule''' möglich (z. B. täglich ODER wöchentlich). Deshalb empfehlen wir:&lt;br /&gt;
* Produktiv-Shares (z. B. Daten, Paperless): '''täglich''' (z. B. 30–90 Versionen)&lt;br /&gt;
* Reine Backup-Shares (z. B. Backup_Paperless, Backup_Homeassistant): '''wöchentlich''' (z. B. 8–12)&lt;br /&gt;
* Große, „nice-to-have“ Daten (z. B. Media/Filmarchive): optional keine lokalen Snapshots&lt;br /&gt;
&lt;br /&gt;
Das ersetzt keine Offsite-Sicherung, ist aber für schnelle Rollbacks ideal.&lt;br /&gt;
&lt;br /&gt;
= Portunity secureBackup (S3): Zugangsdaten finden =&lt;br /&gt;
Im Portunity Webinterface finden Sie pro Vertrag/Produkt eine „S3-kompatible Schnittstelle“ mit der Möglichkeit einen oder mehrere Buckets anzulegen.&lt;br /&gt;
&lt;br /&gt;
'''Screenshot (Beispiel):'''&lt;br /&gt;
[[Datei:secure-backup-s3-schnittstelle.jpg|800px|thumb|Portunity Secure-Backup – S3-Schnittstelle (Beispielansicht).]]&lt;br /&gt;
&lt;br /&gt;
'''Welche Felder braucht Kopia?'''&lt;br /&gt;
* '''S3-Bucket''' → Kopia Parameter: &amp;lt;code&amp;gt;--bucket&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Key-ID''' → Environment: &amp;lt;code&amp;gt;AWS_ACCESS_KEY_ID&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;S3_ACCESS_KEY&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Secret Access Key''' → Environment: &amp;lt;code&amp;gt;AWS_SECRET_ACCESS_KEY&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;S3_SECRET_KEY&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''S3-Region''' → Kopia Parameter: &amp;lt;code&amp;gt;--region&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''S3-Pfad / Endpoint''' → Kopia Parameter: &amp;lt;code&amp;gt;--endpoint&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Wichtig (Stolperfalle):'''&lt;br /&gt;
Bei Kopia muss &amp;lt;code&amp;gt;--endpoint&amp;lt;/code&amp;gt; '''nur der Hostname''' sein (ohne https:// und ohne /bucket-Pfad via bei Portunity ausgegeben mit s3://avcd123456.s3.backup1.portunityhosted.de/backup00000001-01).&lt;br /&gt;
Beispiel:&lt;br /&gt;
* korrekt: &amp;lt;code&amp;gt;--endpoint=avcd123456.s3.backup1.portunityhosted.de&amp;lt;/code&amp;gt;&lt;br /&gt;
* falsch: &amp;lt;code&amp;gt;--endpoint=s3://avcd123456.s3.backup1.portunityhosted.de/backup00000001-01&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Docker-Host: SMB-Mounts vorbereiten =&lt;br /&gt;
Wir mounten die UniFi-Shares auf dem Docker-Host unter &amp;lt;code&amp;gt;/mnt&amp;lt;/code&amp;gt;. Quellen sind read-only, Restore ist read-write.&lt;br /&gt;
&lt;br /&gt;
== Beispiel-Verzeichnislayout ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/mnt/backup-daten          (ro)  -&amp;gt; UniFi Share &amp;quot;Daten&amp;quot;&lt;br /&gt;
/mnt/backup-homeassistant  (ro)  -&amp;gt; UniFi Share &amp;quot;Backup_Homeassistant&amp;quot;&lt;br /&gt;
/mnt/backup-kasse          (ro)  -&amp;gt; UniFi Share &amp;quot;Backup_Kasse&amp;quot;&lt;br /&gt;
/mnt/paperless-backup      (ro)  -&amp;gt; UniFi Share &amp;quot;Backup_Paperless&amp;quot;&lt;br /&gt;
/mnt/backup-restore        (rw)  -&amp;gt; UniFi Share &amp;quot;Backup_Restore&amp;quot; (oder ähnlicher Name)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mount per /etc/fstab (Beispiel) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Credentials-Dateien sollten root-only sein (chmod 600)&lt;br /&gt;
# Beispiel: /etc/samba/cred_backup-daten&lt;br /&gt;
&lt;br /&gt;
//192.168.220.3/Daten              /mnt/backup-daten          cifs  credentials=/etc/samba/cred_backup-daten,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
//192.168.220.3/Backup_Homeassistant /mnt/backup-homeassistant cifs  credentials=/etc/samba/cred_backup-ha,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
//192.168.220.3/Backup_Kasse        /mnt/backup-kasse         cifs  credentials=/etc/samba/cred_backup-kasse,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
//192.168.220.3/Backup_Paperless    /mnt/paperless-backup     cifs  credentials=/etc/samba/cred_backup-paperless,vers=3.0,iocharset=utf8,ro,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0555,file_mode=0444  0  0&lt;br /&gt;
&lt;br /&gt;
//192.168.220.3/Backup_Restore      /mnt/backup-restore       cifs  credentials=/etc/samba/cred_backup-restore,vers=3.0,iocharset=utf8,rw,nofail,x-systemd.automount,uid=1000,gid=1000,dir_mode=0770,file_mode=0660  0  0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' uid und gid sollten auf einen angelegten User und Gruppe von der ID passend sein, so dass Kopia an die Daten auch dran kommt. Am besten der selbe User, unter dem von Kopia auch der Doccer dann läuft.&lt;br /&gt;
&lt;br /&gt;
'''Credentials-Datei (Beispiel):'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
username=BACKUPUSER&lt;br /&gt;
password=SUPERGEHEIM&lt;br /&gt;
domain=WORKGROUP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kopia in Docker installieren =&lt;br /&gt;
Wir betreiben Kopia als Container mit:&lt;br /&gt;
* persistenter Config/Cache/Logs auf dem Host&lt;br /&gt;
* read-only Sources (SMB-Mounts)&lt;br /&gt;
* separatem Restore-Ziel (rw)&lt;br /&gt;
* Web-UI via Reverse Proxy (empfohlen: TLS)&lt;br /&gt;
&lt;br /&gt;
== Ordnerstruktur ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/kopia/kopia/&lt;br /&gt;
  docker-compose.yml&lt;br /&gt;
  .env&lt;br /&gt;
  config/&lt;br /&gt;
  cache/&lt;br /&gt;
  logs/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== .env (Beispiel, anonymisiert) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Repository-Passwort (verschlüsselt ALLES im Repo; unbedingt sicher verwahren!)&lt;br /&gt;
KOPIA_PASSWORD=RANDOM-LONG-PASSPHRASE&lt;br /&gt;
&lt;br /&gt;
# Web-UI Login für Kopia-Server (nur UI/API Zugriff, NICHT die Repo-Verschlüsselung)&lt;br /&gt;
KOPIA_UI_USER=admnin&lt;br /&gt;
KOPIA_UI_PASS=RANDOM-UI-PASSWORD&lt;br /&gt;
&lt;br /&gt;
# Portunity Secure-Backup (S3/Ceph)&lt;br /&gt;
S3_ACCESS_KEY=AKIAxxxxxxxxxxxxxxxx&lt;br /&gt;
S3_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Warum drei Passwörter?'''&lt;br /&gt;
* &amp;lt;code&amp;gt;KOPIA_PASSWORD&amp;lt;/code&amp;gt; ist das '''Repository-Passwort''' (Key-Derivation/Encryption) – ohne dieses Passwort ist das Backup praktisch unlesbar. Mit diesem Passwort werden die Daten bei Portunity im secureBackup Speicher (=Repository) verschlüsselt. Bitte speichern Sie sich das Passwort sicher in Ihrem Passwort-Tresor oder Offline irgendwo sicher. Sollte der Docker-Host lokal ausfallen kommen Sie ohne dieses Passwort nicht mehr an Ihre gesicherten Daten lesbar heran.&lt;br /&gt;
* &amp;lt;code&amp;gt;KOPIA_UI_USER&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;KOPIA_UI_PASS&amp;lt;/code&amp;gt; ist der '''Login für den Kopia-Server''' für das lokale Web-UI und die API. Das schützt den Zugriff auf die Bedienoberfläche, ändert aber nicht die Verschlüsselung im Repository bei Portunity.&lt;br /&gt;
* &amp;lt;code&amp;gt;S3_ACCESS_KEY&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;S3_SECRET_KEY&amp;lt;/code&amp;gt; sind die Zugangsdaten zum angelegten s3-Bucket vom Portunity secureBackup. &lt;br /&gt;
&lt;br /&gt;
== docker-compose.yml (Beispiel) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  kopia:&lt;br /&gt;
    image: kopia/kopia:latest&lt;br /&gt;
    container_name: kopia&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;51515:51515&amp;quot;&lt;br /&gt;
    environment:&lt;br /&gt;
      TZ: Europe/Berlin&lt;br /&gt;
&lt;br /&gt;
      # WICHTIG: Config-Pfad zeigt auf eine Datei, nicht auf ein Verzeichnis&lt;br /&gt;
      KOPIA_CONFIG_PATH: /app/config/kopia.config&lt;br /&gt;
      KOPIA_CACHE_DIRECTORY: /app/cache&lt;br /&gt;
      KOPIA_LOG_DIR: /app/logs&lt;br /&gt;
&lt;br /&gt;
      KOPIA_PASSWORD: &amp;quot;${KOPIA_PASSWORD}&amp;quot;&lt;br /&gt;
      AWS_ACCESS_KEY_ID: &amp;quot;${S3_ACCESS_KEY}&amp;quot;&lt;br /&gt;
      AWS_SECRET_ACCESS_KEY: &amp;quot;${S3_SECRET_KEY}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./config:/app/config&lt;br /&gt;
      - ./cache:/app/cache&lt;br /&gt;
      - ./logs:/app/logs&lt;br /&gt;
&lt;br /&gt;
      # Quellen (read-only)&lt;br /&gt;
      - /mnt/backup-daten:/sources/Daten:ro&lt;br /&gt;
      - /mnt/paperless-backup:/sources/Paperless:ro&lt;br /&gt;
      - /mnt/backup-homeassistant:/sources/Homeassistant:ro&lt;br /&gt;
      - /mnt/backup-kasse:/sources/Kasse:ro&lt;br /&gt;
&lt;br /&gt;
      # Restore-Ziel (read-write)&lt;br /&gt;
      - /mnt/backup-restore:/restore:rw&lt;br /&gt;
&lt;br /&gt;
    command:&lt;br /&gt;
      - server&lt;br /&gt;
      - start&lt;br /&gt;
      - --address=0.0.0.0:51515&lt;br /&gt;
      - --insecure&lt;br /&gt;
      - --server-username=${KOPIA_UI_USER}&lt;br /&gt;
      - --server-password=${KOPIA_UI_PASS}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Hinweis zu --insecure:'''&lt;br /&gt;
Kopia spricht dann HTTP ohne eigene TLS-Verschlüsselung. Das ist ok, wenn davor ein Reverse Proxy mit HTTPS-Termination sitzt - was wir empfehlen (z.B. NGIX / TRAEFIK). Ohne Proxy sollte Kopia selbst mit TLS betrieben werden.&lt;br /&gt;
&lt;br /&gt;
= Repository im Portunity S3 initialisieren =&lt;br /&gt;
Das Repository wird einmalig im S3-Speicher vom Portunity secureBackup angelegt. Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/kopia/kopia&lt;br /&gt;
&lt;br /&gt;
docker compose run --rm kopia \&lt;br /&gt;
  repository create s3 \&lt;br /&gt;
  --config-file=/app/config/kopia.config \&lt;br /&gt;
  --bucket=MEIN_BUCKET_NAME \&lt;br /&gt;
  --endpoint=s3.backup1.portunityhosted.de \&lt;br /&gt;
  --region=eu-wup-2 \&lt;br /&gt;
  --prefix=kopiahost1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach startet ihr Kopia normal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Snapshots &amp;amp; Policies (GFS-Logik) =&lt;br /&gt;
Kopia-Snapshots werden in der Web-UI erstellt. Wichtig: In der Kopia-UI wählt ihr die '''Container-Pfade''' unter &amp;lt;code&amp;gt;/sources/…&amp;lt;/code&amp;gt;, nicht die Host-Mounts unter &amp;lt;code&amp;gt;/mnt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Homeassistant&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Kasse&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Paperless&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/sources/Daten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Empfehlung für Policies:&lt;br /&gt;
* Homeassistant/Kasse: eher häufige Snapshots (z. B. täglich + wöchentlich), da viele kleine Änderungen.&lt;br /&gt;
* Daten/Paperless: täglich + wöchentlich + monatlich (je nach Datenwert).&lt;br /&gt;
* Große Media-Archive: meist auslassen oder separate Strategie.&lt;br /&gt;
&lt;br /&gt;
= Restore-Konzept =&lt;br /&gt;
Restore läuft bewusst über ein separates Ziel (Share &amp;lt;code&amp;gt;Backup_Restore&amp;lt;/code&amp;gt;):&lt;br /&gt;
1. In Kopia Web-UI Snapshot auswählen&lt;br /&gt;
2. Datei/Ordner nach &amp;lt;code&amp;gt;/restore&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;/restore/backup-homeassistant-vom-11.12.2033&amp;lt;/code&amp;gt; wiederherstellen&lt;br /&gt;
3. Von dort aus gezielt zurück in die Produktiv-Shares kopieren (manuell/skriptgesteuert)&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Backup-Host braucht für Quellen nur read-only&lt;br /&gt;
* Restore ist nachvollziehbar und kontrolliert&lt;br /&gt;
* Kein „aus Versehen“ Überschreiben in Produktivpfaden&lt;br /&gt;
&lt;br /&gt;
= Automatisierung =&lt;br /&gt;
Kopia kann Snapshots über die Web-UI als Tasks planen. Alternativ lässt sich per Cron triggern.&lt;br /&gt;
&lt;br /&gt;
== Snapshot per Cron anstoßen (Beispiel) ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# alle konfigurierten Snapshot-Quellen einmal sichern:&lt;br /&gt;
docker compose exec -T kopia kopia snapshot create --all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder gezielt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker compose exec -T kopia kopia snapshot create /sources/Homeassistant&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Betrieb &amp;amp; Praxis-Tipps =&lt;br /&gt;
* '''Monitoring:''' regelmäßig ins Kopia UI „Tasks“/„Maintenance“ schauen; Logs liegen zusätzlich im Host-Verzeichnis &amp;lt;code&amp;gt;/home/kopia/kopia/logs&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Repository-Passwort sicher verwahren:''' Ohne &amp;lt;code&amp;gt;KOPIA_PASSWORD&amp;lt;/code&amp;gt; ist ein Restore nicht möglich.&lt;br /&gt;
* '''Netz/Firewall:''' Port 51515 am Docker-Host nur intern freigeben. Externer Zugriff idealerweise per VPN.&lt;br /&gt;
* '''TLS für komfortablen Zugriff:''' Reverse Proxy (z. B. Nginx Proxy Manager) + internes Zertifikat (z. B. Let’s Encrypt via DNS-01 oder interne CA).&lt;br /&gt;
* '''Dedup/Inkremenz:''' Kopia arbeitet blockbasiert; wiederkehrende Daten (z. B. ähnliche HA-Backups) werden sehr effizient gespeichert.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
'''Kopia startet nicht / Config-Fehler'''&lt;br /&gt;
Wenn im Log sowas steht wie „config json … is a directory“: &amp;lt;code&amp;gt;KOPIA_CONFIG_PATH&amp;lt;/code&amp;gt; muss eine Datei sein (z. B. &amp;lt;code&amp;gt;/app/config/kopia.config&amp;lt;/code&amp;gt;), nicht ein Ordner.&lt;br /&gt;
&lt;br /&gt;
'''S3 Endpoint Fehler'''&lt;br /&gt;
Wenn „Endpoint url cannot have fully qualified paths“: &amp;lt;code&amp;gt;--endpoint&amp;lt;/code&amp;gt; darf keinen &amp;lt;code&amp;gt;/bucket&amp;lt;/code&amp;gt; enthalten.&lt;br /&gt;
&lt;br /&gt;
'''Restore scheitert wegen Dateinamen/Path-Limits (SMB)'''&lt;br /&gt;
Sehr lange Pfade können auf manchen SMB/NAS Kombinationen Probleme machen. Dann Restore erst nach &amp;lt;code&amp;gt;/restore&amp;lt;/code&amp;gt; (lokal oder anderes Ziel) und anschließend mit angepasster Struktur zurückkopieren.&lt;/div&gt;</description>
			<pubDate>Fri, 09 Jan 2026 18:19:13 GMT</pubDate>			<dc:creator>Lr@superroot</dc:creator>			<comments>https://portunity.de/wiki/Diskussion:Offsite-Backups_mit_UniFi_NAS_%2B_Kopia_Backup_Software_(Docker)_%2B_Portunity_secureBackup_(S3/Ceph)</comments>		</item>
	</channel>
</rss>