chloe-nas.yml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. ---
  2. - hosts: chloe-nas
  3. gather_facts: true
  4. become: true
  5. roles:
  6. - snapraid
  7. - mergerfs
  8. - vladgh.samba.server
  9. - dnf-automatic
  10. - linux-system-roles.firewall
  11. - linux-system-roles.selinux
  12. - quadlet
  13. - statusservices
  14. - olivetin
  15. - cloud-backups
  16. vars_files:
  17. - "{{ inventory_dir }}/vars/vault.yaml"
  18. vars:
  19. dnf_update_time: 'wed 04:30'
  20. status_services_extra:
  21. - smb
  22. - OliveTin
  23. backups: containers
  24. backups_ignore:
  25. - /storage
  26. container_user: "{{ vaulted_media_user }}"
  27. container_uid: "{{ vaulted_media_uid }}"
  28. container_group: "{{ vaulted_media_group }}"
  29. container_gid: "{{ vaulted_media_gid }}"
  30. containers:
  31. - name: homepage
  32. image: ghcr.io/gethomepage/homepage
  33. ports:
  34. - 80:3000
  35. environment:
  36. HOMEPAGE_ALLOWED_HOSTS: 10.0.0.135 # TODO Update with new IP
  37. PUID: "{{ container_uid }}"
  38. PGID: "{{ container_gid }}"
  39. volumes:
  40. - /srv/containers/homepage:/app/config:Z
  41. - /storage:/storage:ro # for utilization info
  42. restart: unless-stopped
  43. after:
  44. - network-online.target
  45. - name: sickgear
  46. image: lscr.io/linuxserver/sickgear
  47. ports:
  48. - 8081:8081
  49. volumes:
  50. - /srv/containers/sickgear:/config:Z
  51. - /storage:/storage:z
  52. environment:
  53. PUID: "{{ container_uid }}"
  54. PGID: "{{ container_gid }}"
  55. TZ: America/Los_Angeles
  56. restart_policy: always
  57. restart_sec: 5
  58. quadlet_options: |
  59. [Unit]
  60. After=nordvpnd.service
  61. After=sys-subsystem-net-devices-nordtun.device
  62. BindsTo=sys-subsystem-net-devices-nordtun.device
  63. - name: transmission
  64. image: lscr.io/linuxserver/transmission
  65. ports:
  66. - 9091:9091
  67. volumes:
  68. - /srv/containers/transmission:/config:Z
  69. - /storage:/storage:z
  70. environment:
  71. PUID: "{{ container_uid }}"
  72. PGID: "{{ container_gid }}"
  73. USER: "{{ vaulted_nas_transmission_username }}"
  74. PASS: "{{ vaulted_nas_transmission_password }}"
  75. restart_policy: unless-stopped
  76. restart_sec: 5
  77. quadlet_options: |
  78. [Unit]
  79. After=nordvpnd.service
  80. After=sys-subsystem-net-devices-nordtun.device
  81. BindsTo=sys-subsystem-net-devices-nordtun.device
  82. - name: qbittorrent
  83. active: true
  84. image: lscr.io/linuxserver/qbittorrent
  85. ports:
  86. - 8080:8080
  87. volumes:
  88. - /srv/containers/qbittorrent:/config:Z
  89. - /storage:/storage:z
  90. environment:
  91. PUID: "{{ container_uid }}"
  92. PGID: "{{ container_gid }}"
  93. WEBUI_PORT: 8080
  94. restart_policy: unless-stopped
  95. restart_sec: 5
  96. quadlet_options: |
  97. [Unit]
  98. After=nordvpnd.service
  99. After=sys-subsystem-net-devices-nordtun.device
  100. BindsTo=sys-subsystem-net-devices-nordtun.device
  101. samba_guest_account: "{{ vaulted_media_user }}"
  102. samba_map_to_guest: bad user
  103. samba_netbios_name: "{{ ansible_hostname }}"
  104. samba_load_printers: False
  105. samba_mitigate_cve_2017_7494: False # enabling this breaks share browsing on Macs
  106. samba_shares_root: /storage
  107. samba_manage_directories: False # already handled by mergerfs/snapraid roles
  108. samba_users:
  109. - name: "{{ vaulted_media_user }}"
  110. password: "{{ vaulted_media_password }}"
  111. samba_shares:
  112. - name: storage
  113. path: /storage
  114. force_create_mode: '0664'
  115. force_directory_mode: '0775'
  116. guest_ok: "yes"
  117. writable: "yes"
  118. public: "yes"
  119. owner: "{{ vaulted_media_user }}"
  120. group: "{{ vaulted_media_group }}"
  121. snapraid_data_disks:
  122. - path: /mnt/datadisk1
  123. disk: /dev/disk/by-id/ata-WDC_WD60EFAX-68SHWN0_WD-WX21D39PLU7H-part1 # top slot
  124. owner: "{{ vaulted_media_user }}"
  125. group: "{{ vaulted_media_group }}"
  126. - path: /mnt/datadisk2
  127. disk: /dev/disk/by-id/ata-WDC_WD60EFAX-68SHWN0_WD-WX91D99DVRJH-part1
  128. owner: "{{ vaulted_media_user }}"
  129. group: "{{ vaulted_media_group }}"
  130. - path: /mnt/datadisk3
  131. disk: /dev/disk/by-id/ata-WDC_WD80EFPX-68C4ZN0_WD-RD2VM3XH-part1
  132. owner: "{{ vaulted_media_user }}"
  133. group: "{{ vaulted_media_group }}"
  134. snapraid_parity_disks:
  135. - path: /mnt/parity1
  136. parity: parity
  137. disk: /dev/disk/by-id/ata-WDC_WD80EFPX-68C4ZN0_WD-RD2V74DH-part1 # bottom slot
  138. mergerfs_disks: "{{ snapraid_data_disks }}"
  139. mergerfs_fstab:
  140. - path: /storage
  141. owner: "{{ vaulted_media_user }}"
  142. group: "{{ vaulted_media_group }}"
  143. source: /mnt/datadisk*
  144. opts:
  145. - allow_other
  146. - minfreespace=10G
  147. - category.create=mfs
  148. - use_ino
  149. - func.getattr=newest
  150. - fsname=mergerfs
  151. - nonempty
  152. selinux_booleans:
  153. - name: samba_share_fusefs
  154. state: on
  155. persistent: yes
  156. firewall:
  157. - service:
  158. - samba
  159. - netbios-ns
  160. - http
  161. state: enabled
  162. - port:
  163. - '1337/tcp'
  164. - '8080/tcp'
  165. - '8081/tcp'
  166. - '9091/tcp'
  167. state: enabled
  168. server_notifications_topic: "{{ vaulted_server_notifications_topic }}"
  169. pre_tasks:
  170. - name: Create Media Group
  171. group:
  172. name: "{{ vaulted_media_group }}"
  173. gid: "{{ vaulted_media_gid }}"
  174. - name: Create Media User
  175. user:
  176. name: "{{ vaulted_media_user }}"
  177. uid: "{{ vaulted_media_uid }}"
  178. groups: "{{ vaulted_media_group }}"
  179. append: yes
  180. shell: /bin/bash
  181. - name: Ensure mountpoints exist
  182. file:
  183. path: "{{ item.path }}"
  184. state: directory
  185. with_items:
  186. - "{{ snapraid_parity_disks }}"
  187. - "{{ snapraid_data_disks }}"
  188. - name: Ensure VPN device config directory exists
  189. file:
  190. path: /etc/systemd/system/sys-subsystem-net-devices-nordtun.device.d
  191. state: directory
  192. owner: root
  193. group: root
  194. mode: '0755'
  195. - name: Auto-Restart services after VPN re-connects
  196. copy:
  197. dest: /etc/systemd/system/sys-subsystem-net-devices-nordtun.device.d/upholds.conf
  198. owner: root
  199. group: root
  200. mode: '0644'
  201. content: |
  202. [Unit]
  203. Upholds=transmission.service
  204. Upholds=qbittorrent.service
  205. Upholds=sickgear.service