diff --git a/ansible/main.yml b/ansible/main.yml index 2a97365..f5d5e61 100644 --- a/ansible/main.yml +++ b/ansible/main.yml @@ -19,4 +19,4 @@ - tautulli - gitea - unifi-controller - - homepage + - beets diff --git a/ansible/roles/beets/tasks/main.yml b/ansible/roles/beets/tasks/main.yml new file mode 100644 index 0000000..5c0fdfc --- /dev/null +++ b/ansible/roles/beets/tasks/main.yml @@ -0,0 +1,29 @@ +- name: Create service user + user: + name: "{{ role_name }}" + system: true + register: service_user + become: true + +- name: Create install directory + file: + path: "{{ install_directory }}/{{ role_name }}" + state: directory + owner: "{{ docker_user }}" + mode: "{{ docker_compose_directory_mask }}" + become: true + +- name: Copy docker-compose file to destination + template: + src: docker-compose.yml + dest: "{{ install_directory }}/{{ role_name }}/docker-compose.yml" + owner: "{{ docker_user }}" + mode: "{{ docker_compose_file_mask }}" + validate: docker-compose -f %s config + become: true + +- name: Start docker container + community.docker.docker_compose: + project_src: "{{ install_directory }}/{{ role_name }}" + pull: true + remove_orphans: yes diff --git a/ansible/roles/beets/templates/docker-compose.yml b/ansible/roles/beets/templates/docker-compose.yml new file mode 100644 index 0000000..8831199 --- /dev/null +++ b/ansible/roles/beets/templates/docker-compose.yml @@ -0,0 +1,24 @@ +version: "{{ docker_compose_version }}" + +networks: + traefik: + external: true + +services: + beets: + container_name: beets + image: lscr.io/linuxserver/beets:latest + restart: unless-stopped + networks: + - traefik + environment: + - "PUID={{ service_user.uid }}" + - "PGID={{ media_gid }}" + - "TZ={{ timezone }}" + volumes: + - "{{ data_dir }}/{{ role_name }}:/config" + - "{{ media_storage_mnt }}/data/media/music:/music" + labels: + traefik.enable: true + traefik.http.routers.beets.rule: "Host(`beets.local.{{ personal_domain }}`)" + traefik.http.routers.beets.middlewares: lan-whitelist@file diff --git a/ansible/roles/slskd/tasks/main.yml b/ansible/roles/slskd/tasks/main.yml new file mode 100644 index 0000000..6a6ab04 --- /dev/null +++ b/ansible/roles/slskd/tasks/main.yml @@ -0,0 +1,38 @@ +- name: Create service user + user: + name: "{{ role_name }}" + system: true + register: service_user + become: true + +- name: Create install directory + file: + path: "{{ install_directory }}/{{ role_name }}" + state: directory + owner: "{{ docker_user }}" + mode: "{{ docker_compose_directory_mask }}" + become: true + +- name: Create config directory + file: + path: "{{ data_dir }}/{{ role_name }}" + state: directory + owner: "{{ service_user.uid }}" + group: "{{ media_gid }}" + mode: "{{ docker_compose_directory_mask }}" + become: true + +- name: Copy docker-compose file to destination + template: + src: docker-compose.yml + dest: "{{ install_directory }}/{{ role_name }}/docker-compose.yml" + owner: "{{ docker_user }}" + mode: "{{ docker_compose_file_mask }}" + validate: docker-compose -f %s config + become: true + +- name: Start docker container + community.docker.docker_compose: + project_src: "{{ install_directory }}/{{ role_name }}" + pull: true + remove_orphans: yes diff --git a/ansible/roles/slskd/templates/docker-compose.yml b/ansible/roles/slskd/templates/docker-compose.yml new file mode 100644 index 0000000..6deff3f --- /dev/null +++ b/ansible/roles/slskd/templates/docker-compose.yml @@ -0,0 +1,21 @@ +version: "{{ docker_compose_version }}" + +services: + slskd: + container_name: "slskd" + image: slskd/slskd + restart: unless-stopped + network_mode: container:gluetun + user: "{{ service_user.uid }}:{{ media_gid }}" + environment: + - SLSKD_SHARED_DIR=/music + - SLSKD_REMOTE_CONFIGURATION=True + - SLSKD_DOWNLOADS_DIR=/downloads + volumes: + - "{{ data_dir }}/{{ role_name }}:/app" + - "{{ data_dir }}/{{ role_name }}/downloads:/downloads" + - "{{ media_storage_mnt }}/data/media/music:/music:ro" + labels: + traefik.enable: true + traefik.http.routers.slskd.rule: "Host(`soulseek.local.{{ personal_domain }}`)" + traefik.http.routers.slskd.middlewares: lan-whitelist@file