diff --git a/content/en/3.serveex/3.security/3.pocket-id.md b/content/en/3.serveex/3.security/3.pocket-id.md
index 70f8816..8cf01bf 100644
--- a/content/en/3.serveex/3.security/3.pocket-id.md
+++ b/content/en/3.serveex/3.security/3.pocket-id.md
@@ -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.
+
+
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)
diff --git a/content/en/3.serveex/3.security/4.tinyauth.md b/content/en/3.serveex/3.security/4.tinyauth.md
index d13db04..02d1d70 100644
--- a/content/en/3.serveex/3.security/4.tinyauth.md
+++ b/content/en/3.serveex/3.security/4.tinyauth.md
@@ -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.
+
+
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)
diff --git a/content/en/3.serveex/5.media/1.jellyfin.md b/content/en/3.serveex/5.media/1.jellyfin.md
index 41efc8f..cfe111f 100644
--- a/content/en/3.serveex/5.media/1.jellyfin.md
+++ b/content/en/3.serveex/5.media/1.jellyfin.md
@@ -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}
+
+
[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.
diff --git a/content/en/3.serveex/7.files/3.file-browser-quantum.md b/content/en/3.serveex/7.files/1.file-browser-quantum.md
similarity index 92%
rename from content/en/3.serveex/7.files/3.file-browser-quantum.md
rename to content/en/3.serveex/7.files/1.file-browser-quantum.md
index dfed4ce..29e1ca9 100644
--- a/content/en/3.serveex/7.files/3.file-browser-quantum.md
+++ b/content/en/3.serveex/7.files/1.file-browser-quantum.md
@@ -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}
-# 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.
-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.
+
## Installation
@@ -33,6 +25,9 @@ tree:
---
::
+::steps{level="3"}
+### Create the config file
+
Create the data folder:
```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.
+### Deploy the stack
+
Open Dockge, click on `compose`, name the stack `filebrowser-quantum`, then copy and paste the following:
```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.
+### Done !
+::
+
::caution
__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.
-::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:
```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.
+### Create the subdomain.conf file
+
In the Swag folders, create the file `fbq.subdomain.conf`.
```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.
+### Done !
+::
+
That's it! File Browser Quantum is now exposed.
## Protecting File Browser Quantum with TinyAuth
diff --git a/content/en/3.serveex/7.files/2.pingvin.md b/content/en/3.serveex/7.files/2.pingvin.md
index 34a04f5..9c704f4 100644
--- a/content/en/3.serveex/7.files/2.pingvin.md
+++ b/content/en/3.serveex/7.files/2.pingvin.md
@@ -77,7 +77,7 @@ __If it fails:__ check your firewall rules.
## 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.
-::note
+::note{icon=""}
đź“‹ __Prerequisite:__
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).
::
diff --git a/content/en/3.serveex/8.development/1.code-server.md b/content/en/3.serveex/8.development/1.code-server.md
index ea9d003..d459995 100644
--- a/content/en/3.serveex/8.development/1.code-server.md
+++ b/content/en/3.serveex/8.development/1.code-server.md
@@ -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:
```yaml [compose.yaml]
@@ -73,6 +76,8 @@ services:
```
::
+### Set your environment variables
+
Choose a password and generate its hash:
```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!
+### Done !
+::
+
::caution
__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 you’ve 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 you’ve 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-server’s network:
```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.
+### Create the subdomain.conf file
+
Inside the Swag config folders, create the file `code.subdomain.conf`.
::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.
+### Done !
+::
+
That’s it! code-server is now exposed!
## Protecting code-server with TinyAuth
diff --git a/content/en/3.serveex/8.development/2.forgejo.md b/content/en/3.serveex/8.development/2.forgejo.md
index 198f6dc..5c0af1f 100644
--- a/content/en/3.serveex/8.development/2.forgejo.md
+++ b/content/en/3.serveex/8.development/2.forgejo.md
@@ -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}
-# 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.
+
+
## Installation
::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:
```yaml [compose.yaml]
@@ -55,6 +53,8 @@ services:
- 222:22
```
+### Set your environment variables
+
Fill out the `.env` file with the required information, for example:
```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!
+### Done !
+::
+
::caution
__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 server’s 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:
```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.
+### Create the subdomain.conf file
+
Inside the Swag folders, create the file `forgejo.subdomain.conf`.
::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.
+### Configure Forgejo's domain
+
Now open the `app.ini` file from the container's file system:
```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.
+### Done !
+::
+
And that’s it! Forgejo is now exposed to the web.
## Protecting Forgejo with Pocket ID
diff --git a/content/en/3.serveex/8.development/3.it-tools.md b/content/en/3.serveex/8.development/3.it-tools.md
index 6b43dad..da8ac27 100644
--- a/content/en/3.serveex/8.development/3.it-tools.md
+++ b/content/en/3.serveex/8.development/3.it-tools.md
@@ -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}
-# 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.
@@ -20,6 +12,9 @@ description: Install IT Tools, a self-hosted collection of handy utilities for d
## Installation
+::steps{level="3"}
+### Deploy the stack
+
Open Dockge, click on `compose`, name the stack `it-tools`, and paste the following:
```yaml [compose.yaml]
@@ -48,6 +43,9 @@ services:
Deploy the container and visit `http://yourserverip:3222`. That’s it, your IT Tools web UI instance is up and running!
+### Done !
+::
+
::caution
__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 you’ve created a subdomain like `tools.yourdomain.com` in your [DNS zone](/general/networking/dns) with `CNAME` set to `yourdomain.com`. Also, unless you’re using [Cloudflare Zero Trust](/serveex/security/cloudflare), make sure you’ve 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:
```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.
+### Create the subdomain.conf file
+
Inside the Swag folders, create the file `tools.subdomain.conf`.
::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.
+### Done !
+::
+
And that’s it! IT Tools is now exposed!
## Protecting IT Tools with TinyAuth
diff --git a/content/en/3.serveex/9.apps/1.adguard.md b/content/en/3.serveex/9.apps/1.adguard.md
index 79ac988..4d004dd 100644
--- a/content/en/3.serveex/9.apps/1.adguard.md
+++ b/content/en/3.serveex/9.apps/1.adguard.md
@@ -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}
-# 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.
@@ -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.
+
+
**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 doesn’t 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.
::
+::steps{level="3"}
+### Deploy the stack
+
Open Dockge and click `compose`
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.
+### Done !
+::
+
That’s it! Adguard is deployed.
## Exposing AdGuard with SWAG
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 you’ve 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 you’ve 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
@@ -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.
::
+::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:
```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.
+### Create the subdomain.conf file
+
Create and open the file `adguard.subdomain.conf`
::tip{icon=""}
@@ -226,6 +229,9 @@ server {
}
```
+### Done !
+::
+
## 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:
diff --git a/content/en/3.serveex/9.apps/2.vaultwarden.md b/content/en/3.serveex/9.apps/2.vaultwarden.md
index bbb9e1e..fae71d0 100644
--- a/content/en/3.serveex/9.apps/2.vaultwarden.md
+++ b/content/en/3.serveex/9.apps/2.vaultwarden.md
@@ -26,6 +26,9 @@ tree:
---
::
+::steps{level="3"}
+### Deploy the stack
+
Open Dockge, click on `compose`, name the stack `vaultwarden`, and paste the following:
```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`:
```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.
+### Done !
+::
+
::caution
__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).
::
+::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:
```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.
+### Create the subdomain.conf file
+
In SWAG's config folder, create the file `vault.subdomain.conf`:
::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.
+### 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/).
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.
diff --git a/content/en/5.nonsense/1.python/1.nvidia-stock-bot.md b/content/en/5.nonsense/1.python/1.nvidia-stock-bot.md
index c5bb3c4..0aca5b9 100644
--- a/content/en/5.nonsense/1.python/1.nvidia-stock-bot.md
+++ b/content/en/5.nonsense/1.python/1.nvidia-stock-bot.md
@@ -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}
-# 🤖 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.
diff --git a/content/en/5.nonsense/1.python/2.adguard-cidre.md b/content/en/5.nonsense/1.python/2.adguard-cidre.md
index 67baf9b..cbd4817 100644
--- a/content/en/5.nonsense/1.python/2.adguard-cidre.md
+++ b/content/en/5.nonsense/1.python/2.adguard-cidre.md
@@ -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}
-# 🤖 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.
diff --git a/content/en/5.nonsense/2.bash/1.servarr-duplicates.md b/content/en/5.nonsense/2.bash/1.servarr-duplicates.md
index 0e0a74a..b9ef2ba 100644
--- a/content/en/5.nonsense/2.bash/1.servarr-duplicates.md
+++ b/content/en/5.nonsense/2.bash/1.servarr-duplicates.md
@@ -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}
-# 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. That’s why you should mount only one parent folder containing all child folders (like `downloads`, `movies`, `tvseries` inside a `media` parent folder).
diff --git a/content/en/5.nonsense/2.bash/2.luks-backup.md b/content/en/5.nonsense/2.bash/2.luks-backup.md
index bf1f905..d2ab2ba 100644
--- a/content/en/5.nonsense/2.bash/2.luks-backup.md
+++ b/content/en/5.nonsense/2.bash/2.luks-backup.md
@@ -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}
-# 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!).
diff --git a/content/en/5.nonsense/2.bash/3.socat-proxy.md b/content/en/5.nonsense/2.bash/3.socat-proxy.md
index ee19160..50432cc 100644
--- a/content/en/5.nonsense/2.bash/3.socat-proxy.md
+++ b/content/en/5.nonsense/2.bash/3.socat-proxy.md
@@ -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}
-# Socat Proxy
-
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.
diff --git a/content/en/5.nonsense/2.bash/4.hotdisk.md b/content/en/5.nonsense/2.bash/4.hotdisk.md
index 3dafb61..0b380cf 100644
--- a/content/en/5.nonsense/2.bash/4.hotdisk.md
+++ b/content/en/5.nonsense/2.bash/4.hotdisk.md
@@ -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}
-# HotDisk
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.
diff --git a/content/en/5.nonsense/2.bash/5.backrest-docker-stop.md b/content/en/5.nonsense/2.bash/5.backrest-docker-stop.md
index 922fae5..63a7cab 100644
--- a/content/en/5.nonsense/2.bash/5.backrest-docker-stop.md
+++ b/content/en/5.nonsense/2.bash/5.backrest-docker-stop.md
@@ -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}
-# 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.
diff --git a/content/en/6.recycled/1.deprecated/1.wireguard-14.md b/content/en/6.recycled/1.deprecated/1.wireguard-14.md
index 8038250..534ced6 100644
--- a/content/en/6.recycled/1.deprecated/1.wireguard-14.md
+++ b/content/en/6.recycled/1.deprecated/1.wireguard-14.md
@@ -1,18 +1,10 @@
---
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}
-# Wireguard
-
-::note
-🎯 __Goals:__
-
- - Install Wireguard
- - Configure clients
- - Access the secure network
-::
## Introduction
Using a VPN allows remote access to a server’s local resources without exposing them to the internet. It’s 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 host’s network stack directly.
+::steps{level="3"}
+### Deploy the stack
+
Open Dockge, click `compose`, and name the stack `wg_easy`.
Paste the following configuration:
@@ -139,6 +134,9 @@ IPS=
Deploy the stack.
+### Done !
+::
+
### Enable Forwarding on Host
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`:
::tip{icon=""}
@@ -190,6 +191,8 @@ Create the folder `/docker/wireguard/config/wg_confs`:
sudo mkdir -p /docker/wireguard/config/wg_confs
```
+### Copy the configuration file
+
Copy the `wg0.conf` file downloaded earlier:
::tip{icon=""}
@@ -200,6 +203,8 @@ sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs
```
::
+### Deploy the container
+
Create `compose.yaml` in `/docker/wireguard`:
```bash [Terminal]
@@ -240,6 +245,9 @@ sudo docker compose up -d
Repeat for each client
::
+### Done !
+::
+
## Other Devices
- **Phone:** Install Wireguard and scan the QR code from the web UI (`http://your-server-ip:51821`)
diff --git a/content/en/6.recycled/1.deprecated/2.file-browser.md b/content/en/6.recycled/1.deprecated/2.file-browser.md
index 9dd99e1..aae2259 100644
--- a/content/en/6.recycled/1.deprecated/2.file-browser.md
+++ b/content/en/6.recycled/1.deprecated/2.file-browser.md
@@ -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}
-# 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.

