feat: make paperless have only one master node to enable syncing
This commit is contained in:
parent
0f430a625e
commit
2b2e3c4e4e
|
@ -32,7 +32,7 @@ in {
|
|||
description = "Directory to save data in";
|
||||
type = types.str;
|
||||
example = "/home/pub_solar/Paperless";
|
||||
default = "/home/${psCfg.user.name}/Paperless";
|
||||
default = "${xdg.dataHome}/Paperless";
|
||||
};
|
||||
|
||||
consumptionDir = mkOption {
|
||||
|
@ -42,6 +42,23 @@ in {
|
|||
default = "/var/lib/paperless/consume";
|
||||
};
|
||||
|
||||
sync = {
|
||||
enable = mkEnableOption ''
|
||||
You can use this option to sync several paperless instances, for example via nextcloud.
|
||||
It will sync the media directory and database, automatically merging sqlite dbs via dump and import.
|
||||
Logs, the classification model, and other files are left unsynced.
|
||||
'';
|
||||
|
||||
masterNode = mkEnableOption "If this node is the master node, it will only export paperless data, otherwise it will only import";
|
||||
|
||||
directory = mkOption {
|
||||
description = "Directory to sync with.";
|
||||
type = types.str;
|
||||
example = "/home/pub_solar/Nextcloud/Paperless";
|
||||
default = "/home/${psCfg.user.name}/Paperless";
|
||||
};
|
||||
};
|
||||
|
||||
scannerDefaultDevice = mkOption {
|
||||
description = ''
|
||||
The scanner device. To find this, use `scanimage -L`.
|
||||
|
@ -91,5 +108,41 @@ in {
|
|||
SCANNER_OUTPUT_DIR = cfg.consumptionDir;
|
||||
};
|
||||
};
|
||||
|
||||
systemd = let
|
||||
copy-in = pkgs.writeShellScriptBin "copy-in" ''
|
||||
${pkgs.systemd}/bin/systemctl stop paperless-web.service paperless-task-queue.service paperless-scheduler.service paperless-consumer.service
|
||||
cp -r ${cfg.sync.directory}/media ${cfg.dataDir}/media
|
||||
cp ${cfg.sync.directory}/db.sqlite3 ${cfg.dataDir}/db.sqlite3
|
||||
${pkgs.systemd}/bin/systemctl start paperless-web.service paperless-task-queue.service paperless-scheduler.service paperless-consumer.service
|
||||
'';
|
||||
copy-out = pkgs.writeShellScriptBin "copy-out" ''
|
||||
${pkgs.systemd}/bin/systemctl stop paperless-web.service paperless-task-queue.service paperless-scheduler.service paperless-consumer.service
|
||||
cp -r ${cfg.dataDir}/media ${cfg.sync.directory}/media
|
||||
cp ${cfg.dataDir}/db.sqlite3 ${cfg.sync.directory}/db.sqlite3
|
||||
${pkgs.systemd}/bin/systemctl start paperless-web.service paperless-task-queue.service paperless-scheduler.service paperless-consumer.service
|
||||
'';
|
||||
in mkIf cfg.sync.enable {
|
||||
services.nextcloud-paperless-autosync = {
|
||||
unitConfig = {
|
||||
Description = "Auto sync paperless to or from Nextcloud";
|
||||
After = "network-online.target";
|
||||
};
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart= if cfg.sync.masterNode then "${copy-out}/bin/copy-out" else "${copy-in}/bin/copy-in";
|
||||
TimeoutStopSec = "180";
|
||||
KillMode = "process";
|
||||
KillSignal = "SIGINT";
|
||||
};
|
||||
wantedBy = ["multi-user.target"];
|
||||
};
|
||||
|
||||
timers.nextcloud-paperless-autosync = {
|
||||
unitConfig.Description = "Automatic sync files with Nextcloud when booted up after 5 minutes then rerun every 30 minutes";
|
||||
timerConfig.OnUnitActiveSec = "30min";
|
||||
wantedBy = ["multi-user.target" "timers.target"];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue