Remove dj-beets project

No longer in use. Drops the beets containers (cli/web), build +
autoimport services and timer, the beet CLI wrapper, /opt/dj-beets
tmpfiles entry, firewall port 8337, the Makefile copy step, and the
src/dj-beets tree (which contained a Beatport token) so the repo can
be made public safely.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 19:50:03 +02:00
parent ad1dd816f4
commit 7f1767345a
11 changed files with 2 additions and 1942 deletions
+1 -114
View File
@@ -152,9 +152,6 @@
# Secrets
"d /data/secrets 0700 root root -"
# dj-beets project
"d /opt/dj-beets 0755 root root -"
];
########################################
@@ -199,35 +196,6 @@
};
};
virtualisation.oci-containers.containers.dj-beets-cli = {
image = "dj-beets:latest";
autoStart = false; # Run manually or via systemd service
volumes = [
"/data/daten/DJing:/data/daten/DJing"
"/opt/dj-beets/config.yaml:/etc/beets/config.yaml:ro"
"/opt/dj-beets/beatport_token.json:/opt/dj-beets/beatport_token.json"
];
environment = {
BEETS_CONFIG = "/etc/beets/config.yaml";
};
cmd = [ "tail" "-f" "/dev/null" ]; # Keep container alive
};
virtualisation.oci-containers.containers.dj-beets-web = {
image = "dj-beets:latest";
autoStart = true;
ports = [ "8337:8337" ];
volumes = [
"/data/daten/DJing:/data/daten/DJing"
"/opt/dj-beets/config.yaml:/etc/beets/config.yaml:ro"
"/opt/dj-beets/beatport_token.json:/opt/dj-beets/beatport_token.json"
];
environment = {
BEETS_CONFIG = "/etc/beets/config.yaml";
};
cmd = [ "beet" "web" ];
};
########################################
# Backup Services
########################################
@@ -262,94 +230,13 @@
pkgs.tmux
pkgs.htop
pkgs.podman-compose
# Beets CLI wrapper
(pkgs.writeShellScriptBin "beet" ''
exec ${pkgs.podman}/bin/podman run --rm -it \
-v /data/daten/DJing:/data/daten/DJing \
-v /opt/dj-beets/config.yaml:/etc/beets/config.yaml:ro \
-v /opt/dj-beets/beatport_token.json:/opt/dj-beets/beatport_token.json \
-e BEETS_CONFIG=/etc/beets/config.yaml \
-u $(id -u):$(id -g) \
dj-beets:latest \
beet "$@"
'')
];
########################################
# DJ-Beets Services
########################################
# Systemd service to build dj-beets image on deploy
systemd.services.dj-beets-build = {
description = "Build dj-beets Docker image";
wantedBy = [ "multi-user.target" ];
before = [ "podman-dj-beets-web.service" ];
after = [ "podman.service" ];
wants = [ "podman.service" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = pkgs.writeShellScript "build-dj-beets" ''
set -euo pipefail
if [ ! -f /opt/dj-beets/Dockerfile ]; then
echo "ERROR: Dockerfile not found at /opt/dj-beets" >&2
echo "Deploy with 'make deploy-fileserver' first" >&2
exit 1
fi
cd /opt/dj-beets
${pkgs.podman}/bin/podman build -t dj-beets:latest .
echo "dj-beets image built successfully"
'';
User = "root";
};
};
# Auto-import service using Docker container
systemd.services.dj-beets-autoimport = {
description = "Auto-import music into beets library via Docker";
after = [ "dj-beets-build.service" ];
wants = [ "dj-beets-build.service" ];
serviceConfig = {
Type = "oneshot";
ExecStart = pkgs.writeShellScript "beets-autoimport" ''
set -euo pipefail
INBOX="/data/daten/DJing/Inbox"
LOG="/data/daten/DJing/Data/BeetsAutoImport.log"
# Check if inbox has files
if ! find "$INBOX" -mindepth 1 -maxdepth 1 -type f -print -quit | grep -q .; then
echo "[$(date)] No files in Inbox, skipping" >> "$LOG"
exit 0
fi
echo "[$(date)] Starting beets import" >> "$LOG"
${pkgs.podman}/bin/podman run --rm \
-v /data/daten/DJing:/data/daten/DJing \
-v /opt/dj-beets/config.yaml:/etc/beets/config.yaml:ro \
-v /opt/dj-beets/beatport_token.json:/opt/dj-beets/beatport_token.json \
-e BEETS_CONFIG=/etc/beets/config.yaml \
localhost/dj-beets:latest \
beet import -q /data/daten/DJing/Inbox >> "$LOG" 2>&1
'';
# Use root so the service can access the root Podman image storage
User = "root";
Group = "root";
};
};
systemd.timers.dj-beets-autoimport = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "*:0/10"; # Every 10 minutes
Persistent = true;
};
};
########################################
# Firewall
########################################
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [ 22 139 445 8080 8337 5357 3000 2222 ]; # 5357 WSD
networking.firewall.allowedTCPPorts = [ 22 139 445 8080 5357 3000 2222 ]; # 5357 WSD
networking.firewall.allowedUDPPorts = [ 137 138 3702 5353 ]; # NetBIOS + WSD (3702) + mDNS (5353)
}