From 97e7f8c782a68161450a448c0ce2d6d3cb4f57fc Mon Sep 17 00:00:00 2001 From: Isshi0417 Date: Fri, 3 Jul 2026 13:20:26 +0000 Subject: [PATCH] Complete deploying Navidrome on media-stream server as a service --- ansible/deploy_music.yml | 105 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 ansible/deploy_music.yml diff --git a/ansible/deploy_music.yml b/ansible/deploy_music.yml new file mode 100644 index 0000000..3792d96 --- /dev/null +++ b/ansible/deploy_music.yml @@ -0,0 +1,105 @@ +--- +- name: Deploy Navidrome Music Streaming Server + hosts: media + become: true + + tasks: + - name: Enable EPEL 10 repository + ansible.builtin.dnf: + name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm + state: present + disable_gpg_check: true + + - name: Install rclone and fuse3 + ansible.builtin.dnf: + name: + - rclone + - fuse3 + state: present + + - name: Create rclone config directory + ansible.builtin.file: + path: /root/.config/rclone + state: directory + mode: "0700" + + - name: Copy rclone configuration + ansible.builtin.copy: + src: ./rclone.conf + dest: /root/.config/rclone/rclone.conf + mode: "0600" + + - name: Create mount directory + ansible.builtin.file: + path: /mnt/gdrive + state: directory + mode: "0755" + + - name: Allow SELinux to access FUSE mounts + ansible.posix.seboolean: + name: virt_use_fusefs + state: true + persistent: true + + - name: Create rclone-mount systemd service + ansible.builtin.copy: + dest: /etc/systemd/system/rclone-mount.service + mode: "0644" + content: | + [Unit] + Description=Rclone Google Drive mount + After=network-online.target + Wants=network-online.target + + [Service] + Type=simple + ExecStart=/usr/bin/rclone mount gdrive: /mnt/gdrive \ + --config /root/.config/rclone/rclone.conf \ + --allow-other \ + --dir-cache-time 1000h \ + --vfs-cache-mode full \ + --vfs-cache-max-age 24h + ExecStop=/usr/bin/fusermount3 -u /mnt/gdrive + Restart=on-failure + User=root + + [Install] + WantedBy=multi-user.target + + - name: Start and enable rclone-mount service + ansible.builtin.systemd: + name: rclone-mount + state: started + enabled: true + daemon_reload: true + + - name: Create navidrome data directory + ansible.builtin.file: + path: /var/lib/navidrome + state: directory + owner: "1000" + group: "1000" + mode: "0755" + + - name: Run Navidrome container via Podman + containers.podman.podman_container: + name: navidrome + image: docker.io/deluan/navidrome:latest + state: started + recreate: true + restart_policy: always + ports: + - "4533:4533" + volume: + - /mnt/gdrive/Music:/music:ro,z + - /var/lib/navidrome:/data:z + env: + ND_LOGLEVEL: info + ND_SCANSCHEDULE: "@every 1h" + + - name: Open port 4533 in firewall + ansible.posix.firewalld: + port: 4533/tcp + state: enabled + permanent: true + immediate: true