Convert the remaining Serveex and recycled articles to steps

This commit is contained in:
Djeex
2026-09-04 15:57:38 +02:00
parent cd75fd2288
commit a7b3880088
29 changed files with 249 additions and 106 deletions
@@ -8,6 +8,8 @@ description: Install Pocket ID, a lightweight self-hosted OIDC provider that let
[Pocket ID](https://pocket-id.org) is a minimalist, self-hosted OIDC (OpenID Connect) provider built entirely around passkeys: instead of managing passwords, you and your users log in to compatible apps with a **passkey** (fingerprint, face unlock, or a hardware security key). It runs as a single lightweight container with no external database to manage, and it does exactly one thing well: issuing OIDC logins. [Pocket ID](https://pocket-id.org) is a minimalist, self-hosted OIDC (OpenID Connect) provider built entirely around passkeys: instead of managing passwords, you and your users log in to compatible apps with a **passkey** (fingerprint, face unlock, or a hardware security key). It runs as a single lightweight container with no external database to manage, and it does exactly one thing well: issuing OIDC logins.
![pocketid](/img/serveex/pocketid.png)
This makes it a good fit if you just need a simple, fast SSO backend, for example to pair with [TinyAuth](/serveex/security/tinyauth) as a lightweight forward-auth setup, or to log in directly to apps that natively support OIDC. This makes it a good fit if you just need a simple, fast SSO backend, for example to pair with [TinyAuth](/serveex/security/tinyauth) as a lightweight forward-auth setup, or to log in directly to apps that natively support OIDC.
- [Pocket ID documentation](https://pocket-id.org/docs) - [Pocket ID documentation](https://pocket-id.org/docs)
@@ -8,6 +8,8 @@ description: Install TinyAuth, a lightweight forward-auth proxy, and pair it wit
[TinyAuth](https://tinyauth.app) is a small forward-auth proxy: a single login page that Swag can insert in front of any app before letting a request through, checking whether a visitor is authenticated before forwarding them on. [TinyAuth](https://tinyauth.app) is a small forward-auth proxy: a single login page that Swag can insert in front of any app before letting a request through, checking whether a visitor is authenticated before forwarding them on.
![tinyauth](/img/serveex/tinyauth.png)
It supports a simple local username/password login out of the box, and can also delegate login to an external OIDC provider. Here we'll use [Pocket ID](/serveex/security/pocket-id), so anyone visiting a protected app first authenticates with a passkey via Pocket ID, then gets forwarded through. It supports a simple local username/password login out of the box, and can also delegate login to an external OIDC provider. Here we'll use [Pocket ID](/serveex/security/pocket-id), so anyone visiting a protected app first authenticates with a passkey via Pocket ID, then gets forwarded through.
- [TinyAuth documentation](https://tinyauth.app/docs) - [TinyAuth documentation](https://tinyauth.app/docs)
@@ -6,6 +6,8 @@ description: Install Jellyfin, a free and open-source media server, to stream yo
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
![Jellyfin](/img/serveex/jellyfin.png)
[Jellyfin](https://jellyfin.org) is a free, open-source alternative to Plex and Emby. Unlike Plex, it has no paid tiers, no telemetry, and doesn't require an online account to use or manage your server: everything runs locally and stays yours. [Jellyfin](https://jellyfin.org) is a free, open-source alternative to Plex and Emby. Unlike Plex, it has no paid tiers, no telemetry, and doesn't require an online account to use or manage your server: everything runs locally and stays yours.
It covers the same basics: a media library with metadata and artwork, transcoding (including hardware acceleration), and apps for TV, Android, iOS, Windows, and macOS. It covers the same basics: a media library with metadata and artwork, transcoding (including hardware acceleration), and apps for TV, Android, iOS, Windows, and macOS.
@@ -5,18 +5,10 @@ description: Install File Browser Quantum, a modernized fork of File Browser, to
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# File Browser Quantum
::note
🎯 __Objectives:__
- Install File Browser Quantum
- Expose File Browser Quantum using Swag
::
[File Browser Quantum](https://github.com/gtsteffaniak/filebrowser) is a community fork of [File Browser](/recycled/deprecated/file-browser), rewritten for better performance (indexed search, lower memory use) and configured through a single `config.yaml` file instead of a database-only setup. [File Browser Quantum](https://github.com/gtsteffaniak/filebrowser) is a community fork of [File Browser](/recycled/deprecated/file-browser), rewritten for better performance (indexed search, lower memory use) and configured through a single `config.yaml` file instead of a database-only setup.
If you're already using File Browser and it fits your needs, there's no need to switch. The two are independent projects with their own configuration and can't share data directly. ![file-browser-quantum](/img/serveex/filebrowser-quantum.png)
## Installation ## Installation
@@ -33,6 +25,9 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Create the config file
Create the data folder: Create the data folder:
```bash [Terminal] ```bash [Terminal]
@@ -61,6 +56,8 @@ server:
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Deploy the stack
Open Dockge, click on `compose`, name the stack `filebrowser-quantum`, then copy and paste the following: Open Dockge, click on `compose`, name the stack `filebrowser-quantum`, then copy and paste the following:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -98,6 +95,9 @@ Mount every folder you listed under `sources` in `config.yaml` at the same path
Deploy the container and go to `http://yourserverip:8020`. Log in with the default `admin` / `admin` credentials, then immediately change the password in your profile settings. Deploy the container and go to `http://yourserverip:8020`. Log in with the default `admin` / `admin` credentials, then immediately change the password in your profile settings.
### Done !
::
::caution ::caution
__If it doesn't work:__ check your firewall rules. __If it doesn't work:__ check your firewall rules.
@@ -112,11 +112,14 @@ File Browser Quantum does not support multi-factor authentication. Exposing it p
You may want to access File Browser Quantum remotely from all your devices. To do that, we'll expose it through Swag. You may want to access File Browser Quantum remotely from all your devices. To do that, we'll expose it through Swag.
::note ::note{icon=""}
__Pre-requisite:__ We assume you've already created a subdomain like `fbq.yourdomain.com` in your [DNS zone](/general/networking/dns) pointing to `yourdomain.com` with a `CNAME`. Unless you're using Cloudflare Zero Trust, we also assume you've already forwarded port `443` on your router to port `443` on your server using [NAT rules](/general/networking/nat). 📋 __Pre-requisite:__ We assume you've already created a subdomain like `fbq.yourdomain.com` in your [DNS zone](/general/networking/dns) pointing to `yourdomain.com` with a `CNAME`. Unless you're using Cloudflare Zero Trust, we also assume you've already forwarded port `443` on your router to port `443` on your server using [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add File Browser Quantum's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file to add File Browser Quantum's network: In Dockge, go to the SWAG stack and edit the compose file to add File Browser Quantum's network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -143,6 +146,8 @@ Here, we assume the network name for File Browser Quantum is `filebrowser-quantu
Restart the stack by clicking "deploy" and wait for SWAG to fully initialize. Restart the stack by clicking "deploy" and wait for SWAG to fully initialize.
### Create the subdomain.conf file
In the Swag folders, create the file `fbq.subdomain.conf`. In the Swag folders, create the file `fbq.subdomain.conf`.
```bash [Terminal] ```bash [Terminal]
@@ -199,6 +204,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
That's it! File Browser Quantum is now exposed. That's it! File Browser Quantum is now exposed.
## Protecting File Browser Quantum with TinyAuth ## Protecting File Browser Quantum with TinyAuth
+1 -1
View File
@@ -77,7 +77,7 @@ __If it fails:__ check your firewall rules.
## Exposing Pingvin with Swag ## Exposing Pingvin with Swag
The whole point of a solution like this is being able to access it remotely, from all your devices. To do this, we'll expose Pingvin through Swag. The whole point of a solution like this is being able to access it remotely, from all your devices. To do this, we'll expose Pingvin through Swag.
::note ::note{icon=""}
📋 __Prerequisite:__ <br/><br/> 📋 __Prerequisite:__ <br/><br/>
We assume you have the subdomain `pingvin.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/general/networking/dns). And of course, [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat). We assume you have the subdomain `pingvin.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/general/networking/dns). And of course, [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat).
:: ::
@@ -38,6 +38,9 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Deploy the stack
Open Dockge, click on `compose`, name the stack `code-server`, and paste the following: Open Dockge, click on `compose`, name the stack `code-server`, and paste the following:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -73,6 +76,8 @@ services:
``` ```
:: ::
### Set your environment variables
Choose a password and generate its hash: Choose a password and generate its hash:
```bash [Terminal] ```bash [Terminal]
@@ -100,6 +105,9 @@ __Note:__ Make sure to wrap the hash in single quotes `'`
Deploy the container and go to `http://yourserverip:8443`. Voilà, your code-server instance is up and running in the browser! Deploy the container and go to `http://yourserverip:8443`. Voilà, your code-server instance is up and running in the browser!
### Done !
::
::caution ::caution
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
@@ -126,6 +134,9 @@ The whole point of such a solution is to access it remotely from any device. To
__Preliminary:__ We assume youve created a subdomain like `code.yourdomain.com` with a `CNAME` pointing to `yourdomain.com` in your [DNS zone](/general/networking/dns). Unless you're using [Cloudflare Zero Trust](/serveex/security/cloudflare), we also assume youve forwarded port `443` from your router to port `443` on your server using [NAT rules](/general/networking/nat). __Preliminary:__ We assume youve created a subdomain like `code.yourdomain.com` with a `CNAME` pointing to `yourdomain.com` in your [DNS zone](/general/networking/dns). Unless you're using [Cloudflare Zero Trust](/serveex/security/cloudflare), we also assume youve forwarded port `443` from your router to port `443` on your server using [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add code-server's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file to add code-servers network: In Dockge, go to the SWAG stack and edit the compose file to add code-servers network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -152,6 +163,8 @@ We assume the network name is `code-server_default`. You can verify that the con
Redeploy the stack by clicking “deploy” and wait until SWAG is fully operational. Redeploy the stack by clicking “deploy” and wait until SWAG is fully operational.
### Create the subdomain.conf file
Inside the Swag config folders, create the file `code.subdomain.conf`. Inside the Swag config folders, create the file `code.subdomain.conf`.
::tip{icon=""} ::tip{icon=""}
@@ -216,6 +229,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
Thats it! code-server is now exposed! Thats it! code-server is now exposed!
## Protecting code-server with TinyAuth ## Protecting code-server with TinyAuth
@@ -5,17 +5,12 @@ description: Install Forgejo, a lightweight self-hosted Git service to manage yo
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Forgejo
::note
🎯 __Goals:__
- Install Forgejo
- Expose Forgejo using Swag
::
[Forgejo](https://forgejo.org/) is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure. It's a community-driven fork of Gitea. [Forgejo](https://forgejo.org/) is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure. It's a community-driven fork of Gitea.
![forgejo](/img/serveex/forgejo.png)
## Installation ## Installation
::file-tree ::file-tree
@@ -30,6 +25,9 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Deploy the stack
Open Dockge, click on `compose`, name the stack `forgejo`, and paste the following content: Open Dockge, click on `compose`, name the stack `forgejo`, and paste the following content:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -55,6 +53,8 @@ services:
- 222:22 - 222:22
``` ```
### Set your environment variables
Fill out the `.env` file with the required information, for example: Fill out the `.env` file with the required information, for example:
```properties [.env] ```properties [.env]
@@ -64,6 +64,9 @@ GID=1000
Deploy the container and go to `http://yourserverip:3333`. Your Forgejo instance is now up and running! Deploy the container and go to `http://yourserverip:3333`. Your Forgejo instance is now up and running!
### Done !
::
::caution ::caution
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
@@ -77,6 +80,9 @@ The benefit of this setup is being able to access it remotely from any of your d
__Prerequisite:__ We assume you have created a subdomain such as `forgejo.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` pointing to `yourdomain.com`, and [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), you have already forwarded port `443` from your router to your servers port `443` in the [NAT rules](/general/networking/nat). __Prerequisite:__ We assume you have created a subdomain such as `forgejo.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` pointing to `yourdomain.com`, and [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), you have already forwarded port `443` from your router to your servers port `443` in the [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add Forgejo's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file by adding Forgejo's network: In Dockge, go to the SWAG stack and edit the compose file by adding Forgejo's network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -103,6 +109,8 @@ We assume the Forgejo network name is `forgejo_default`. You can verify connecti
Redeploy the stack by clicking "Deploy" and wait until SWAG is fully operational. Redeploy the stack by clicking "Deploy" and wait until SWAG is fully operational.
### Create the subdomain.conf file
Inside the Swag folders, create the file `forgejo.subdomain.conf`. Inside the Swag folders, create the file `forgejo.subdomain.conf`.
::tip{icon=""} ::tip{icon=""}
@@ -173,6 +181,8 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Configure Forgejo's domain
Now open the `app.ini` file from the container's file system: Now open the `app.ini` file from the container's file system:
```bash [Terminal] ```bash [Terminal]
@@ -190,6 +200,9 @@ ROOT_URL = https://forgejo.yourdomain.com/
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit, then restart the container. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit, then restart the container.
### Done !
::
And thats it! Forgejo is now exposed to the web. And thats it! Forgejo is now exposed to the web.
## Protecting Forgejo with Pocket ID ## Protecting Forgejo with Pocket ID
@@ -5,14 +5,6 @@ description: Install IT Tools, a self-hosted collection of handy utilities for d
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# IT Tools
::note
🎯 __Goals:__
- Install IT Tools
- Expose IT Tools with Swag
::
[IT Tools](https://github.com/CorentinTh/it-tools) is a container exposing a web page that provides access to a wide range of development tools. [IT Tools](https://github.com/CorentinTh/it-tools) is a container exposing a web page that provides access to a wide range of development tools.
@@ -20,6 +12,9 @@ description: Install IT Tools, a self-hosted collection of handy utilities for d
## Installation ## Installation
::steps{level="3"}
### Deploy the stack
Open Dockge, click on `compose`, name the stack `it-tools`, and paste the following: Open Dockge, click on `compose`, name the stack `it-tools`, and paste the following:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -48,6 +43,9 @@ services:
Deploy the container and visit `http://yourserverip:3222`. Thats it, your IT Tools web UI instance is up and running! Deploy the container and visit `http://yourserverip:3222`. Thats it, your IT Tools web UI instance is up and running!
### Done !
::
::caution ::caution
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
@@ -61,6 +59,9 @@ You might want to access it remotely on all your devices. To do that, we'll expo
__Pre-requisite:__ We assume youve created a subdomain like `tools.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` set to `yourdomain.com`. Also, unless youre using [Cloudflare Zero Trust](/serveex/security/cloudflare), make sure youve already forwarded port `443` from your router to port `443` on your server in the [NAT rules](/general/networking/nat). __Pre-requisite:__ We assume youve created a subdomain like `tools.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` set to `yourdomain.com`. Also, unless youre using [Cloudflare Zero Trust](/serveex/security/cloudflare), make sure youve already forwarded port `443` from your router to port `443` on your server in the [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add IT Tools' network to SWAG
In Dockge, go to the SWAG stack and edit the compose file to add the IT Tools network: In Dockge, go to the SWAG stack and edit the compose file to add the IT Tools network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -92,6 +93,8 @@ We also assume the SWAG network is named `swag_default`.
Restart the stack by clicking "deploy" and wait for SWAG to be fully operational. Restart the stack by clicking "deploy" and wait for SWAG to be fully operational.
### Create the subdomain.conf file
Inside the Swag folders, create the file `tools.subdomain.conf`. Inside the Swag folders, create the file `tools.subdomain.conf`.
::tip{icon=""} ::tip{icon=""}
@@ -157,6 +160,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
And thats it! IT Tools is now exposed! And thats it! IT Tools is now exposed!
## Protecting IT Tools with TinyAuth ## Protecting IT Tools with TinyAuth
+18 -12
View File
@@ -5,16 +5,6 @@ description: Install AdGuard Home for network-wide ad and tracker blocking with
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Adguard Home
::note
🎯 __Goals:__
- Install and deploy Adguard
- Expose Adguard
- Secure DNS queries with SSL/TLS
- Configure client devices
::
[AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) is a DNS server that blocks ads and tracking at the system level. Once configured, it will protect ALL your home devices without the need for any client-side software. [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) is a DNS server that blocks ads and tracking at the system level. Once configured, it will protect ALL your home devices without the need for any client-side software.
@@ -22,6 +12,8 @@ It works as a DNS server that redirects tracking domains to a “black hole,”
In practice, once it's in place, all you need to do is set your devices to use Adguard as their DNS server. In practice, once it's in place, all you need to do is set your devices to use Adguard as their DNS server.
![adguard](/img/serveex/adguard.png)
**Quick reminder of how DNS works:** **Quick reminder of how DNS works:**
When you visit a site or use an app, it makes requests to various domains to load content, ads in particular. Your device doesnt know the IP addresses of these domains, so it contacts a _Domain Name Server_ (DNS), which returns the current IP address. When you visit a site or use an app, it makes requests to various domains to load content, ads in particular. Your device doesnt know the IP addresses of these domains, so it contacts a _Domain Name Server_ (DNS), which returns the current IP address.
@@ -57,6 +49,9 @@ tree:
We will also mount the `/docker/swag/config/etc/letsencrypt` folder to access Swag's SSL certificate. We will also mount the `/docker/swag/config/etc/letsencrypt` folder to access Swag's SSL certificate.
:: ::
::steps{level="3"}
### Deploy the stack
Open Dockge and click `compose` Open Dockge and click `compose`
Name the stack `adguardhome` and paste the configuration below: Name the stack `adguardhome` and paste the configuration below:
@@ -97,14 +92,17 @@ Deploy the stack.
Go to `http://yourserverip:3000` and follow the setup instructions. Go to `http://yourserverip:3000` and follow the setup instructions.
### Done !
::
Thats it! Adguard is deployed. Thats it! Adguard is deployed.
## Exposing AdGuard with SWAG ## Exposing AdGuard with SWAG
To make AdGuard usable from outside your home network, you need to expose it. To make AdGuard usable from outside your home network, you need to expose it.
::note ::note{icon=""}
__Prerequisites:__ We assume you've created a subdomain like `adguard.mydomain.com` in your [DNS zone](/general/networking/dns) with a `CNAME` pointing to `mydomain.com`, and that youve already forwarded port `443` from your router to port `443` on your server in your [NAT rules](/general/networking/nat). Also forward port `53` and port `853` to your server. These ports are used to route DNS requests. 📋 __Prerequisites:__ We assume you've created a subdomain like `adguard.mydomain.com` in your [DNS zone](/general/networking/dns) with a `CNAME` pointing to `mydomain.com`, and that youve already forwarded port `443` from your router to port `443` on your server in your [NAT rules](/general/networking/nat). Also forward port `53` and port `853` to your server. These ports are used to route DNS requests.
:: ::
::warning ::warning
@@ -112,6 +110,9 @@ __Prerequisites:__ We assume you've created a subdomain like `adguard.mydomain.c
Do not use Cloudflare tunnels to expose AdGuard, and make sure any proxying is disabled. Do not use Cloudflare tunnels to expose AdGuard, and make sure any proxying is disabled.
:: ::
::steps{level="3"}
### Add AdGuard's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file to add the AdGuard network: In Dockge, go to the SWAG stack and edit the compose file to add the AdGuard network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -138,6 +139,8 @@ We assume here that the AdGuard network is named `adguard_default`. You can veri
Restart the stack by clicking "Deploy" and wait for SWAG to be fully operational. Restart the stack by clicking "Deploy" and wait for SWAG to be fully operational.
### Create the subdomain.conf file
Create and open the file `adguard.subdomain.conf` Create and open the file `adguard.subdomain.conf`
::tip{icon=""} ::tip{icon=""}
@@ -226,6 +229,9 @@ server {
} }
``` ```
### Done !
::
## Protecting AdGuard with TinyAuth ## Protecting AdGuard with TinyAuth
Add [TinyAuth](/serveex/security/tinyauth)'s forward-auth check directly to `adguard.subdomain.conf`, the same way as [the TinyAuth guide](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy). The `/dns-query` location is left out of the `auth_request` check, since DNS-over-HTTPS clients can't do an interactive login: Add [TinyAuth](/serveex/security/tinyauth)'s forward-auth check directly to `adguard.subdomain.conf`, the same way as [the TinyAuth guide](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy). The `/dns-query` location is left out of the `auth_request` check, since DNS-over-HTTPS clients can't do an interactive login:
@@ -26,6 +26,9 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Deploy the stack
Open Dockge, click on `compose`, name the stack `vaultwarden`, and paste the following: Open Dockge, click on `compose`, name the stack `vaultwarden`, and paste the following:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -70,6 +73,8 @@ services:
``` ```
:: ::
### Set your environment variables
Next, generate a password hash to put in the `TOKEN` variable in `.env`: Next, generate a password hash to put in the `TOKEN` variable in `.env`:
```bash [Terminal] ```bash [Terminal]
@@ -94,6 +99,9 @@ Then deploy the container.
Recently, Vaultwarden requires SSL to be accessed, which prevents access via a local IP. We'll expose it with SWAG, which provides an SSL certificate. Recently, Vaultwarden requires SSL to be accessed, which prevents access via a local IP. We'll expose it with SWAG, which provides an SSL certificate.
### Done !
::
::caution ::caution
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
@@ -106,6 +114,9 @@ The main benefit of Vaultwarden is being able to access it remotely from any dev
📋 __Before you start:__ Make sure you've created a DNS subdomain like `vault.yourdomain.com` with `CNAME` pointing to `yourdomain.com` and (unless using Cloudflare Zero Trust) that you've forwarded port `443` from your router to your server's `443` via [NAT rules](/general/networking/nat). 📋 __Before you start:__ Make sure you've created a DNS subdomain like `vault.yourdomain.com` with `CNAME` pointing to `yourdomain.com` and (unless using Cloudflare Zero Trust) that you've forwarded port `443` from your router to your server's `443` via [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add Vaultwarden's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file to add the Vaultwarden network: In Dockge, go to the SWAG stack and edit the compose file to add the Vaultwarden network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -132,6 +143,8 @@ We're assuming the network name is `vaultwarden_default`. You can check connecti
Restart the stack by clicking "Deploy" and wait for SWAG to be fully operational. Restart the stack by clicking "Deploy" and wait for SWAG to be fully operational.
### Create the subdomain.conf file
In SWAG's config folder, create the file `vault.subdomain.conf`: In SWAG's config folder, create the file `vault.subdomain.conf`:
::tip{icon=""} ::tip{icon=""}
@@ -230,6 +243,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
And there you go! Vaultwarden is now exposed! Visit `https://vault.yourdomain.com/admin` to access the admin panel and paste the password you specified when generatique the `ADMIN_TOKEN`. For more information, see the [Bitwarden documentation](https://bitwarden.com/help/). And there you go! Vaultwarden is now exposed! Visit `https://vault.yourdomain.com/admin` to access the admin panel and paste the password you specified when generatique the `ADMIN_TOKEN`. For more information, see the [Bitwarden documentation](https://bitwarden.com/help/).
Don't forget to install Bitwarden browser extensions (they work with Vaultwarden) for [Chrome](https://chromewebstore.google.com/detail/gestionnaire-de-mots-de-p/nngceckbapebfimnlniiiahkandclblb) and [Firefox](https://addons.mozilla.org/fr/firefox/addon/bitwarden-password-manager/), as well as [iOS](https://apps.apple.com/fr/app/bitwarden/id1137397744) and [Android](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden&hl=fr) apps to sync your passwords. Don't forget to install Bitwarden browser extensions (they work with Vaultwarden) for [Chrome](https://chromewebstore.google.com/detail/gestionnaire-de-mots-de-p/nngceckbapebfimnlniiiahkandclblb) and [Firefox](https://addons.mozilla.org/fr/firefox/addon/bitwarden-password-manager/), as well as [iOS](https://apps.apple.com/fr/app/bitwarden/id1137397744) and [Android](https://play.google.com/store/apps/details?id=com.x8bit.bitwarden&hl=fr) apps to sync your passwords.
@@ -5,7 +5,6 @@ description: A Python bot that monitors GPU stock availability in real time and
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# 🤖 Nvidia Stock Bot
For the past four years, the electronics hardware shortage has been relentless. Graphics cards are no exception. In 2020, I had to wait two months to get my RTX 3080. To manage it, I joined [JV Hardware](https://discord.gg/gxffg3GA96), where a small group of geeks had set up a bot that pinged users when GPUs became available. For the past four years, the electronics hardware shortage has been relentless. Graphics cards are no exception. In 2020, I had to wait two months to get my RTX 3080. To manage it, I joined [JV Hardware](https://discord.gg/gxffg3GA96), where a small group of geeks had set up a bot that pinged users when GPUs became available.
@@ -5,7 +5,6 @@ description: A Python script to sync AdGuard Home CIDR allowlists automatically,
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# 🤖 Adguard CIDRE Sync
Adguard Home is a fantastic solution for DNS-level ad blocking and rewriting requests, perfect for removing ISP DNS trackers or intrusive ads. Adguard Home is a fantastic solution for DNS-level ad blocking and rewriting requests, perfect for removing ISP DNS trackers or intrusive ads.
@@ -5,7 +5,6 @@ description: A bash script to detect and fix duplicate media files in Sonarr and
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Servarr duplicates corrector
Six months after downloading terabytes of media, I realized that Sonarr and Radarr were copying them into my Plex library instead of creating hardlinks. This happens due to a counterintuitive mechanism: if you mount multiple folders in Sonarr/Radarr, it sees them as different filesystems and thus cannot create hardlinks. Thats why you should mount only one parent folder containing all child folders (like `downloads`, `movies`, `tvseries` inside a `media` parent folder). Six months after downloading terabytes of media, I realized that Sonarr and Radarr were copying them into my Plex library instead of creating hardlinks. This happens due to a counterintuitive mechanism: if you mount multiple folders in Sonarr/Radarr, it sees them as different filesystems and thus cannot create hardlinks. Thats why you should mount only one parent folder containing all child folders (like `downloads`, `movies`, `tvseries` inside a `media` parent folder).
@@ -5,7 +5,6 @@ description: A bash script to automatically dump LUKS headers from all encrypted
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Backup of LUKS Headers for Encrypted Disks/Volumes
I recently realized that having just the password is not enough to unlock a LUKS volume after a failure or corruption. I learned how to dump the LUKS headers from disks/volumes and to use the serial numbers along with partition names to accurately identify which header corresponds to which disk/partition (I have 10 of them!). I recently realized that having just the password is not enough to unlock a LUKS volume after a failure or corruption. I learned how to dump the LUKS headers from disks/volumes and to use the serial numbers along with partition names to accurately identify which header corresponds to which disk/partition (I have 10 of them!).
@@ -5,8 +5,6 @@ description: Use socat to proxy the Docker socket through Docker Socket Proxy, a
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Socat Proxy
This project addresses a common use case: This project addresses a common use case:
- I have [Beszel](https://beszel.dev/), a monitoring container running in host mode, which requires access to the Docker socket to collect container statistics. - I have [Beszel](https://beszel.dev/), a monitoring container running in host mode, which requires access to the Docker socket to collect container statistics.
@@ -5,7 +5,6 @@ description: A bash script that monitors hard drive temperatures and automatical
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# HotDisk
When you have a NAS with several drives sitting in a laundry room, temperatures can quickly rise. When you have a NAS with several drives sitting in a laundry room, temperatures can quickly rise.
Hard drives are very sensitive to heat and can suffer serious damage if they exceed a certain temperature threshold for too long. Hard drives are very sensitive to heat and can suffer serious damage if they exceed a certain temperature threshold for too long.
@@ -5,7 +5,6 @@ description: A bash script that stops Docker containers before a Backrest backup
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Backrest Docker Stop
[Backrest](https://github.com/garethgeorge/backrest) is a fantastic backup tool. In the case of [Serveex](https://docu.djeex.fr/en/serveex/introduction), most of the data that needs to be backed up consists of containers, and those containers often include databases. [Backrest](https://github.com/garethgeorge/backrest) is a fantastic backup tool. In the case of [Serveex](https://docu.djeex.fr/en/serveex/introduction), most of the data that needs to be backed up consists of containers, and those containers often include databases.
@@ -1,18 +1,10 @@
--- ---
title: Wireguard 14 title: Wireguard 14
description: Archived guide to installing WireGuard VPN using linuxserver.io's older wireguard image, kept for reference only.
--- ---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Wireguard
::note
🎯 __Goals:__
- Install Wireguard
- Configure clients
- Access the secure network
::
## Introduction ## Introduction
Using a VPN allows remote access to a servers local resources without exposing them to the internet. Its a clean and secure way to access services like SSH without exposing the port publicly. With a VPN, you can securely connect to your network from anywhere and make devices on different networks communicate. Using a VPN allows remote access to a servers local resources without exposing them to the internet. Its a clean and secure way to access services like SSH without exposing the port publicly. With a VPN, you can securely connect to your network from anywhere and make devices on different networks communicate.
@@ -74,6 +66,9 @@ tree:
The container runs in `HOST` mode, meaning it uses the hosts network stack directly. The container runs in `HOST` mode, meaning it uses the hosts network stack directly.
::steps{level="3"}
### Deploy the stack
Open Dockge, click `compose`, and name the stack `wg_easy`. Open Dockge, click `compose`, and name the stack `wg_easy`.
Paste the following configuration: Paste the following configuration:
@@ -139,6 +134,9 @@ IPS=
Deploy the stack. Deploy the stack.
### Done !
::
### Enable Forwarding on Host ### Enable Forwarding on Host
To allow communication between VPN clients, enable: To allow communication between VPN clients, enable:
@@ -180,6 +178,9 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Create the config folder
Create the folder `/docker/wireguard/config/wg_confs`: Create the folder `/docker/wireguard/config/wg_confs`:
::tip{icon=""} ::tip{icon=""}
@@ -190,6 +191,8 @@ Create the folder `/docker/wireguard/config/wg_confs`:
sudo mkdir -p /docker/wireguard/config/wg_confs sudo mkdir -p /docker/wireguard/config/wg_confs
``` ```
### Copy the configuration file
Copy the `wg0.conf` file downloaded earlier: Copy the `wg0.conf` file downloaded earlier:
::tip{icon=""} ::tip{icon=""}
@@ -200,6 +203,8 @@ sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs
``` ```
:: ::
### Deploy the container
Create `compose.yaml` in `/docker/wireguard`: Create `compose.yaml` in `/docker/wireguard`:
```bash [Terminal] ```bash [Terminal]
@@ -240,6 +245,9 @@ sudo docker compose up -d
Repeat for each client Repeat for each client
:: ::
### Done !
::
## Other Devices ## Other Devices
- **Phone:** Install Wireguard and scan the QR code from the web UI (`http://your-server-ip:51821`) - **Phone:** Install Wireguard and scan the QR code from the web UI (`http://your-server-ip:51821`)
@@ -5,20 +5,16 @@ description: Install File Browser to browse and manage your server files from a
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# File Browser
::note
🎯 __Objectives:__
- Install File Browser
- Expose File Browser using Swag
::
[File Browser](https://github.com/filebrowser/filebrowser) is a web-based interface that lets you access and edit the files on your server. [File Browser](https://github.com/filebrowser/filebrowser) is a web-based interface that lets you access and edit the files on your server.
![File Browser](/img/serveex/filebrowser.png) ![File Browser](/img/serveex/filebrowser.png)
## Installation ## Installation
::steps{level="3"}
### Deploy the stack
Open Dockge, click on `compose`, name the stack `filebrowser`, then copy and paste the following: Open Dockge, click on `compose`, name the stack `filebrowser`, then copy and paste the following:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -49,6 +45,9 @@ services:
Deploy the container and go to `http://yourserverip:8010`. Thats it! Your File Browser web UI is up and running! Deploy the container and go to `http://yourserverip:8010`. Thats it! Your File Browser web UI is up and running!
### Done !
::
::caution ::caution
__If it doesnt work:__ check your firewall rules. __If it doesnt work:__ check your firewall rules.
@@ -68,6 +67,9 @@ You may want to access File Browser remotely from all your devices. To do that,
__Pre-requisite:__ We assume you've already created a subdomain like `files.yourdomain.com` in your [DNS zone](/general/networking/dns) pointing to `yourdomain.com` with a `CNAME`. Unless you're using Cloudflare Zero Trust, we also assume you've already forwarded port `443` on your router to port `443` on your server using [NAT rules](/general/networking/nat). __Pre-requisite:__ We assume you've already created a subdomain like `files.yourdomain.com` in your [DNS zone](/general/networking/dns) pointing to `yourdomain.com` with a `CNAME`. Unless you're using Cloudflare Zero Trust, we also assume you've already forwarded port `443` on your router to port `443` on your server using [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add File Browser's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file to add File Browsers network: In Dockge, go to the SWAG stack and edit the compose file to add File Browsers network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -94,6 +96,8 @@ Here, we assume the network name for File Browser is `filebrowser_default`. You
Restart the stack by clicking "deploy" and wait for SWAG to fully initialize. Restart the stack by clicking "deploy" and wait for SWAG to fully initialize.
### Create the subdomain.conf file
In the Swag folders, create the file `files.subdomain.conf`. In the Swag folders, create the file `files.subdomain.conf`.
```bash [Terminal] ```bash [Terminal]
@@ -154,6 +158,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
Thats it! File Browser is now exposed! Thats it! File Browser is now exposed!
## Protecting File Browser with TinyAuth ## Protecting File Browser with TinyAuth
+18 -9
View File
@@ -5,15 +5,6 @@ description: Install Plex Media Server with Tautulli on your homelab to stream m
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Plex
::note
🎯 **Objectives:**
- Install Plex
- Install Tautulli
- Access media from outside your network
::
[Plex](https://www.plex.tv/fr/) is a self-hosted video streaming platform for managing your movie or TV show library and playing them locally or remotely. Plex has apps for TV, Android, iOS, Windows, and macOS, allowing you to stream your library just like Netflix. [Plex](https://www.plex.tv/fr/) is a self-hosted video streaming platform for managing your movie or TV show library and playing them locally or remotely. Plex has apps for TV, Android, iOS, Windows, and macOS, allowing you to stream your library just like Netflix.
@@ -52,12 +43,17 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Create the media folders
Create the `movies`, `tvseries`, and `library` folders in `/media`: Create the `movies`, `tvseries`, and `library` folders in `/media`:
```bash [Terminal] ```bash [Terminal]
mkdir -p /media/movies /media/library /media/tvseries mkdir -p /media/movies /media/library /media/tvseries
``` ```
### Deploy the stack
Open Dockge in your browser and click `compose`. Open Dockge in your browser and click `compose`.
Name the stack `plex` and add the following config: Name the stack `plex` and add the following config:
@@ -115,6 +111,8 @@ services:
``` ```
:: ::
### Set your environment variables
Find your PUID and GUID by running: Find your PUID and GUID by running:
```bash [Terminal] ```bash [Terminal]
@@ -138,6 +136,9 @@ Tautulli is accessible at `http://yourserverip:8181`.
You must be on your local network during Plex's initial setup. Otherwise, the URL will redirect to your Plex account without detecting your server. A VPN won't help. If you have no choice, [you can handle the setup remotely via SSH tunnel](https://support.plex.tv/articles/200288586-installation/#toc-2). You must be on your local network during Plex's initial setup. Otherwise, the URL will redirect to your Plex account without detecting your server. A VPN won't help. If you have no choice, [you can handle the setup remotely via SSH tunnel](https://support.plex.tv/articles/200288586-installation/#toc-2).
:: ::
### Done !
::
## Configure Plex ## Configure Plex
Plex offers a range of free movies/shows. After creating your account, I recommend disabling everything in the _Online Services_ section to keep your library clean. Plex offers a range of free movies/shows. After creating your account, I recommend disabling everything in the _Online Services_ section to keep your library clean.
@@ -176,6 +177,9 @@ However, you may want to expose Tautulli so you can view stats from a simple URL
We assume you have the subdomain `tautulli.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/general/networking/dns). And of course, [unless you use Cloudflare Zero Trust](/serveex/security/cloudflare), your box's port `443` must be forwarded to your server's port `443` in [NAT rules](/general/networking/nat). We assume you have the subdomain `tautulli.mydomain.com` with a `CNAME` pointing to `mydomain.com` in your [DNS zone](/general/networking/dns). And of course, [unless you use Cloudflare Zero Trust](/serveex/security/cloudflare), your box's port `443` must be forwarded to your server's port `443` in [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add Tautulli's network to SWAG
Go to Dockge and edit SWAGs compose file by adding Tautullis network: Go to Dockge and edit SWAGs compose file by adding Tautullis network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -202,6 +206,8 @@ Redeploy the stack and wait for SWAG to be fully operational.
Here we assume the Tautulli network name is `tautulli_default`. You can check the connection by visiting SWAGs dashboard at `http://yourserverip:81`. Here we assume the Tautulli network name is `tautulli_default`. You can check the connection by visiting SWAGs dashboard at `http://yourserverip:81`.
:: ::
### Create the subdomain.conf file
Copy and rename the file `tautulli.subdomain.conf.sample` to `tautulli.subdomain.conf`, then edit it: Copy and rename the file `tautulli.subdomain.conf.sample` to `tautulli.subdomain.conf`, then edit it:
::tip{icon=""} ::tip{icon=""}
@@ -300,6 +306,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
Wait a few minutes, then open `http://tautulli.mydomain.com` in your browser. Wait a few minutes, then open `http://tautulli.mydomain.com` in your browser.
::caution ::caution
@@ -5,14 +5,6 @@ description: Install qBittorrent with Gluetun and ProtonVPN to download torrents
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Qbittorrent
::note
🎯 __Goals:__
- Install and configure Qbittorrent
- Securely connect to the BitTorrent network using Gluetun and Proton VPN
::
![Picture](/img/serveex/qbit-vue.jpeg) ![Picture](/img/serveex/qbit-vue.jpeg)
@@ -48,12 +40,17 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Create the downloads folder
If not already done, create the `downloads` folder under `/media`: If not already done, create the `downloads` folder under `/media`:
```bash [Terminal] ```bash [Terminal]
mkdir -P /media/downloads mkdir -P /media/downloads
``` ```
### Deploy the stack
Open Dockge, click on `compose`, and name the stack `seedbox`. Paste the following config: Open Dockge, click on `compose`, and name the stack `seedbox`. Paste the following config:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -122,6 +119,8 @@ services:
``` ```
:: ::
### Configure the port-forwarding sync
Before editing the `.env` in Dockge, let's configure the download port update. Proton and most VPNs rotate the forwarding port, which must be communicated to Qbittorrent. Before editing the `.env` in Dockge, let's configure the download port update. Proton and most VPNs rotate the forwarding port, which must be communicated to Qbittorrent.
Weve added the mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` to the container. Weve added the mod `ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod` to the container.
@@ -158,6 +157,8 @@ apikey = "your_key_here" # key you just generated
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Set your environment variables
In Dockge, fill in the variables in `.env`: In Dockge, fill in the variables in `.env`:
```properties [.env] ```properties [.env]
@@ -182,7 +183,14 @@ Detailed info:
| `ID` | Qbittorrent UI login username | `user` | | `ID` | Qbittorrent UI login username | `user` |
| `PW` | Qbittorrent UI password | `password` | | `PW` | Qbittorrent UI password | `password` |
### Done !
::
## Deployment ## Deployment
::steps{level="3"}
### Deploy the container
Once done, deploy the container. Once done, deploy the container.
::warning ::warning
@@ -190,6 +198,8 @@ Once done, deploy the container.
**Startup logs will show a temporary password for `admin` user** **Startup logs will show a temporary password for `admin` user**
:: ::
### Log in and secure your account
Login at `http://server-ip:5695` (or the port you set). Login at `http://server-ip:5695` (or the port you set).
::caution ::caution
@@ -199,6 +209,9 @@ __If login fails:__ check your firewall rules.
Change your username and password in the "webui" settings. Change your username and password in the "webui" settings.
### Done !
::
You're done! In Qbittorrent settings, under "Downloads", set `/media/downloads` as the default folder. You're done! In Qbittorrent settings, under "Downloads", set `/media/downloads` as the default folder.
When adding a download, remember to select the proper directory so Plex can sync correctly (`/media/movies` or `/media/tvseries`). You can also automate this with categories and folders. When adding a download, remember to select the proper directory so Plex can sync correctly (`/media/movies` or `/media/tvseries`). You can also automate this with categories and folders.
@@ -217,6 +230,9 @@ To start downloads from outside your home, without a VPN, you can expose the Qbi
We assume you have the subdomain `seedbox.mydomain.com` with a `CNAME` pointing to `mydomain.com` in [DNS zone](/general/networking/dns). And that port `443` on your router is forwarded to your server in [NAT rules](/general/networking/nat), unless youre using Cloudflare Zero Trust. We assume you have the subdomain `seedbox.mydomain.com` with a `CNAME` pointing to `mydomain.com` in [DNS zone](/general/networking/dns). And that port `443` on your router is forwarded to your server in [NAT rules](/general/networking/nat), unless youre using Cloudflare Zero Trust.
:: ::
::steps{level="3"}
### Add the seedbox network to SWAG
In Dockge, edit the SWAG compose file and add Gluetuns network: In Dockge, edit the SWAG compose file and add Gluetuns network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -243,6 +259,8 @@ Click "Deploy" and wait for SWAG to fully initialize.
We assume the network name is `seedbox_default`. You can confirm by checking the SWAG dashboard at http://server-ip:81. We assume the network name is `seedbox_default`. You can confirm by checking the SWAG dashboard at http://server-ip:81.
:: ::
### Create the subdomain.conf file
Now create/edit `seedbox.subdomain.conf`. Now create/edit `seedbox.subdomain.conf`.
::tip{icon=""} ::tip{icon=""}
@@ -312,6 +330,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
Wait a few minutes, then go to `https://seedbox.mydomain.com`. You should land on the Qbittorrent interface. Wait a few minutes, then go to `https://seedbox.mydomain.com`. You should land on the Qbittorrent interface.
And thats it! You now have a ready-to-use media center. And thats it! You now have a ready-to-use media center.
@@ -5,13 +5,6 @@ description: Automate media downloads with the Servarr stack, Radarr, Sonarr, Ba
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Servarr
::note
🎯 __Goals:__
Automate movie and TV show downloads using Radarr, Sonarr, Bazarr, Prowlarr, and Overseerr.
::
[Servarr](https://wiki.servarr.com/) is a suite of applications developed to automate the downloading, updating, and management of media. Here, we'll focus on movies and TV shows with the goal of: [Servarr](https://wiki.servarr.com/) is a suite of applications developed to automate the downloading, updating, and management of media. Here, we'll focus on movies and TV shows with the goal of:
@@ -26,8 +19,6 @@ Well start by deploying the stack and then proceed to configure each app and
## Install the Apps ## Install the Apps
### Docker Compose
::file-tree ::file-tree
--- ---
tree: tree:
@@ -64,6 +55,9 @@ If not, the _arr_ apps may not recognize the path provided by Qbittorrent and wi
Without hardlinks, the _arr_ apps will copy the files instead, **doubling the space used** on your storage. Without hardlinks, the _arr_ apps will copy the files instead, **doubling the space used** on your storage.
:: ::
::steps{level="3"}
### Deploy the stack
Open Docker and your `plex` stack. Modify the compose file as follows: Open Docker and your `plex` stack. Modify the compose file as follows:
```yaml [compose.yaml] ```yaml [compose.yaml]
--- ---
@@ -191,6 +185,8 @@ services:
``` ```
:: ::
### Set your environment variables
Set your `.env` file with the variables below: Set your `.env` file with the variables below:
```properties [.env] ```properties [.env]
@@ -207,6 +203,9 @@ MEDIA_PATH=
Deploy the stack. Deploy the stack.
### Done !
::
### Configure Radarr ### Configure Radarr
Radarr queries your torrent sources and lets you define the type of releases to prioritize. It can also upgrade your movies if a better version is available. Radarr queries your torrent sources and lets you define the type of releases to prioritize. It can also upgrade your movies if a better version is available.
@@ -220,7 +219,8 @@ __If it fails:__ check your firewall rules.
Create an account and choose *forms login*. Create an account and choose *forms login*.
##### Add a *root folder* ::steps{level="4"}
#### Add a *root folder*
- Go to *Settings > Media Management*. - Go to *Settings > Media Management*.
- Add a root folder and select `/media/movies`. - Add a root folder and select `/media/movies`.
@@ -230,13 +230,13 @@ Create an account and choose *forms login*.
__Warning:__ If you already have movies in `movies` from Qbittorrent, do not let Radarr add them. Radarr might modify them, which could stop seeding in Qbittorrent. __Warning:__ If you already have movies in `movies` from Qbittorrent, do not let Radarr add them. Radarr might modify them, which could stop seeding in Qbittorrent.
:: ::
##### Configure Profiles #### Configure Profiles
Go to *Settings > Profiles*. These are your default quality profiles. When you make a request, you're selecting one of these. For example, configure the “any” profile by unchecking everything except what is shown in the image and ordering them accordingly. This makes Radarr search for 4K REMUX first, then go down the list if unavailable. Go to *Settings > Profiles*. These are your default quality profiles. When you make a request, you're selecting one of these. For example, configure the “any” profile by unchecking everything except what is shown in the image and ordering them accordingly. This makes Radarr search for 4K REMUX first, then go down the list if unavailable.
![profiles_radarr](/img/serveex/radarr1.png) ![profiles_radarr](/img/serveex/radarr1.png)
##### Add Qbittorrent #### Add Qbittorrent
In *Settings > Download Clients*, add Qbittorrent. In *Settings > Download Clients*, add Qbittorrent.
@@ -245,7 +245,7 @@ In *Settings > Download Clients*, add Qbittorrent.
- Click *Test*. - Click *Test*.
- If successful, click *Save*. - If successful, click *Save*.
##### Connect to Plex #### Connect to Plex
Go to *Settings > Connect*, add a new connection and choose *Plex Media Server*. Go to *Settings > Connect*, add a new connection and choose *Plex Media Server*.
@@ -254,10 +254,13 @@ Go to *Settings > Connect*, add a new connection and choose *Plex Media Server*.
- Click the blue "authenticate with Plex.tv" button and log into Plex. - Click the blue "authenticate with Plex.tv" button and log into Plex.
- Press *Test*, then *Save* if successful. - Press *Test*, then *Save* if successful.
##### Get API Key for Prowlarr and Overseerr #### Get API Key for Prowlarr and Overseerr
- Go to *Settings > General* and copy your *API Key* for later use. - Go to *Settings > General* and copy your *API Key* for later use.
#### Done !
::
### Configure Sonarr ### Configure Sonarr
Sonarr queries torrent sources and defines what kind of TV series releases to prioritize. It also upgrades series when better versions are available. Sonarr queries torrent sources and defines what kind of TV series releases to prioritize. It also upgrades series when better versions are available.
@@ -281,11 +284,12 @@ Go to `http://yourserverip:9696` and create an account, using *forms login*.
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
:: ::
##### Add an Indexer ::steps{level="4"}
#### Add an Indexer
- Go to the *Indexers* section and add your torrent indexer. - Go to the *Indexers* section and add your torrent indexer.
##### Add Radarr and Sonarr #### Add Radarr and Sonarr
In *Settings > Apps*, add Radarr and Sonarr with the following details: In *Settings > Apps*, add Radarr and Sonarr with the following details:
@@ -294,6 +298,9 @@ In *Settings > Apps*, add Radarr and Sonarr with the following details:
- API Key: use the one copied from Radarr and Sonarr. - API Key: use the one copied from Radarr and Sonarr.
- Click *Test*, then *Save* if all goes well. - Click *Test*, then *Save* if all goes well.
#### Done !
::
### Configuring Bazarr ### Configuring Bazarr
Bazarr is an app that automatically searches for the correct subtitles in your preferred languages for all the movies and TV shows added by Radarr and Sonarr. Bazarr is an app that automatically searches for the correct subtitles in your preferred languages for all the movies and TV shows added by Radarr and Sonarr.
@@ -306,6 +313,7 @@ __If it fails:__ check your firewall rules.
Go to *Settings > General* and create a username and password using *forms login*. Go to *Settings > General* and create a username and password using *forms login*.
::steps{level="4"}
#### Add a Language Profile #### Add a Language Profile
- In *Settings > Languages*, click the pink *Add new profile* button and name it. - In *Settings > Languages*, click the pink *Add new profile* button and name it.
@@ -335,6 +343,9 @@ Go to *Settings > General* and create a username and password using *forms login
Repeat the same steps for Radarr. Repeat the same steps for Radarr.
#### Done !
::
### Configuring Overseerr ### Configuring Overseerr
[Overseerr](https://overseerr.dev/) is an app that lets you browse a movie catalog and send requests to Sonarr and Radarr. Just browse movies or series, click *Request*, and the media will automatically be downloaded according to your Radarr or Sonarr settings. If the title hasnt been released yet, it will be downloaded automatically when available. This way, episodes of a series appear in Plex without any manual intervention. [Overseerr](https://overseerr.dev/) is an app that lets you browse a movie catalog and send requests to Sonarr and Radarr. Just browse movies or series, click *Request*, and the media will automatically be downloaded according to your Radarr or Sonarr settings. If the title hasnt been released yet, it will be downloaded automatically when available. This way, episodes of a series appear in Plex without any manual intervention.
@@ -348,7 +359,8 @@ Go to `http://yourserverip:5055` and log in with your Plex account.
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
:: ::
#### Add Radarr and Sonarr ::steps{level="4"}
#### Add Radarr
When prompted, add a Radarr server: When prompted, add a Radarr server:
@@ -367,6 +379,8 @@ If the test succeeds, continue filling in the fields:
- Check all 3 boxes at the bottom. - Check all 3 boxes at the bottom.
- Save and continue. - Save and continue.
#### Add Sonarr
Now do the same for Sonarr: Now do the same for Sonarr:
- Check *Default server*. - Check *Default server*.
@@ -384,6 +398,9 @@ If the test succeeds, continue filling in the fields:
- Check all 4 boxes at the bottom. - Check all 4 boxes at the bottom.
- Save and continue. - Save and continue.
#### Done !
::
And thats it! Just request a movie or series, then check in qBittorrent or Radarr/Sonarr. Within a few minutes, your media will be available on Plex! And thats it! Just request a movie or series, then check in qBittorrent or Radarr/Sonarr. Within a few minutes, your media will be available on Plex!
## Exposing Overseerr with SWAG ## Exposing Overseerr with SWAG
@@ -395,6 +412,9 @@ It can be useful to expose Overseerr if you want to send requests from outside y
We assume you have the subdomain `films.mydomain.com` with a `CNAME` pointing to `films.fr` in your [DNS zone](/general/networking/dns). And that [unless youre using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat). We assume you have the subdomain `films.mydomain.com` with a `CNAME` pointing to `films.fr` in your [DNS zone](/general/networking/dns). And that [unless youre using Cloudflare Zero Trust](/serveex/security/cloudflare), port `443` on your router is forwarded to port `443` on your server via [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add Overseerr's network to SWAG
Go to Dockge, edit the SWAG compose file, and add the Overseerr network, which is the same as Plex (since its in the Plex stack): Go to Dockge, edit the SWAG compose file, and add the Overseerr network, which is the same as Plex (since its in the Plex stack):
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -421,6 +441,8 @@ Restart the stack by clicking “Deploy” and wait until SWAG is fully operatio
Here we assume the Tautulli network is named `plex_default`. You can verify the connection works by visiting the SWAG dashboard at `http://yourserverip:81`. Here we assume the Tautulli network is named `plex_default`. You can verify the connection works by visiting the SWAG dashboard at `http://yourserverip:81`.
:: ::
### Create the subdomain.conf file
Create and edit the file `films.subdomain.conf`: Create and edit the file `films.subdomain.conf`:
::tip{icon=""} ::tip{icon=""}
@@ -494,6 +516,9 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Done !
::
Wait a few minutes, then visit `http://films.mydomain.com` in your browser. Wait a few minutes, then visit `http://films.mydomain.com` in your browser.
::caution ::caution
@@ -5,14 +5,6 @@ description: Install Gitea, a lightweight self-hosted Git service to manage your
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60} :ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
# Gitea
::note
🎯 __Goals:__
- Install Gitea
- Expose Gitea using Swag
::
[Gitea](https://about.gitea.com/) is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure. [Gitea](https://about.gitea.com/) is a self-hosted DevOps platform that allows you to manage repositories much like GitHub, but on your own infrastructure.
@@ -30,6 +22,9 @@ tree:
--- ---
:: ::
::steps{level="3"}
### Deploy the stack
Open Dockge, click on `compose`, name the stack `gitea`, and paste the following content: Open Dockge, click on `compose`, name the stack `gitea`, and paste the following content:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -55,6 +50,8 @@ services:
- 222:22 - 222:22
``` ```
### Set your environment variables
Fill out the `.env` file with the required information, for example: Fill out the `.env` file with the required information, for example:
```properties [.env] ```properties [.env]
@@ -64,6 +61,9 @@ GID=1000
Deploy the container and go to `http://yourserverip:3333`. Your Gitea instance is now up and running! Deploy the container and go to `http://yourserverip:3333`. Your Gitea instance is now up and running!
### Done !
::
::caution ::caution
__If it fails:__ check your firewall rules. __If it fails:__ check your firewall rules.
@@ -77,6 +77,9 @@ The benefit of this setup is being able to access it remotely from any of your d
__Prerequisite:__ We assume you have created a subdomain such as `gitea.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` pointing to `yourdomain.com`, and [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), you have already forwarded port `443` from your router to your servers port `443` in the [NAT rules](/general/networking/nat). __Prerequisite:__ We assume you have created a subdomain such as `gitea.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` pointing to `yourdomain.com`, and [unless you're using Cloudflare Zero Trust](/serveex/security/cloudflare), you have already forwarded port `443` from your router to your servers port `443` in the [NAT rules](/general/networking/nat).
:: ::
::steps{level="3"}
### Add Gitea's network to SWAG
In Dockge, go to the SWAG stack and edit the compose file by adding Gitea's network: In Dockge, go to the SWAG stack and edit the compose file by adding Gitea's network:
```yaml [compose.yaml] ```yaml [compose.yaml]
@@ -103,6 +106,8 @@ We assume the Gitea network name is `gitea_default`. You can verify connectivity
Redeploy the stack by clicking "Deploy" and wait until SWAG is fully operational. Redeploy the stack by clicking "Deploy" and wait until SWAG is fully operational.
### Create the subdomain.conf file
Inside the Swag folders, create the file `gitea.subdomain.conf`. Inside the Swag folders, create the file `gitea.subdomain.conf`.
::tip{icon=""} ::tip{icon=""}
@@ -173,6 +178,8 @@ server {
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
### Configure Gitea's domain
Now open the `app.ini` file from the container's file system: Now open the `app.ini` file from the container's file system:
```bash [Terminal] ```bash [Terminal]
@@ -190,6 +197,9 @@ ROOT_URL = https://gitea.yourdomain.com/
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit, then restart the container. Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit, then restart the container.
### Done !
::
And thats it! Gitea is now exposed to the web. And thats it! Gitea is now exposed to the web.
::tip{icon=""} ::tip{icon=""}
Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB