summaryrefslogtreecommitdiff
path: root/README.md
blob: 52763c594f37616cbbb1aa73cb1a00e8d520dd72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Privateer

## Services

### **Traefik** ([traefik][12])
- Routes all traffic through port 443 (https) to minimize open ports
- Auto-renews https certificates before they expire
    (require a cloudflare DNS provider)

### **Dyndns** ([cloudflare-dynamic-dns][2]):
- Updates cloudflare DNS records with the host's public IP address

### **vpn** ([gluetun][3])
- Protects sensitive connection with a VPN

### **torrent** ([qbittorrent][4])
- Downloads and seeds requested content

### **proxy** ([flaresolverr][5])
- Bypasses cloudflare captchas when reaching torrent sites

### **resolver** ([prowlarr][6])
- Automatically configures torrent sites for requesters (sonarr + radarr)

### **movies** ([radarr][7])
- Automatic fetching of requested movies

### **tv** ([sonarr][8])
- Automatic fetching of requested TV Shows

### **oversee** ([overseerr][9])
- Manage multiple users and limit how many requests they can make
- Also: necessary for discord integration

### **bot** ([doplarr][10])
- Discord bot that allows users to request media

### **jellyfin** ([jellyfin][11])[^1]
- Streams media to users


## What you need to make this work:

1. A domain name
2. A cloudflare account (free but the domain DNS must be managed by cloudflare)
3. An active PIA VPN subscription [^2]
4. A machine with docker and docker-compose installed
   (and sufficient resources to store and serve media)
5. A discord server in which you are an admin
   (optional but lets you request media and get status update in discord)

## How to set it up:

1. Clone this repository
2. copy the `template.env` file to `.env` and fill in the necessary values
3. Run `docker-compose up -d` to start the services

## Tips & Tricks:

[lazydocker][13]: Is a great tool to monitor the status of your docker containers. If anything
goes wrong. Looking at a containers logs is a great way to figure out what went wrong.

The `template.env` file contains a `MISC_DIR` variable. This is for you to stream any media
that isn't a movie or TV show (ex: family videos).

Once the services are online, you will need to configure each service through their web UI. It's
simpler to do so on your LAN network calling the ports:

<div align="center">

| Service     | Port                                       |
|-------------|--------------------------------------------|
| Traefik     | `:8080`                                    |
| Prowlarr    | `:9696`                                    |
| Radarr      | `:7878`                                    |
| Sonarr      | `:8989`                                    |
| Overseerr   | `:5055`                                    |
| qbittorrent | `:4242`[^3]  |

</div>

[1]: https://wiki.servarr.com
[2]: https://github.com/mxmlndml/cloudflare-dynamic-dns
[3]: https://hub.docker.com/r/qmcgaw/gluetun
[4]: https://hub.docker.com/r/linuxserver/qbittorrent
[5]: https://hub.docker.com/r/flaresolverr/flaresolverr
[6]: https://hub.docker.com/r/linuxserver/prowlarr
[7]: https://hub.docker.com/r/linuxserver/radarr
[8]: https://hub.docker.com/r/linuxserver/sonarr
[9]: https://hub.docker.com/r/linuxserver/overseerr
[10]: https://hub.docker.com/r/linuxserver/doplarr
[11]: https://hub.docker.com/r/linuxserver/jellyfin
[12]: https://doc.traefik.io/traefik/
[13]: https://github.com/jesseduffield/lazydocker

[^1]: Note that even though I use plex on a daily bases, I did not include it in this
configuration as my instance is running bare-metal to avoid nvidia-docker
shenanigans. In this usecase, jellyfin is used as a fallback which works out of
the box even without plex being configured.

[^2]: Other VPNs supported by gluetun can be configured with minimal changes. PIA required a
qbittorrent to be configured a bit differently as it provides a port-forwarding service with
the port being randomly assigned and stored in a json file. Look at the qbit-pia folder to
see the changes that needed to be made.

[^3]: `:8080` is the default port but it is already in use by Traefik