## Installation
+
+::steps{level="3"}
+### Deploy the stack
+
Open Dockge, click on `compose`, name the stack `filebrowser`, then copy and paste the following:
```yaml [compose.yaml]
@@ -49,6 +45,9 @@ services:
Deploy the container and go to `http://yourserverip:8010`. That’s it! Your File Browser web UI is up and running!
+### Done !
+::
+
::caution
__If it doesn’t 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).
::
+::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 Browser’s network:
```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.
+### Create the subdomain.conf file
+
In the Swag folders, create the file `files.subdomain.conf`.
```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.
+### Done !
+::
+
That’s it! File Browser is now exposed!
## Protecting File Browser with TinyAuth
diff --git a/content/en/6.recycled/2.alternatives/1.plex.md b/content/en/6.recycled/2.alternatives/1.plex.md
index 2484bdd..a2629c0 100644
--- a/content/en/6.recycled/2.alternatives/1.plex.md
+++ b/content/en/6.recycled/2.alternatives/1.plex.md
@@ -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}
-# 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.
@@ -52,12 +43,17 @@ tree:
---
::
+::steps{level="3"}
+### Create the media folders
+
Create the `movies`, `tvseries`, and `library` folders in `/media`:
```bash [Terminal]
mkdir -p /media/movies /media/library /media/tvseries
```
+### Deploy the stack
+
Open Dockge in your browser and click `compose`.
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:
```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).
::
+### Done !
+::
+
## 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.
@@ -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).
::
+::steps{level="3"}
+### Add Tautulli's network to SWAG
+
Go to Dockge and edit SWAG’s compose file by adding Tautulli’s network:
```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 SWAG’s 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:
::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.
+### Done !
+::
+
Wait a few minutes, then open `http://tautulli.mydomain.com` in your browser.
::caution
diff --git a/content/en/6.recycled/2.alternatives/2.qbittorrent for plex.md b/content/en/6.recycled/2.alternatives/2.qbittorrent for plex.md
index 0e9c3bb..f935afe 100644
--- a/content/en/6.recycled/2.alternatives/2.qbittorrent for plex.md
+++ b/content/en/6.recycled/2.alternatives/2.qbittorrent for plex.md
@@ -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}
-# Qbittorrent
-
-::note
-🎯 __Goals:__
-
-- Install and configure Qbittorrent
-- Securely connect to the BitTorrent network using Gluetun and Proton VPN
-::

@@ -48,12 +40,17 @@ tree:
---
::
+::steps{level="3"}
+### Create the downloads folder
+
If not already done, create the `downloads` folder under `/media`:
```bash [Terminal]
mkdir -P /media/downloads
```
+### Deploy the stack
+
Open Dockge, click on `compose`, and name the stack `seedbox`. Paste the following config:
```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.
We’ve 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.
+### Set your environment variables
+
In Dockge, fill in the variables in `.env`:
```properties [.env]
@@ -182,7 +183,14 @@ Detailed info:
| `ID` | Qbittorrent UI login username | `user` |
| `PW` | Qbittorrent UI password | `password` |
+### Done !
+::
+
## Deployment
+
+::steps{level="3"}
+### Deploy the container
+
Once done, deploy the container.
::warning
@@ -190,6 +198,8 @@ Once done, deploy the container.
**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).
::caution
@@ -199,6 +209,9 @@ __If login fails:__ check your firewall rules.
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.
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 you’re using Cloudflare Zero Trust.
::
+::steps{level="3"}
+### Add the seedbox network to SWAG
+
In Dockge, edit the SWAG compose file and add Gluetun’s network:
```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.
::
+### Create the subdomain.conf file
+
Now create/edit `seedbox.subdomain.conf`.
::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.
+### Done !
+::
+
Wait a few minutes, then go to `https://seedbox.mydomain.com`. You should land on the Qbittorrent interface.
And that’s it! You now have a ready-to-use media center.
diff --git a/content/en/6.recycled/2.alternatives/3.servarr for plex.md b/content/en/6.recycled/2.alternatives/3.servarr for plex.md
index ded99e7..b12d1cc 100644
--- a/content/en/6.recycled/2.alternatives/3.servarr for plex.md
+++ b/content/en/6.recycled/2.alternatives/3.servarr for plex.md
@@ -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}
-# 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:
@@ -26,8 +19,6 @@ We’ll start by deploying the stack and then proceed to configure each app and
## Install the Apps
-### Docker Compose
-
::file-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.
::
+::steps{level="3"}
+### Deploy the stack
+
Open Docker and your `plex` stack. Modify the compose file as follows:
```yaml [compose.yaml]
---
@@ -191,6 +185,8 @@ services:
```
::
+### Set your environment variables
+
Set your `.env` file with the variables below:
```properties [.env]
@@ -207,6 +203,9 @@ MEDIA_PATH=
Deploy the stack.
+### Done !
+::
+
### 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.
@@ -220,7 +219,8 @@ __If it fails:__ check your firewall rules.
Create an account and choose *forms login*.
-##### Add a *root folder*
+::steps{level="4"}
+#### Add a *root folder*
- Go to *Settings > Media Management*.
- 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.
::
-##### 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.

-##### Add Qbittorrent
+#### Add Qbittorrent
In *Settings > Download Clients*, add Qbittorrent.
@@ -245,7 +245,7 @@ In *Settings > Download Clients*, add Qbittorrent.
- Click *Test*.
- If successful, click *Save*.
-##### Connect to Plex
+#### Connect to Plex
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.
- 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.
+#### Done !
+::
+
### 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.
@@ -281,11 +284,12 @@ Go to `http://yourserverip:9696` and create an account, using *forms login*.
__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.
-##### Add Radarr and Sonarr
+#### Add Radarr and Sonarr
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.
- Click *Test*, then *Save* if all goes well.
+#### Done !
+::
+
### 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.
@@ -306,6 +313,7 @@ __If it fails:__ check your firewall rules.
Go to *Settings > General* and create a username and password using *forms login*.
+::steps{level="4"}
#### Add a Language Profile
- 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.
+#### Done !
+::
+
### 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 hasn’t 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.
::
-#### Add Radarr and Sonarr
+::steps{level="4"}
+#### Add Radarr
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.
- Save and continue.
+#### Add Sonarr
+
Now do the same for Sonarr:
- Check *Default server*.
@@ -384,6 +398,9 @@ If the test succeeds, continue filling in the fields:
- Check all 4 boxes at the bottom.
- Save and continue.
+#### Done !
+::
+
And that’s 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
@@ -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 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).
::
+::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 it’s in the Plex stack):
```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`.
::
+### Create the subdomain.conf file
+
Create and edit the file `films.subdomain.conf`:
::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.
+### Done !
+::
+
Wait a few minutes, then visit `http://films.mydomain.com` in your browser.
::caution
diff --git a/content/en/6.recycled/2.alternatives/4.gitea.md b/content/en/6.recycled/2.alternatives/4.gitea.md
index ef43fca..6d15d41 100644
--- a/content/en/6.recycled/2.alternatives/4.gitea.md
+++ b/content/en/6.recycled/2.alternatives/4.gitea.md
@@ -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}
-# 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.
@@ -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:
```yaml [compose.yaml]
@@ -55,6 +50,8 @@ services:
- 222:22
```
+### Set your environment variables
+
Fill out the `.env` file with the required information, for example:
```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!
+### Done !
+::
+
::caution
__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 server’s 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:
```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.
+### Create the subdomain.conf file
+
Inside the Swag folders, create the file `gitea.subdomain.conf`.
::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.
+### Configure Gitea's domain
+
Now open the `app.ini` file from the container's file system:
```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.
+### Done !
+::
+
And that’s it! Gitea is now exposed to the web.
::tip{icon=""}
diff --git a/public/img/serveex/adguard.png b/public/img/serveex/adguard.png
new file mode 100644
index 0000000..364c36f
Binary files /dev/null and b/public/img/serveex/adguard.png differ
diff --git a/public/img/serveex/filebrowser-quantum.png b/public/img/serveex/filebrowser-quantum.png
new file mode 100644
index 0000000..b991532
Binary files /dev/null and b/public/img/serveex/filebrowser-quantum.png differ
diff --git a/public/img/serveex/forgejo.png b/public/img/serveex/forgejo.png
new file mode 100644
index 0000000..b2730d8
Binary files /dev/null and b/public/img/serveex/forgejo.png differ
diff --git a/public/img/serveex/jellyfin.png b/public/img/serveex/jellyfin.png
new file mode 100644
index 0000000..01ce26c
Binary files /dev/null and b/public/img/serveex/jellyfin.png differ
diff --git a/public/img/serveex/pocketid.png b/public/img/serveex/pocketid.png
new file mode 100644
index 0000000..8105e9b
Binary files /dev/null and b/public/img/serveex/pocketid.png differ
diff --git a/public/img/serveex/tinyauth.png b/public/img/serveex/tinyauth.png
new file mode 100644
index 0000000..1eb4acb
Binary files /dev/null and b/public/img/serveex/tinyauth.png differ