Author SHA1 Message Date
Djeex 3529834d95 Fixed deprecated path in qbittorent.md 2026-08-25 10:30:54 +00:00
Djeex fd21bd2f83 feat: add canonical URL and og:url
Docus doesn't generate canonical links or og:url natively. A plugin
now injects rel=canonical and og:url per route using nuxt-site-config's
withSiteUrl, which reads site.url from nuxt.config.ts.
2026-08-11 23:10:26 +02:00
Djeex 2c28b27e82 Fixed darkreader lock 2026-08-11 10:12:54 +00:00
Djeex d22711484b feat: add SEO descriptions to all pages and fix canonical URL 2026-08-11 08:48:59 +00:00
Djeex bfdef4c47a feat: add sitemap generation 2026-08-11 08:32:13 +00:00
Djeex 6129fd31d1 Fixed text 2026-08-03 16:04:44 +00:00
Djeex d839908521 Instameex 2026-08-03 15:52:04 +00:00
Djeex c640801e23 Fixed ")" 2026-03-11 12:06:58 +00:00
Djeex 9e3f116f55 Fixed qbittorrent screenshot 2026-03-11 12:05:05 +00:00
Djeex a59c6c7d4a Fixed Debian version 2026-03-11 11:51:12 +00:00
51 changed files with 10508 additions and 2801 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ export default defineAppConfig({
docus: {
title: 'Docudjeex',
description: 'Homelab documentation',
url: 'http://docus.dev',
url: 'https://docu.djeex.fr',
image: '/img/social.png',
socials: {
github:'',
+1
View File
@@ -1,5 +1,6 @@
---
title: Home
description: Homelab documentation by Djeex — self-hosting guides for Debian, Docker, networking, storage, and more.
navigation: false
layout: page
main:
+2 -1
View File
@@ -1,6 +1,7 @@
---
icon: lucide:home
title: Welcome
description: Introduction to Docudjeex — a personal homelab documentation site covering self-hosted services, Debian, and Docker infrastructure.
main:
fluid: false
---
@@ -9,7 +10,7 @@ main:
# docu[·]{style="color: #1ad6ff"}what?
__Docu[·]{style="color: #1ad6ff"}djeex__ is a site containing the documentation of my personal servers, originally created to easily keep track of my configurations and commands.
My infrastructure is built around the Debian 12 + Docker combo, making exporting and deployment simpler.
My infrastructure is built around the Debian 13 + Docker combo, making exporting and deployment simpler.
Special thanks to __Nipah__, __Xenio__, and others for their patience and support. Most of this content comes directly from them.
## About the documentation
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: NAT & DHCP
description: Learn how NAT, port forwarding, and DHCP work on a home router. Configure fixed IP leases and understand how to expose local services.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: DNS Zone
description: Understand how DNS works, how to read and edit a DNS zone, and how to configure domain names for your self-hosted services.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Samba
description: Set up Samba on Debian to share folders over your local network and access them from Windows, macOS, or Linux.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: RAID
description: Understand RAID concepts — hardware vs software, RAID levels, and how to set up redundant disk arrays for your homelab.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: ZFS
description: Introduction to ZFS — a combined file system and volume manager with snapshots, checksums, and built-in redundancy for reliable homelab storage.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: The Basics
description: Overview of server hardware fundamentals — CPUs, RAM, storage, and form factors to understand before building your homelab.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Network
description: Overview of networking hardware for homelabs — switches, NICs, cables, and how to connect your servers efficiently.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: The ProloNAS
description: Build a capable home server on a budget using an Intel N100 mini PC — a practical guide to getting started with self-hosting for under $130.
fluid: false
---
+2 -1
View File
@@ -2,6 +2,7 @@
icon: lucide:bookmark
navigation: true
title: Introduction
description: Introduction to Serveex — a personal homelab project to self-host everyday services using Debian and Docker, replacing Google, Apple, and Netflix.
main:
fluid: false
---
@@ -41,7 +42,7 @@ The Core of the Server
#title
__Operating System__
#description
[Install and configure Debian 12](/serveex/core/installation)
[Install and configure Debian 13](/serveex/core/installation)
::
::card{icon=logos:docker-icon}
+3 -2
View File
@@ -1,11 +1,12 @@
---
navigation: true
title: Debian 12
title: Debian 13
description: Step-by-step guide to install Debian 13 on a home server and set up SSH access, essential packages, and a ready-to-use base system.
main:
fluid: false
---
:ellipsis{left=0px width=40rem top=10rem blur=140px}
# Debian 12
# Debian 13
::alert{type="info"}
🎯 __Goal:__ Install Debian 13 and the main dependencies to have a ready-to-use OS, accessible via SSH.
::
+2 -1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Docker
description: Install Docker and Dockge on Debian to deploy and manage self-hosted services with simple container stacks.
main:
fluid: false
---
@@ -43,7 +44,7 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
That's it!
**More options:** [Install Docker for Debian 12](https://docs.docker.com/engine/install/debian/)
**More options:** [Install Docker for Debian 13](https://docs.docker.com/engine/install/debian/)
::alert{type="info" icon="exclamation-circle"}
:::list{type="info"}
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: SWAG
description: Set up SWAG as a reverse proxy with automatic SSL, expose your services securely, and configure geo-blocking on your homelab.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Wireguard
description: Install and configure WireGuard VPN to securely access your homelab from anywhere and connect all your devices to your private network.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Authentik
description: Install Authentik as a self-hosted identity provider — configure MFA and protect your services with SSO and reverse proxy authentication.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Cloudflare Zero Trust
description: Use Cloudflare Tunnels and Zero Trust to expose homelab services without opening ports — configure SWAG and manage multiple tunnels.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Uptime-Kuma
description: Install Uptime-Kuma to monitor your self-hosted services uptime, set up alerts, and optionally protect the dashboard with Authentik.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Dozzle
description: Install Dozzle to monitor Docker container logs in real time from a clean web interface, exposed via SWAG.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Speedtest Tracker
description: Install Speedtest Tracker to automatically measure and log your internet connection speed over time, exposed with SWAG.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Beszel
description: Install Beszel to monitor server CPU, RAM, disk, and network metrics — including remote servers — with a lightweight web dashboard.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: UpSnap
description: Install UpSnap to remotely wake up machines on your local network via Wake-on-LAN, exposed with SWAG.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Plex
description: Install Plex Media Server with Tautulli on your homelab to stream movies and TV shows from anywhere on all your devices.
main:
fluid: false
---
+4 -3
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Qbittorrent
description: Install qBittorrent with Gluetun and ProtonVPN to download torrents securely behind a VPN on your self-hosted server.
main:
fluid: false
---
@@ -13,7 +14,7 @@ main:
- Securely connect to the BitTorrent network using Gluetun and Proton VPN
::
![Picture](https://github.com/VueTorrent/VueTorrent/blob/master/public/screenshots/screenshot-desktop-dark-mode.jpeg?raw=true)
![Picture](/img/serveex/qbit-vue.jpeg)
To safely download your favorite media, we'll build a system using:
@@ -80,7 +81,7 @@ services:
- gluetun
gluetun:
image: qmcgaw/gluetun:v3.40.1
image: qmcgaw/gluetun:v3.41.3
container_name: gluetun
restart: unless-stopped
mem_limit: 4g
@@ -149,7 +150,7 @@ Press `i` to edit and enter:
```toml
[[roles]]
name = "t-anc/GSP-Qbittorent-Gluetun-sync-port-mod"
routes = ["GET /v1/openvpn/portforwarded"]
routes = ["GET /v1/portforward"]
auth = "apikey"
apikey = "your_key_here" # key you just generated
```
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Automation
description: Automate media downloads with the Servarr stack — Radarr, Sonarr, Bazarr, Prowlarr, and Overseerr for movies and TV shows.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Immich
description: Install Immich, a self-hosted alternative to Google Photos and iCloud with face recognition, geolocation, and multi-device sync.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Nextcloud
description: Install Nextcloud to self-host your files, photos, and calendar — a privacy-friendly alternative to Google Drive, OneDrive, and iCloud.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: File Browser
description: Install File Browser to browse and manage your server files from a web interface, exposed securely with SWAG.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Pingvin
description: Install Pingvin Share, a self-hosted file sharing platform to send files securely without relying on WeTransfer or Google Drive.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Code-Server
description: Install code-server to run VS Code in your browser from your homelab — mount folders and expose it securely with SWAG.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Gitea
description: Install Gitea, a lightweight self-hosted Git service to manage your code repositories privately on your own server.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: IT Tools
description: Install IT Tools, a self-hosted collection of handy utilities for developers — converters, encoders, formatters, and more.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Adguard Home
description: Install AdGuard Home for network-wide ad and tracker blocking with DNS-over-HTTPS, client management, and custom filtering rules.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Vaultwarden
description: Install Vaultwarden, a self-hosted Bitwarden-compatible password manager to replace Google or Apple password managers across all your devices.
main:
fluid: false
---
+1
View File
@@ -2,6 +2,7 @@
icon: lucide:bookmark
navigation: true
title: Introduction
description: Introduction to Stockeex — a personal project for stock and inventory management. Documentation coming soon.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Nvidia Stock Bot
description: A Python bot that monitors GPU stock availability in real time and sends Discord alerts — built during the RTX 5000 series launch shortage.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Adguard CIDRE
description: A Python script to sync AdGuard Home CIDR allowlists automatically, securing your self-hosted DNS server exposed to the internet.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: Lumeex
description: Lumeex is a static photo gallery site generator built with Python — minimalist, lightweight, and fully customizable without a CMS.
main:
fluid: false
---
@@ -0,0 +1,58 @@
---
navigation: true
title: Instameex
description: Instameex is a Docker-based tool to merge SDR and HDR photo exports into a proper gain-map JPEG ready for Instagram HDR upload.
main:
fluid: false
---
:ellipsis{left=0px width=40rem top=10rem blur=140px}
<div align="center">
<img src="https://git.djeex.fr/Djeex/instameex/raw/branch/main/src/assets/img/logo-long.svg" alt="Lumeex Screenshot" width="300"/>
</div>
<p/>
<div align="center">
<p>Mix your SDR and HDR exports into an Instagram-ready HDR photo.</p>
</div>
</p>
<div align="center">
<img src="https://git.djeex.fr/Djeex/instameex/raw/branch/main/illustration/instameex-illustration.png" width="640" alt="Instameex Screenshot" />
</div>
---
Nothing is more frustrating than Instagram's HDR handling. It compresses and destroys gain maps, and the slightest change in aspect ratio or size simply strips HDR out entirely. As for Lightroom, its "SDR preview" system is frankly unacceptable, it makes it impossible to get consistent results. Until now, posting on Instagram meant choosing between decent SDR with broken HDR, or the other way around.
Why not simply edit your SDR file to perfection on one side, your HDR file on the other, and then recalculate a gain map from those two perfect files?
A few pioneers have already gone down that road, notably with an [Adobe Lightroom Classic](https://github.com/karachungen/lightroom-plugin-export-hdr) plugin. Judge me if you want, but I only use Lightroom CC, which does not support plugins.
I drew inspiration from a [fork of the original project](https://github.com/kostis-kounadis/instagram-hdr-assembler), the one that eventually became the LrC plugin, to build a frontend that can be easily deployed with Docker. Let's be honest: it was also a great excuse to put my Claude Code subscription to the test. And I have to say, watching it spin up its own environments, run end-to-end tests, self-correct its code, and write detailed summaries is genuinely impressive. I still reviewed everything myself, don't worry. I also learned a great deal about HDR fundamentals, gain maps, HLG/PQ tone curves, color spaces, and more.
In short, here is what my workflow now looks like for posting on Instagram:
![Instameex workflow](/img/nonsense/instameex-workflow.svg)
Allow me to introduce **Instam[eex]{style="color: #1ad6ff"}**
---
::card-grid{grid-template-columns="repeat(2, minmax(0, 1fr));"}
#title
And here is the result
#root
:ellipsis{left=0px width=40rem top=10rem blur=140px}
#default
::card
#title
🐋 __Instameex__
#description
[Open the repository](https://git.djeex.fr/Djeex/instameex)
::
::card
#title
🌍 __Online version__
#description
[Convert online](https://instameex.djeex.fr)
::
::
@@ -1,6 +1,7 @@
---
navigation: true
title: Servarr corrector
description: A bash script to detect and fix duplicate media files in Sonarr and Radarr libraries by replacing copies with hardlinks to reclaim disk space.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: LUKS Backup
description: A bash script to automatically dump LUKS headers from all encrypted disks, identify them by serial number, and store them in an encrypted archive.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Socat Proxy
description: Use socat to proxy the Docker socket through Docker Socket Proxy, allowing Beszel to collect container stats without exposing the full Docker socket.
main:
fluid: false
---
+1
View File
@@ -1,6 +1,7 @@
---
navigation: true
title: HotDisk
description: A bash script that monitors hard drive temperatures and automatically shuts down the server when disks stay above a safe threshold for too long.
main:
fluid: false
---
@@ -1,6 +1,7 @@
---
navigation: true
title: Backrest Docker Stop
description: A bash script that stops Docker containers before a Backrest backup runs and restarts them after — ensuring safe database backups without complex dumps.
main:
fluid: false
---
+11 -1
View File
@@ -2,6 +2,7 @@ export default defineNuxtConfig({
// https://github.com/nuxt-themes/docus
css: ['~/assets/css/extra.css'],
extends: ['@nuxt-themes/docus'],
modules: ['@nuxtjs/sitemap'],
devtools: { enabled: false },
colorMode: {
preference: 'dark',
@@ -37,10 +38,19 @@ export default defineNuxtConfig({
{ rel: 'manifest', href: '/img/favicon/site.webmanifest' }
],
meta: [
{ name: 'darkreader-lock' },
{ name: 'darkreader-lock', content: 'true' },
]
}
},
site: {
url: 'https://docu.djeex.fr'
},
sitemap: {
autoLastmod: true,
urls: ['https://docu.djeex.fr']
},
compatibilityDate: '2024-10-24'
})
+10372 -2794
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -15,8 +15,9 @@
"@nuxt/eslint-config": "^0.6.1",
"@nuxt/icon": "^1.7.5",
"@nuxtjs/plausible": "^1.0.3",
"@nuxtjs/sitemap": "6.1.5",
"@types/node": "^22.9.0",
"eslint": "^9.14.0",
"nuxt": "^3.14.159"
"nuxt": "^3.21.11"
}
}
+13
View File
@@ -0,0 +1,13 @@
export default defineNuxtPlugin(() => {
const route = useRoute()
const canonicalUrl = withSiteUrl(computed(() => route.path), { canonical: true })
useHead({
link: [
{ rel: 'canonical', href: canonicalUrl }
],
meta: [
{ property: 'og:url', content: canonicalUrl }
]
})
})
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB