homelab-server/ansible/deploy_music.yml
2026-07-08 08:04:44 +00:00

108 lines
2.8 KiB
YAML

---
- 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 \
--rc \
--rc-no-auth \
--dir-cache-time 1000h \
--vfs-cache-mode full \
--vfs-cache-max-age 24h
ExecStop=/usr/bin/fusermount3 -uz /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