Άλλαξα πλέον το backup του NixOS homeserver μου και από ένα απλό καθημερινό script το μετέτρεψα σε ωριαίο. Όχι τόσο κομψό όσο στην instance του Mastodon που διαχειρίζεται ο φίλος μου – εκεί έχουμε ένα ZFS snapshot κάθε 20 λεπτά – αλλά είμαι ικανοποιημένος και με αυτή τη λύση. Και πρέπει να πω ότι το NixOS μου αρέσει όλο και περισσότερο. Χωρίς την Τεχνητή Νοημοσύνη (AI), βέβαια, θα ήταν πολύ περίπλοκο για να το καταλάβω, αλλά πλέον μπορώ τουλάχιστον να διαβάζω τα έτοιμα αρχεία Nix. Είχα σκεφτεί κάποια στιγμή να γυρίσω τον server σε μια κανονική διανομή Linux, αλλά όσο αυτό λειτουργεί τόσο καλά...
-
/etc/nixos: Ολόκληρη η παραμετροποίηση του NixOS (όλα τα αρχεία .nix). -
/opt/minecraft: Όλοι οι κόσμοι και τα δεδομένα του Minecraft server. -
/opt/satisfactory: Τα save games και η παραμετροποίηση του Satisfactory server. -
/opt/Blog: Ο πηγαίος κώδικας και το περιεχόμενο του blog. -
/opt/ui: Τα αρχεία του Mastodon-UI. -
/opt/audiobookshelf: Τα ηχητικά βιβλία και η σχετική βάση δεδομένων.
Όλα αυτά καταλήγουν σε έναν S3 αποθηκευτικό χώρο που έχει προσαρτηθεί (mounted) μέσω RClone.
Η παραμετροποίηση του NixOS
{ config, pkgs, ... }:
{
# Παραμετροποίηση BorgBackup
services.borgbackup.jobs.hourly = {
# Διαδρομή προς το αποθετήριο (repository) στο S3-mount
repo = "/opt/S3/Backup/NixOSHomeServer_Borg";
# Δεν απαιτείται κωδικός πρόσβασης
encryption.mode = "none";
# Συμπίεση για ακόμα μεγαλύτερη εξοικονόμηση χώρου
compression = "auto,zstd";
# Οι διαδρομές προς δημιουργία αντιγράφων ασφαλείας
paths = [
"/etc/nixos"
"/opt/minecraft"
"/opt/satisfactory"
"/opt/Blog"
"/opt/ui"
"/opt/audiobookshelf"
];
# Ωριαία εκτέλεση
startAt = "hourly";
# Αυτόματη αρχικοποίηση του αποθετηρίου, εάν λείπει
doInit = true;
# Κανόνες διατήρησης (Pruning)
prune.keep = {
within = "1d"; # Όλα τα snapshots των τελευταίων 24 ωρών
daily = 7;
weekly = 4;
monthly = 12;
};
};
# Διασφάλιση ότι το S3-mount είναι έτοιμο πριν ξεκινήσει το Borg
systemd.services.borgbackup-job-hourly = {
requires = [ "rclone-s3-mount.service" ];
after = [ "rclone-s3-mount.service" ];
};
}