diff --git a/jellyfin_docker_nfs_setup.yml b/jellyfin_docker_nfs_setup.yml new file mode 100644 index 0000000..bc0a0d5 --- /dev/null +++ b/jellyfin_docker_nfs_setup.yml @@ -0,0 +1,89 @@ +--- +- name: Deploy Jellyfin Docker + hosts: all + become: true + vars_prompt: + - name: nfs_server + prompt: "Enter NFS Server IP or hostname" + default: "" + private: no + - name: nfs_server_path + prompt: "Enter remote path on the NFS server (e.g. /exports/media)" + default: "/mnt/media" + private: no + - name: install_base_path + prompt: "Enter the directory for the script/config storage" + default: "/opt/jellyfin" + private: no + - name: media_path + prompt: "Enter the host path where the media is stored" + default: "/mnt/media" + private: no + + vars: + # Fetch the current users UID/GID to avoid permission issues + puid: "{{ ansible_real_user_id }}" + pgid: "{{ ansible_real_group_id }}" + + tasks: + - name: verify_docker_service_exists + ansible.builtin.command: docker --version + register: docker_check + ignore_errors: true + changed_when: false + + - name: fail_if_docker_missing + ansible.builtin.fail: + msg: "Docker is not install on this host." + when: docker_check.rc != 0 + + - name: check_nfs_mount + ansible.builtin.command: mountpoint -q "{{ media_path }}" + register: nfs_check + failed_when: false + changed_when: false + + - name: run_nfs_setup_if_not_mounted + ansible.builtin.include_tasks: setup_nfs.yml + vars: + nfs_client_path: "{{ media_path }}" + when: nfs_check.rc != 0 and nfs_server != "" + + - name: ensure_install_dir_exists + ansible.builtin.file: + path: "{{ install_base_path }}" + state: directory + mode: '0755' + + - name: create_jellyfin_configcache_directories + ansible.builtin.file: + path: "{{ install_base_path }}/{{ item }}" + state: directory + mode: '0755' + owner: "{{ puid }}" + group: "{{ pgid }}" + loop: + - config + - cache + + - name: deploy_jellyfin_container + community.docker.docker_container: + name: jellyfin + image: jellyfin/jellyfin:latest + state: started + restart_policy: unless-stopped + network_mode: 'host' + env: + PUID: "{{ puid | string }}" + PGID: "{{ pgid | string }}" + TZ: "Etc/UTC" + volumes: + - "{{ install_base_path }}/config:/config" + - "{{ install_base_path }}/cache:/cache" + - "{{ media_path }}:/media:ro" # Mount media as read-only for safety + devices: + - "/dev/dri:/dev/dri" # Enables Intel Quicksync for hardware transcoding + + - name: show_status + ansible.builtin.debug: + msg: "Jellyfin is up and running on port 8096" diff --git a/nfs_setup.yml b/nfs_setup.yml new file mode 100644 index 0000000..424ae12 --- /dev/null +++ b/nfs_setup.yml @@ -0,0 +1,34 @@ +--- +- name: setup_nfs_mount + hosts: all + become: true + vars_prompt: + - name: nfs_server + prompt: "Enter NFS Server IP or hostname" + private: no + - name: nfs_server_path + prompt: "Enter remote path on the NFS server (e.g. /exports/media)" + private: no + - name: nfs_client_path + prompt: "Enter local mount path (e.g. /mnt/media)" + private: no + + tasks: + - name: install_nfs_client_packages + ansible.builtin.package: + name: "{{ 'nfs-common' if ansible_os_family == 'Debian' else 'nfs-utils' }}" + state: present + + - name: ensure_local_mount_dir_exists + ansible.builtin.file: + path: "{{ nfs_client_path }}" + state: directory + mode: '0755' + + - name: configure_mount_nfs + ansible.posix.mount: + src: "{{ nfs_server }}:{{ nfs_server_path }}" + path: "{{ nfs_client_path }}" + fstype: nfs + opts: rw,sync,hard,intr + state: mounted \ No newline at end of file