Compare commits

..

7 Commits

Author SHA1 Message Date
Mike Wilson
76029b6102 Fix deprecated config options in cross-seed 2025-09-22 14:26:49 -04:00
Mike Wilson
a9bf973dc5 Add IPTorrents and ignore uploads for cross-seed 2025-09-22 14:07:51 -04:00
Mike Wilson
d9b568058b Prefer season packs over single episodes for anime 2025-09-17 10:06:17 -04:00
Mike Wilson
58e5dd177e Enable vuetorrent and fix ULCX qbitmanage tag 2025-09-17 10:04:09 -04:00
Mike Wilson
9ef90db07b Add tor and bitcoin-daemon steps 2025-09-05 17:03:39 -04:00
Mike Wilson
458506e798 Add step to enable ufw rules 2025-09-05 16:11:25 -04:00
Mike Wilson
874c759f85 Add UFW task 2025-09-05 15:54:07 -04:00
13 changed files with 112 additions and 48 deletions

View File

@@ -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

View File

@@ -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]': _

View 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

View File

@@ -0,0 +1,6 @@
- name: Install tor
ansible.builtin.package:
name: tor
state: present

View 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

View File

@@ -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

View File

@@ -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,

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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