chloe-nas.yml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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. opts: defaults
  125. fs: xfs
  126. owner: "{{ vaulted_media_user }}"
  127. group: "{{ vaulted_media_group }}"
  128. - path: /mnt/datadisk2
  129. disk: /dev/disk/by-id/ata-WDC_WD60EFAX-68SHWN0_WD-WX91D99DVRJH-part1
  130. opts: defaults
  131. fs: xfs
  132. owner: "{{ vaulted_media_user }}"
  133. group: "{{ vaulted_media_group }}"
  134. - path: /mnt/datadisk3
  135. disk: /dev/disk/by-id/ata-WDC_WD80EFPX-68C4ZN0_WD-RD2VM3XH-part1
  136. opts: defaults
  137. fs: xfs
  138. owner: "{{ vaulted_media_user }}"
  139. group: "{{ vaulted_media_group }}"
  140. snapraid_parity_disks:
  141. - path: /mnt/parity1
  142. parity: parity
  143. disk: /dev/disk/by-id/ata-WDC_WD80EFPX-68C4ZN0_WD-RD2V74DH-part1 # bottom slot
  144. opts: defaults
  145. fs: xfs
  146. mergerfs_disks: "{{ snapraid_data_disks }}"
  147. mergerfs_fstab:
  148. - path: /storage
  149. owner: "{{ vaulted_media_user }}"
  150. group: "{{ vaulted_media_group }}"
  151. source: /mnt/datadisk*
  152. opts:
  153. - allow_other
  154. - minfreespace=10G
  155. - category.create=mfs
  156. - use_ino
  157. - func.getattr=newest
  158. - fsname=mergerfs
  159. - nonempty
  160. selinux_booleans:
  161. - name: samba_share_fusefs
  162. state: on
  163. persistent: yes
  164. firewall:
  165. - service:
  166. - samba
  167. - netbios-ns
  168. - http
  169. state: enabled
  170. - port:
  171. - '1337/tcp'
  172. - '8080/tcp'
  173. - '8081/tcp'
  174. - '9091/tcp'
  175. state: enabled
  176. server_notifications_topic: "{{ vaulted_server_notifications_topic }}"
  177. pre_tasks:
  178. - name: Create Media Group
  179. group:
  180. name: "{{ vaulted_media_group }}"
  181. gid: "{{ vaulted_media_gid }}"
  182. - name: Create Media User
  183. user:
  184. name: "{{ vaulted_media_user }}"
  185. uid: "{{ vaulted_media_uid }}"
  186. groups: "{{ vaulted_media_group }}"
  187. append: yes
  188. shell: /bin/bash
  189. - name: Ensure mountpoints exist
  190. file:
  191. path: "{{ item.path }}"
  192. state: directory
  193. with_items:
  194. - "{{ snapraid_parity_disks }}"
  195. - "{{ snapraid_data_disks }}"
  196. - name: Ensure VPN device config directory exists
  197. file:
  198. path: /etc/systemd/system/sys-subsystem-net-devices-nordtun.device.d
  199. state: directory
  200. owner: root
  201. group: root
  202. mode: '0755'
  203. - name: Auto-Restart services after VPN re-connects
  204. copy:
  205. dest: /etc/systemd/system/sys-subsystem-net-devices-nordtun.device.d/upholds.conf
  206. owner: root
  207. group: root
  208. mode: '0644'
  209. content: |
  210. [Unit]
  211. Upholds=transmission.service
  212. Upholds=qbittorrent.service
  213. Upholds=sickgear.service