Compare commits
7 Commits
master
...
76029b6102
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76029b6102 | ||
|
|
a9bf973dc5 | ||
|
|
d9b568058b | ||
|
|
58e5dd177e | ||
|
|
9ef90db07b | ||
|
|
458506e798 | ||
|
|
874c759f85 |
@@ -23,13 +23,12 @@ Having Plex and Jellyfin separate from the rest of my docker infrastructure allo
|
|||||||
**Storage:**
|
**Storage:**
|
||||||
* `/`: 1 TB NVME SSD
|
* `/`: 1 TB NVME SSD
|
||||||
* `/vm_storage`: 2x 240 GB SSD in ZFS mirror for config and data files
|
* `/vm_storage`: 2x 240 GB SSD in ZFS mirror for config and data files
|
||||||
* `/mnt/storage`: mergerfs + SnapRAID pool totaling 150 TiB usable storage with single disk parity (YOLO). Drives run btrfs allowing me to utilize [snapraid-btrfs](https://wiki.selfhosted.show/tools/snapraid-btrfs/) for instant snapshotting
|
* `/mnt/storage`: mergerfs + SnapRAID pool totaling ~90 TiB usable storage. Currently single parity disk but hoping to add a second one soon. Drives run btrfs allowing me to utilize [snapraid-btrfs](https://wiki.selfhosted.show/tools/snapraid-btrfs/) for instant snapshotting
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
* Flesh out backup strategy with btrfs snapshots and restic (separately)
|
* Flesh out backup strategy with btrfs snapshots and restic (separately)
|
||||||
* Potentially migrate media pool to ZFS. I've been lucky so far with no drive failures but realistically if I did have one fail, it would take ages to rebuild with single disk parity and I'd be wishing I had a more robust setup.
|
* Move everything to Arch VMs on Proxmox
|
||||||
* Move everything to Arch LXCs on Proxmox
|
|
||||||
* Possibly set up second Proxmox node for backups
|
* Possibly set up second Proxmox node for backups
|
||||||
* Immich for photo management
|
* Immich for photo management
|
||||||
* Look into [Wazuh](https://github.com/wazuh/wazuh) for threat prevention/detection
|
* Look into [Wazuh](https://github.com/wazuh/wazuh) for threat prevention/detection
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
directory: /music
|
directory: /music
|
||||||
per_disc_numbering: yes
|
per_disc_numbering: yes
|
||||||
|
|
||||||
plugins: fetchart embedart web inline lyrics musicbrainz scrub lastgenre replaygain
|
plugins: fetchart web inline lyrics
|
||||||
|
|
||||||
paths:
|
paths:
|
||||||
default: $albumartist/$album%aunique{}/%if{$multidisc,$disc}$track - $title
|
default: $albumartist/$album%aunique{}/%if{$multidisc,$disc}$track - $title
|
||||||
@@ -12,7 +12,7 @@ item_fields:
|
|||||||
|
|
||||||
import:
|
import:
|
||||||
write: yes
|
write: yes
|
||||||
move: yes
|
hardlink: yes
|
||||||
resume: ask
|
resume: ask
|
||||||
incremental: yes
|
incremental: yes
|
||||||
quiet_fallback: skip
|
quiet_fallback: skip
|
||||||
@@ -28,32 +28,13 @@ embedart:
|
|||||||
fetchart:
|
fetchart:
|
||||||
auto: yes
|
auto: yes
|
||||||
high_resolution: yes
|
high_resolution: yes
|
||||||
source:
|
|
||||||
- filesystem
|
|
||||||
- itunes
|
|
||||||
- coverart
|
|
||||||
- amazon
|
|
||||||
|
|
||||||
match:
|
|
||||||
strong_rec_thresh: 0.10
|
|
||||||
ignored_media: ['12" Vinyl']
|
|
||||||
|
|
||||||
lyrics:
|
lyrics:
|
||||||
sources: [lrclib, genius, tekstowo]
|
sources: [lrclib, genius]
|
||||||
|
|
||||||
scrub:
|
scrub:
|
||||||
auto: yes
|
auto: yes
|
||||||
|
|
||||||
replaygain:
|
|
||||||
auto: yes
|
|
||||||
backend: ffmpeg
|
|
||||||
|
|
||||||
# Consider directory empty even if files matching the below patterns are present
|
|
||||||
clutter:
|
|
||||||
- "*.jpg"
|
|
||||||
- "*.png"
|
|
||||||
- "*.nfo"
|
|
||||||
|
|
||||||
replace:
|
replace:
|
||||||
'^\.': _
|
'^\.': _
|
||||||
'[\x00-\x1f]': _
|
'[\x00-\x1f]': _
|
||||||
|
|||||||
11
ansible/roles/btc/tasks/bitcoin.yml
Normal file
11
ansible/roles/btc/tasks/bitcoin.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
- name: Install bitcoin daemon
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: bitcoin-daemon
|
||||||
|
state: present
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Enable bitcoind
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: bitcoind
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
6
ansible/roles/btc/tasks/tor.yml
Normal file
6
ansible/roles/btc/tasks/tor.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
- name: Install tor
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: tor
|
||||||
|
state: present
|
||||||
|
|
||||||
|
|
||||||
32
ansible/roles/btc/tasks/ufw.yml
Normal file
32
ansible/roles/btc/tasks/ufw.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
- name: Install Uncomplicated Firewall
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: ufw
|
||||||
|
state: present
|
||||||
|
|
||||||
|
# UFW logging can full up the kernel (dmesg) and message logs
|
||||||
|
- name: Disable logging
|
||||||
|
community.general.ufw:
|
||||||
|
logging: 'off'
|
||||||
|
|
||||||
|
- name: Allow OpenSSH inbound
|
||||||
|
community.general.ufw:
|
||||||
|
rule: allow
|
||||||
|
name: OpenSSH # Uses standard profile located in /etc/ufw/applications.d
|
||||||
|
|
||||||
|
- name: Apply rate limiting to ssh inbound
|
||||||
|
community.general.ufw:
|
||||||
|
rule: limit
|
||||||
|
port: ssh
|
||||||
|
proto: tcp
|
||||||
|
|
||||||
|
- name: Enable ufw system service
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: ufw
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
# This is necessary in addition to enabling the system service
|
||||||
|
- name: Enable ufw rules
|
||||||
|
community.general.ufw:
|
||||||
|
state: enabled
|
||||||
|
policy: deny
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
dest: "{{ data_dir }}/qbitmanage/config.yml"
|
dest: "{{ data_dir }}/qbitmanage/config.yml"
|
||||||
owner: "{{ service_user.uid }}"
|
owner: "{{ service_user.uid }}"
|
||||||
mode: "{{ docker_compose_file_mask }}"
|
mode: "{{ docker_compose_file_mask }}"
|
||||||
|
notify: restart qbittorrent
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Create cross-seed config directory
|
- name: Create cross-seed config directory
|
||||||
@@ -46,6 +47,7 @@
|
|||||||
dest: "{{ data_dir }}/cross-seed/config.js"
|
dest: "{{ data_dir }}/cross-seed/config.js"
|
||||||
owner: "{{ service_user.uid }}"
|
owner: "{{ service_user.uid }}"
|
||||||
mode: "{{ docker_compose_file_mask }}"
|
mode: "{{ docker_compose_file_mask }}"
|
||||||
|
notify: restart qbittorrent
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Start docker containers
|
- name: Start docker containers
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ module.exports = {
|
|||||||
delay: 30,
|
delay: 30,
|
||||||
|
|
||||||
torznab: [
|
torznab: [
|
||||||
|
"http://prowlarr.local.{{ personal_domain }}/3/api?apikey={{ prowlarr_api_key }}", // ImmortalSeed
|
||||||
"http://prowlarr.local.{{ personal_domain }}/6/api?apikey={{ prowlarr_api_key }}", // Aither
|
"http://prowlarr.local.{{ personal_domain }}/6/api?apikey={{ prowlarr_api_key }}", // Aither
|
||||||
"http://prowlarr.local.{{ personal_domain }}/7/api?apikey={{ prowlarr_api_key }}", // Reelflix
|
"http://prowlarr.local.{{ personal_domain }}/7/api?apikey={{ prowlarr_api_key }}", // Reelflix
|
||||||
"http://prowlarr.local.{{ personal_domain }}/9/api?apikey={{ prowlarr_api_key }}", // LST
|
"http://prowlarr.local.{{ personal_domain }}/9/api?apikey={{ prowlarr_api_key }}", // LST
|
||||||
"http://prowlarr.local.{{ personal_domain }}/10/api?apikey={{ prowlarr_api_key }}", // MyAnonaMouse
|
|
||||||
"http://prowlarr.local.{{ personal_domain }}/12/api?apikey={{ prowlarr_api_key }}", // Blutopia
|
"http://prowlarr.local.{{ personal_domain }}/12/api?apikey={{ prowlarr_api_key }}", // Blutopia
|
||||||
"http://prowlarr.local.{{ personal_domain }}/13/api?apikey={{ prowlarr_api_key }}", // hawke-uno
|
"http://prowlarr.local.{{ personal_domain }}/13/api?apikey={{ prowlarr_api_key }}", // hawke-uno
|
||||||
"http://prowlarr.local.{{ personal_domain }}/16/api?apikey={{ prowlarr_api_key }}", // AlphaRatio
|
"http://prowlarr.local.{{ personal_domain }}/16/api?apikey={{ prowlarr_api_key }}", // AlphaRatio
|
||||||
@@ -15,9 +15,7 @@ module.exports = {
|
|||||||
"http://prowlarr.local.{{ personal_domain }}/19/api?apikey={{ prowlarr_api_key }}", // Cathode-Ray.Tube
|
"http://prowlarr.local.{{ personal_domain }}/19/api?apikey={{ prowlarr_api_key }}", // Cathode-Ray.Tube
|
||||||
"http://prowlarr.local.{{ personal_domain }}/25/api?apikey={{ prowlarr_api_key }}", // seedpool
|
"http://prowlarr.local.{{ personal_domain }}/25/api?apikey={{ prowlarr_api_key }}", // seedpool
|
||||||
"http://prowlarr.local.{{ personal_domain }}/27/api?apikey={{ prowlarr_api_key }}", // Upload.cx
|
"http://prowlarr.local.{{ personal_domain }}/27/api?apikey={{ prowlarr_api_key }}", // Upload.cx
|
||||||
"http://prowlarr.local.{{ personal_domain }}/30/api?apikey={{ prowlarr_api_key }}", // DocsPedia
|
"http://prowlarr.local.{{ personal_domain }}/29/api?apikey={{ prowlarr_api_key }}", // IPTorrents
|
||||||
"http://prowlarr.local.{{ personal_domain }}/31/api?apikey={{ prowlarr_api_key }}", // OnlyEncodes+
|
|
||||||
"http://prowlarr.local.{{ personal_domain }}/32/api?apikey={{ prowlarr_api_key }}", // Anthelion
|
|
||||||
],
|
],
|
||||||
|
|
||||||
outputDir: null,
|
outputDir: null,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ networks:
|
|||||||
services:
|
services:
|
||||||
qbittorrent:
|
qbittorrent:
|
||||||
container_name: qbittorrent
|
container_name: qbittorrent
|
||||||
image: lscr.io/linuxserver/qbittorrent:5.1.4
|
image: lscr.io/linuxserver/qbittorrent:5.1.2
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
network_mode: "container:gluetun"
|
network_mode: "container:gluetun"
|
||||||
environment:
|
environment:
|
||||||
@@ -13,7 +13,7 @@ services:
|
|||||||
- "PGID={{ media_gid }}"
|
- "PGID={{ media_gid }}"
|
||||||
- "TZ={{ timezone }}"
|
- "TZ={{ timezone }}"
|
||||||
- "UMASK=002"
|
- "UMASK=002"
|
||||||
#- DOCKER_MODS=arafatamim/linuxserver-io-mod-vuetorrent
|
- DOCKER_MODS=arafatamim/linuxserver-io-mod-vuetorrent
|
||||||
volumes:
|
volumes:
|
||||||
- "{{ data_dir }}/{{ role_name }}:/config"
|
- "{{ data_dir }}/{{ role_name }}:/config"
|
||||||
- "{{ media_storage_mnt }}/data/torrents:/data/torrents"
|
- "{{ media_storage_mnt }}/data/torrents:/data/torrents"
|
||||||
@@ -52,3 +52,26 @@ services:
|
|||||||
- "{{ media_storage_mnt }}/data/torrents:/data/torrents" # Necessary for partial matching
|
- "{{ media_storage_mnt }}/data/torrents:/data/torrents" # Necessary for partial matching
|
||||||
command: daemon
|
command: daemon
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
unpackerr:
|
||||||
|
container_name: unpackerr
|
||||||
|
image: ghcr.io/hotio/unpackerr
|
||||||
|
networks:
|
||||||
|
- starr
|
||||||
|
environment:
|
||||||
|
- "PUID={{ service_user.uid }}"
|
||||||
|
- "PGID={{ media_gid }}"
|
||||||
|
- UMASK=002
|
||||||
|
- TZ={{ timezone }}
|
||||||
|
- UN_INTERVAL=5m
|
||||||
|
- UN_FILE_MODE=0664
|
||||||
|
- UN_DIR_MODE=0775
|
||||||
|
- UN_SONARR_0_URL=http://sonarr:8989
|
||||||
|
- "UN_SONARR_0_API_KEY={{ sonarr_api_key }}"
|
||||||
|
- UN_SONARR_0_PATHS_0=/data/torrents/tv
|
||||||
|
- UN_RADARR_0_URL=http://radarr:7878
|
||||||
|
- "UN_RADARR_0_API_KEY={{ radarr_api_key }}"
|
||||||
|
- UN_RADARR_0_PATHS_0=/data/torrents/movies
|
||||||
|
volumes:
|
||||||
|
- "{{ data_dir }}/unpackerr:/config"
|
||||||
|
- "{{ media_storage_mnt }}/data/torrents:/data/torrents"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ commands:
|
|||||||
recheck: True
|
recheck: True
|
||||||
tag_update: True
|
tag_update: True
|
||||||
rem_unregistered: True
|
rem_unregistered: True
|
||||||
rem_orphaned: True
|
remove_orphaned: True
|
||||||
tag_nohardlinks: True
|
tag_nohardlinks: True
|
||||||
|
|
||||||
qbt:
|
qbt:
|
||||||
@@ -79,14 +79,10 @@ tracker:
|
|||||||
tag: rutracker
|
tag: rutracker
|
||||||
seedpool|seedpool.org:
|
seedpool|seedpool.org:
|
||||||
tag: seedpool
|
tag: seedpool
|
||||||
upload.cx:
|
upload:
|
||||||
tag: ULCX
|
tag: ULCX
|
||||||
archlinux:
|
archlinux:
|
||||||
tag: archlinux
|
tag: archlinux
|
||||||
animebytes:
|
|
||||||
tag: AB
|
|
||||||
anthelion:
|
|
||||||
tag: ANT
|
|
||||||
other:
|
other:
|
||||||
tag: other
|
tag: other
|
||||||
|
|
||||||
@@ -103,7 +99,7 @@ share_limits:
|
|||||||
priority: 1
|
priority: 1
|
||||||
include_all_tags:
|
include_all_tags:
|
||||||
- noHL
|
- noHL
|
||||||
max_seeding_time: 40320 # 4 weeks
|
max_seeding_time: 28800 # 20 days
|
||||||
cleanup: true
|
cleanup: true
|
||||||
add_group_to_tag: false
|
add_group_to_tag: false
|
||||||
isos:
|
isos:
|
||||||
@@ -113,14 +109,28 @@ share_limits:
|
|||||||
max_seeding_time: 129600 # 90 days
|
max_seeding_time: 129600 # 90 days
|
||||||
cleanup: true
|
cleanup: true
|
||||||
add_group_to_tag: false
|
add_group_to_tag: false
|
||||||
big: # Set speed limit on bandwidth hogs
|
tl_cross-seed:
|
||||||
priority: 9
|
priority: 9
|
||||||
include_any_tags:
|
include_all_tags:
|
||||||
|
- cross-seed
|
||||||
- TorrentLeech
|
- TorrentLeech
|
||||||
- FileList
|
|
||||||
- AlphaRatio
|
|
||||||
limit_upload_speed: 100 # 100 KiBps
|
limit_upload_speed: 100 # 100 KiBps
|
||||||
add_group_to_tag: false
|
add_group_to_tag: false
|
||||||
|
public_trackers:
|
||||||
|
priority: 10
|
||||||
|
include_any_tags:
|
||||||
|
- Nyaa
|
||||||
|
- AnimeTosho
|
||||||
|
- rutracker
|
||||||
|
categories:
|
||||||
|
- movies
|
||||||
|
- tv
|
||||||
|
max_ratio: 2
|
||||||
|
max_seeding_time: 21600 # 15 days
|
||||||
|
limit_upload_speed: 5000 # 5 MiBps
|
||||||
|
cleanup: true
|
||||||
|
add_group_to_tag: false
|
||||||
|
|
||||||
|
|
||||||
recyclebin:
|
recyclebin:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -48,9 +48,3 @@ custom_formats:
|
|||||||
assign_scores_to:
|
assign_scores_to:
|
||||||
- name: Anime
|
- name: Anime
|
||||||
score: 10 # Prefer dual audio within the same tier but not over higher quality releases
|
score: 10 # Prefer dual audio within the same tier but not over higher quality releases
|
||||||
|
|
||||||
- trash_ids:
|
|
||||||
- 923b6abef9b17f937fab56cfcf89e1f1 # DV (w/o HDR fallback)
|
|
||||||
assign_scores_to:
|
|
||||||
- name: Anime
|
|
||||||
score: -10000
|
|
||||||
|
|||||||
@@ -108,3 +108,9 @@ custom_formats:
|
|||||||
assign_scores_to:
|
assign_scores_to:
|
||||||
- name: Anime
|
- name: Anime
|
||||||
score: 10 # Prefer dual audio within the same tier but don't prefer over higher quality releases
|
score: 10 # Prefer dual audio within the same tier but don't prefer over higher quality releases
|
||||||
|
|
||||||
|
- trash_ids:
|
||||||
|
- 3bc5f395426614e155e585a2f056cdf1 # Season Pack
|
||||||
|
assign_scores_to:
|
||||||
|
- name: Anime
|
||||||
|
score: 10 # Prefer season packs over single episode releases
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ custom_formats:
|
|||||||
- fbcb31d8dabd2a319072b84fc0b7249c # Extras
|
- fbcb31d8dabd2a319072b84fc0b7249c # Extras
|
||||||
- 15a05bc7c1a36e2b57fd628f8977e2fc # AV1
|
- 15a05bc7c1a36e2b57fd628f8977e2fc # AV1
|
||||||
- 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups
|
- 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups
|
||||||
|
- 82d40da2bc6923f41e14394075dd4b03 # No-RlsGroup
|
||||||
- e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated
|
- e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated
|
||||||
- 06d66ab109d4d2eddb2794d21526d140 # Retags
|
- 06d66ab109d4d2eddb2794d21526d140 # Retags
|
||||||
- b735f09d3c025cbb7d75a5d38325b73b # Upscaled
|
- b735f09d3c025cbb7d75a5d38325b73b # Upscaled
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ custom_formats:
|
|||||||
- fbcb31d8dabd2a319072b84fc0b7249c # Extras
|
- fbcb31d8dabd2a319072b84fc0b7249c # Extras
|
||||||
- 15a05bc7c1a36e2b57fd628f8977e2fc # AV1
|
- 15a05bc7c1a36e2b57fd628f8977e2fc # AV1
|
||||||
- 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups
|
- 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups
|
||||||
|
- 82d40da2bc6923f41e14394075dd4b03 # No-RlsGroup
|
||||||
- e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated
|
- e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated
|
||||||
- 06d66ab109d4d2eddb2794d21526d140 # Retags
|
- 06d66ab109d4d2eddb2794d21526d140 # Retags
|
||||||
- b735f09d3c025cbb7d75a5d38325b73b # Upscaled
|
- b735f09d3c025cbb7d75a5d38325b73b # Upscaled
|
||||||
|
|||||||
Reference in New Issue
Block a user