basic structure
This commit is contained in:
		
							
								
								
									
										0
									
								
								homelabbing/docs/hardware/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								homelabbing/docs/hardware/index.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								homelabbing/docs/hardware/server/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								homelabbing/docs/hardware/server/index.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										85
									
								
								homelabbing/docs/how-to-use-this-guide.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								homelabbing/docs/how-to-use-this-guide.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | |||||||
|  | # How to Use This Documentation | ||||||
|  |  | ||||||
|  | Welcome to the **Homelab Documentation** – a complete reference for planning, building, and maintaining your self-hosted infrastructure. | ||||||
|  |  | ||||||
|  | This knowledge base is organized into **three main categories** in the top navigation:   | ||||||
|  | - **Software** – Applications and services you can self-host   | ||||||
|  | - **Hardware** – Physical servers, storage, and network equipment   | ||||||
|  | - **Know-How** – Linux fundamentals, networking, and security | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 📂 Category Structure | ||||||
|  |  | ||||||
|  | ### **Software** | ||||||
|  | Guides for installing, configuring, and running self-hosted applications. | ||||||
|  | - **Media Services** – Streaming, automation, indexing, transcoding | ||||||
|  | - **Productivity Tools** – File sync, document management, collaboration | ||||||
|  | - **Monitoring & Management** – Metrics, logs, automation, backups | ||||||
|  | - **Other Applications** – Any other useful self-hosted services | ||||||
|  |  | ||||||
|  | **Example:**   | ||||||
|  | [Docker Installation Guide](knowhow/docker)   | ||||||
|  | [Service Installation Example](software/mediastack) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ### **Hardware** | ||||||
|  | Documentation about your physical homelab setup. | ||||||
|  | - **Servers** – Build guides for different performance tiers | ||||||
|  | - **Storage** – RAID, ZFS, NAS integration | ||||||
|  | - **Networking Equipment** – Routers, switches, WiFi APs | ||||||
|  | - **Power & UPS** – Power protection and energy efficiency | ||||||
|  |  | ||||||
|  | **Example:**   | ||||||
|  | [Starter Server Build](hardware/server) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ### **Know-How** | ||||||
|  | General technical knowledge for running and securing a homelab. | ||||||
|  | - **Linux** | ||||||
|  |   - Basics – Commands, filesystem, permissions | ||||||
|  |   - Docker – Installation, Compose, Swarm Mode | ||||||
|  | - **Networking** | ||||||
|  |   - VLANs, subnets, DNS, VPN setup | ||||||
|  | - **Security** | ||||||
|  |   - TLS/SSL, reverse proxy configuration | ||||||
|  |   - MFA, firewall, access control | ||||||
|  |   - Backup strategies | ||||||
|  |  | ||||||
|  | **Example:**   | ||||||
|  | [Linux Basics](knowhow/linux/basics) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 🛠 How to Navigate | ||||||
|  |  | ||||||
|  | 1. **Choose a Category** – Use the top navigation to open *Software*, *Hardware*, or *Know-How*.   | ||||||
|  | 2. **Expand the Sidebar** – Each category contains subtopics with their own guides.   | ||||||
|  | 3. **Follow Links** – Many guides link to related topics for better context.   | ||||||
|  | 4. **Copy & Paste** – All commands are provided in ready-to-use code blocks.   | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 🚀 Suggested Starting Path | ||||||
|  |  | ||||||
|  | If you’re new to self-hosting: | ||||||
|  | 1. Follow the [Docker Installation Guide](knowhow/docker)   | ||||||
|  | 2. Deploy a basic service of your choice   | ||||||
|  | 3. Set up reverse proxy and SSL for secure access   | ||||||
|  | 4. Learn networking and security basics in *Know-How*   | ||||||
|  | 5. Expand with automation, backups, and monitoring | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 📚 Resources | ||||||
|  |  | ||||||
|  | - [Docker Documentation](https://docs.docker.com/) | ||||||
|  | - [Jellyfin Docs](https://jellyfin.org/docs/) | ||||||
|  | - [Awesome-Selfhosted](https://github.com/awesome-selfhosted/awesome-selfhosted) | ||||||
|  | - [selfh.st – Self-Hosting Knowledge Base](https://selfh.st/) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | **Tip:** Keep your configuration files, `docker-compose.yml` files, and infrastructure documentation in version control for easy recovery. | ||||||
| @@ -1,47 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 1 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Tutorial Intro |  | ||||||
|  |  | ||||||
| Let's discover **Docusaurus in less than 5 minutes**. |  | ||||||
|  |  | ||||||
| ## Getting Started |  | ||||||
|  |  | ||||||
| Get started by **creating a new site**. |  | ||||||
|  |  | ||||||
| Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. |  | ||||||
|  |  | ||||||
| ### What you'll need |  | ||||||
|  |  | ||||||
| - [Node.js](https://nodejs.org/en/download/) version 18.0 or above: |  | ||||||
|   - When installing Node.js, you are recommended to check all checkboxes related to dependencies. |  | ||||||
|  |  | ||||||
| ## Generate a new site |  | ||||||
|  |  | ||||||
| Generate a new Docusaurus site using the **classic template**. |  | ||||||
|  |  | ||||||
| The classic template will automatically be added to your project after you run the command: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm init docusaurus@latest my-website classic |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. |  | ||||||
|  |  | ||||||
| The command also installs all necessary dependencies you need to run Docusaurus. |  | ||||||
|  |  | ||||||
| ## Start your site |  | ||||||
|  |  | ||||||
| Run the development server: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| cd my-website |  | ||||||
| npm run start |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. |  | ||||||
|  |  | ||||||
| The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. |  | ||||||
|  |  | ||||||
| Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. |  | ||||||
							
								
								
									
										89
									
								
								homelabbing/docs/knowhow/docker/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								homelabbing/docs/knowhow/docker/index.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | |||||||
|  | # Installation | ||||||
|  |  | ||||||
|  | This guide explains how to install Docker Engine using the official Docker repository. | ||||||
|  |  | ||||||
|  | ## Prerequisites | ||||||
|  |  | ||||||
|  | - Root or `sudo` privileges   | ||||||
|  | - Supported OS: Debian 10/11/12 or Ubuntu 20.04/22.04 | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 1. Remove old versions (if any) | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo apt-get remove docker docker-engine docker.io containerd runc | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 2. Set up the repository | ||||||
|  |  | ||||||
|  | ### 2.1 Install required packages | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo apt-get update | ||||||
|  | sudo apt-get install -y \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     curl \ | ||||||
|  |     gnupg \ | ||||||
|  |     lsb-release | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### 2.2 Add Docker’s official GPG key | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo mkdir -p /etc/apt/keyrings | ||||||
|  | curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### 2.3 Set up the Docker repository | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | echo \ | ||||||
|  |   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ | ||||||
|  |   https://download.docker.com/linux/$(. /etc/os-release && echo \"$ID\") \ | ||||||
|  |   $(lsb_release -cs) stable" | \ | ||||||
|  |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 3. Install Docker Engine | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo apt-get update | ||||||
|  | sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 4. Enable and start the Docker service | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo systemctl enable docker | ||||||
|  | sudo systemctl start docker | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 5. Verify installation | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo docker run hello-world | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Optional: Add your user to the `docker` group | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | sudo usermod -aG docker $USER | ||||||
|  | newgrp docker | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  | - https://docs.docker.com/engine/install/ | ||||||
							
								
								
									
										0
									
								
								homelabbing/docs/knowhow/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								homelabbing/docs/knowhow/index.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								homelabbing/docs/knowhow/linux/basics/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								homelabbing/docs/knowhow/linux/basics/index.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								homelabbing/docs/knowhow/linux/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								homelabbing/docs/knowhow/linux/index.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								homelabbing/docs/software/img/mediastack-diagram.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								homelabbing/docs/software/img/mediastack-diagram.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 263 KiB | 
							
								
								
									
										0
									
								
								homelabbing/docs/software/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								homelabbing/docs/software/index.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										101
									
								
								homelabbing/docs/software/mediastack/introduction.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								homelabbing/docs/software/mediastack/introduction.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  | # Introduction | ||||||
|  |  | ||||||
|  | This documentation describes a self-hosted, Docker-based media automation stack that handles everything from user requests to content playback, fully integrated with Jellyfin as the central media server. | ||||||
|  |  | ||||||
|  | The stack includes download automation (Usenet), metadata scraping, transcoding, user interface for media requests, monitoring, and search. Everything is containerized and orchestrated with Docker Compose. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 1. Prerequisites | ||||||
|  |  | ||||||
|  | Before continuing, make sure Docker and Docker Compose are installed on your system.   | ||||||
|  | You can follow the installation guide here:   | ||||||
|  | 👉 [Install Docker on Debian/Ubuntu](../../knowhow/docker/) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 2. Stack Overview | ||||||
|  |  | ||||||
|  | The following diagram illustrates how the various components in the media stack interact: | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Legend / Component Highlights:** | ||||||
|  |  | ||||||
|  | - **Jellyfin**: the main media server for playback and library management | ||||||
|  | - **Jellyseerr**: user-facing request portal | ||||||
|  | - **Radarr/Sonarr**: automation for movies and series | ||||||
|  | - **Prowlarr**: indexer aggregator for both Radarr and Sonarr | ||||||
|  | - **SABnzbd**: Usenet downloader | ||||||
|  | - **Tdarr**: automated transcoding engine | ||||||
|  | - **Meilisearch**: search backend for metadata (used by Scraparr/Suggestarr) | ||||||
|  | - **Wizarr**: user invite and account management | ||||||
|  | - **Trailarr & Huntarr**: UI enhancements and support tooling | ||||||
|  | - **Scraparr & Suggestarr**: metadata and suggestion automation | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 3. Directory Structure | ||||||
|  |  | ||||||
|  | Your directory tree is organized to clearly separate persistent data and component configuration: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | /mediastack | ||||||
|  | ├── 4k-radarr               # Radarr instance for 4K content | ||||||
|  | ├── jellyfin                # Config/data for Jellyfin | ||||||
|  | ├── jellyseerr              # Request frontend | ||||||
|  | ├── radarr                  # Main movie automation | ||||||
|  | ├── sonarr                  # Series automation | ||||||
|  | ├── sabnzbd                 # Usenet download client | ||||||
|  | ├── tdarr                   # Transcoding | ||||||
|  | ├── prowlarr                # Indexer management | ||||||
|  | ├── wizarr                  # Invite portal | ||||||
|  | ├── postgres                # Database service | ||||||
|  | ├── huntarr, trailarr*      # Visual/UX enhancements | ||||||
|  | ├── scraparr, suggestarr    # Metadata and recommendation tooling | ||||||
|  | ├── cache/ | ||||||
|  | │   ├── jellyfin | ||||||
|  | │   ├── sabnzbd | ||||||
|  | │   ├── tdarr | ||||||
|  | │   └── meilisearch | ||||||
|  | ├── media/ | ||||||
|  | │   ├── 4k-filme | ||||||
|  | │   ├── anime_filme | ||||||
|  | │   ├── animes | ||||||
|  | │   ├── filme | ||||||
|  | │   ├── serien | ||||||
|  | │   └── posters | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | > All services are managed using Docker Compose with volume mounts mapped into the above directories. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 4. Benefits | ||||||
|  |  | ||||||
|  | - 🧩 Modular: You can scale or swap components easily | ||||||
|  | - 🐳 Containerized: Consistent and portable deployments | ||||||
|  | - 🧠 Automated: Minimal manual work once configured | ||||||
|  | - 📦 Composable: All services communicate via APIs or shared volumes | ||||||
|  | - 🔐 Local-first & private | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 5. Next Steps | ||||||
|  |  | ||||||
|  | - Set up Docker and Docker Compose if you haven't yet | ||||||
|  | - Start configuring the services one by one (see individual `.md` files) | ||||||
|  | - Secure access via reverse proxy (e.g., Traefik or Nginx) | ||||||
|  | - Enjoy your fully automated media center 🎬 | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Links | ||||||
|  |  | ||||||
|  | - Jellyfin: https://jellyfin.org   | ||||||
|  | - Jellyseerr: https://github.com/Fallenbagel/jellyseerr   | ||||||
|  | - Tdarr: https://github.com/HaveAGitGat/Tdarr   | ||||||
|  | - SABnzbd: https://sabnzbd.org   | ||||||
|  | - Radarr: https://radarr.video   | ||||||
|  | - Sonarr: https://sonarr.tv   | ||||||
|  | - Prowlarr: https://github.com/Prowlarr/Prowlarr   | ||||||
| @@ -0,0 +1,82 @@ | |||||||
|  | # Installation | ||||||
|  |  | ||||||
|  | This guide shows you how to install [Jellyfin](https://jellyfin.org/) via Docker Compose. Make sure Docker Engine is already installed on your system. | ||||||
|  |  | ||||||
|  | ## Prerequisites | ||||||
|  |  | ||||||
|  | - Docker Engine installed (follow the official guide linked above)   | ||||||
|  | - Docker Compose available   | ||||||
|  | - Linux host system | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 1. Create a project directory | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | mkdir jellyfin | ||||||
|  | cd jellyfin | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 2. Create `docker-compose.yml` | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | version: "3" | ||||||
|  | services: | ||||||
|  |   jellyfin: | ||||||
|  |     image: jellyfin/jellyfin | ||||||
|  |     container_name: jellyfin | ||||||
|  |     user: uid:gid           # replace uid:gid with your actual user ID and group ID | ||||||
|  |     network_mode: "host"    # optional: needed for DLNA and certain integrations | ||||||
|  |     volumes: | ||||||
|  |       - ./config:/config | ||||||
|  |       - ./cache:/cache | ||||||
|  |       - /path/to/media:/media | ||||||
|  |         # Add more media folders if needed | ||||||
|  |     restart: unless-stopped | ||||||
|  |     environment: | ||||||
|  |       - JELLYFIN_PublishedServerUrl=http://your-domain-or-ip | ||||||
|  |     extra_hosts: | ||||||
|  |       - "host.docker.internal:host-gateway" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 3. Start Jellyfin | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | docker compose up -d | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 4. Access Jellyfin | ||||||
|  |  | ||||||
|  | Open a browser and navigate to `http://<your-host-ip>:8096` to begin setup via the web UI. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 5. (Optional) Manage updates | ||||||
|  |  | ||||||
|  | When a new version is available: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | docker compose pull | ||||||
|  | docker compose up -d | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Notes | ||||||
|  |  | ||||||
|  | - Ensure user ID (`uid`) and group ID (`gid`) match your Linux user to prevent permissions issues.   | ||||||
|  | - Host network mode is required for DLNA and some integrations only; you can remove it if not needed.   | ||||||
|  | - This setup uses bind-mounted folders (`./config`, `./cache`, `/path/to/media`) for persistent data. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  | - Official Docker installation guide: https://docs.docker.com/engine/install/   | ||||||
|  | - Jellyfin Docker Compose instructions | ||||||
| @@ -0,0 +1,60 @@ | |||||||
|  | # Introduction | ||||||
|  |  | ||||||
|  | **Jellyfin** is a free, open-source media server software that lets you collect, manage, and stream your personal media—such as movies, TV shows, music, and photos—across devices. It is a community-driven alternative to proprietary platforms like Plex and Emby. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Key Features | ||||||
|  |  | ||||||
|  | - 🆓 **Completely Free**: No paid licenses, subscriptions, or locked features. | ||||||
|  | - 🛡️ **Privacy-Focused**: No telemetry, no third-party tracking. | ||||||
|  | - 📺 **Streaming**: Access your media from web browsers, smart TVs, mobile apps, or Kodi. | ||||||
|  | - 🧠 **Metadata Management**: Automatic retrieval of posters, fanart, episode guides, and more. | ||||||
|  | - 🎚️ **Transcoding**: On-the-fly conversion for devices with limited format support. | ||||||
|  | - 🎛️ **Plugin System**: Extend functionality with community-made plugins. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Supported Platforms | ||||||
|  |  | ||||||
|  | - **Server**: Windows, Linux, macOS, Docker, and more | ||||||
|  | - **Clients**: | ||||||
|  |   - Web browser | ||||||
|  |   - Android / iOS apps | ||||||
|  |   - Smart TVs (via apps or DLNA) | ||||||
|  |   - Kodi (via Jellyfin add-on) | ||||||
|  |   - Chromecast | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Ideal Use Cases | ||||||
|  |  | ||||||
|  | - Home media streaming over LAN or internet | ||||||
|  | - Centralized media hub for a household | ||||||
|  | - Replacement for paid services (e.g., Plex, Netflix for local content) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Comparison to Plex & Emby | ||||||
|  |  | ||||||
|  | | Feature            | Jellyfin        | Plex            | Emby            | | ||||||
|  | |--------------------|-----------------|------------------|------------------| | ||||||
|  | | Open Source        | ✅ Yes          | ❌ No            | ⚠️ Partial        | | ||||||
|  | | Free Features      | ✅ All          | ❌ Some Locked   | ⚠️ Limited        | | ||||||
|  | | No Account Needed  | ✅ Yes          | ❌ No            | ⚠️ Mostly         | | ||||||
|  | | Community-Driven   | ✅ 100%         | ❌               | ⚠️ Limited        | | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Quick Start | ||||||
|  |  | ||||||
|  | If you haven’t installed Jellyfin yet, check the [Docker Compose installation guide](./jellyfin-docker-compose.md) or visit the [official documentation](https://jellyfin.org/docs/). | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Links | ||||||
|  |  | ||||||
|  | - 🌐 Website: https://jellyfin.org   | ||||||
|  | - 📘 Docs: https://jellyfin.org/docs/   | ||||||
|  | - 🐙 GitHub: https://github.com/jellyfin/jellyfin   | ||||||
|  | - 💬 Community: https://matrix.to/#/#jellyfin:matrix.org   | ||||||
| @@ -0,0 +1,95 @@ | |||||||
|  | # Installation | ||||||
|  |  | ||||||
|  | [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) is a free and open-source request management and media discovery tool for Jellyfin. It allows users to search for and request media directly from your Jellyfin library or through external indexers. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Prerequisites | ||||||
|  |  | ||||||
|  | - Docker and Docker Compose installed   | ||||||
|  | - A running Jellyfin instance (optional but recommended)   | ||||||
|  | - Optional: Sonarr, Radarr, and download clients for full automation | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 1. Create Project Directory | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | mkdir jellyseerr | ||||||
|  | cd jellyseerr | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 2. Create `docker-compose.yml` | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | version: "3" | ||||||
|  | services: | ||||||
|  |   jellyseerr: | ||||||
|  |     image: fallenbagel/jellyseerr:latest | ||||||
|  |     container_name: jellyseerr | ||||||
|  |     restart: unless-stopped | ||||||
|  |     ports: | ||||||
|  |       - "5055:5055" | ||||||
|  |     environment: | ||||||
|  |       - LOG_LEVEL=info | ||||||
|  |     volumes: | ||||||
|  |       - ./config:/app/config | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 3. Start Jellyseerr | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | docker compose up -d | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 4. Access Web UI | ||||||
|  |  | ||||||
|  | Open your browser and go to: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | http://<your-server-ip>:5055 | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | You'll be guided through the setup process: | ||||||
|  | - Create admin account | ||||||
|  | - Connect Jellyfin server | ||||||
|  | - (Optional) Connect Sonarr, Radarr, etc. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 5. Update Instructions | ||||||
|  |  | ||||||
|  | To update Jellyseerr: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | docker compose pull | ||||||
|  | docker compose up -d | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## 6. Optional: Enable Reverse Proxy | ||||||
|  |  | ||||||
|  | To expose Jellyseerr via a domain name (e.g. `requests.example.com`), set up a reverse proxy using [Traefik](https://doc.traefik.io/traefik/), Nginx, or Caddy. A basic Traefik label example: | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  |     labels: | ||||||
|  |       - "traefik.enable=true" | ||||||
|  |       - "traefik.http.routers.jellyseerr.rule=Host(`requests.example.com`)" | ||||||
|  |       - "traefik.http.routers.jellyseerr.entrypoints=websecure" | ||||||
|  |       - "traefik.http.routers.jellyseerr.tls.certresolver=myresolver" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  | - Jellyseerr GitHub: https://github.com/Fallenbagel/jellyseerr   | ||||||
|  | - Docker Hub: https://hub.docker.com/r/fallenbagel/jellyseerr   | ||||||
|  | - Official Documentation: https://docs.jellyseerr.com   | ||||||
| @@ -0,0 +1,61 @@ | |||||||
|  | # Introduction | ||||||
|  |  | ||||||
|  | [**Jellyseerr**](https://docs.jellyseerr.dev/) is a free and open-source media request and discovery platform designed specifically for [**Jellyfin**](https://jellyfin.org). It provides a user-friendly interface for browsing, searching, and requesting movies and TV shows, bridging the gap between your users and your media automation stack (e.g., Jellyfin + Sonarr/Radarr). | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Key Features | ||||||
|  |  | ||||||
|  | - 🔎 **Search & Discover**: Browse and search for movies and series from TMDB. | ||||||
|  | - 🎯 **Direct Requests**: Request content directly from the UI, linked to Sonarr and Radarr. | ||||||
|  | - 🔐 **User Management**: Role-based permissions and Jellyfin authentication. | ||||||
|  | - 📅 **Release Tracking**: View upcoming or recently added media. | ||||||
|  | - 💬 **Request Comments**: Users can comment and track the status of their requests. | ||||||
|  | - 🌍 **Multi-language** support with a responsive web UI. | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Target Audience | ||||||
|  |  | ||||||
|  | - Jellyfin server admins who want to delegate content requests to users | ||||||
|  | - Home media server users looking to streamline their request workflow | ||||||
|  | - Those looking for a self-hosted alternative to Overseerr (Plex-only) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Jellyseerr vs Overseerr | ||||||
|  |  | ||||||
|  | | Feature                      | Jellyseerr      | Overseerr     | | ||||||
|  | |-----------------------------|------------------|---------------| | ||||||
|  | | Media Server Integration    | ✅ Jellyfin only | ❌ Plex only  | | ||||||
|  | | Open Source                 | ✅ Yes           | ✅ Yes        | | ||||||
|  | | Actively Maintained         | ✅ Yes           | ✅ Yes        | | ||||||
|  | | UI and Features             | ⭐ Comparable     | ⭐ Comparable | | ||||||
|  | | Login with Media Server     | ✅ Jellyfin SSO  | ✅ Plex OAuth | | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## How It Works | ||||||
|  |  | ||||||
|  | 1. **User logs in** (via Jellyfin) | ||||||
|  | 2. **Searches for media** via TMDB integration | ||||||
|  | 3. **Requests are submitted** through the UI | ||||||
|  | 4. **Sonarr/Radarr handle automation** (optional) | ||||||
|  | 5. **Jellyfin picks up downloaded content automatically** | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Requirements | ||||||
|  |  | ||||||
|  | - Jellyfin server | ||||||
|  | - Docker or Node.js environment | ||||||
|  | - (Optional) Sonarr, Radarr, and download clients (e.g., qBittorrent, NZBGet) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | ## Links | ||||||
|  |  | ||||||
|  | - 🌐 Project: https://github.com/Fallenbagel/jellyseerr   | ||||||
|  | - 📘 Docs: https://docs.jellyseerr.com   | ||||||
|  | - 🐳 Docker Hub: https://hub.docker.com/r/fallenbagel/jellyseerr   | ||||||
|  | - 💬 Community: https://discord.gg/mVJcS4tq3q   | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| { |  | ||||||
|   "label": "Tutorial - Basics", |  | ||||||
|   "position": 2, |  | ||||||
|   "link": { |  | ||||||
|     "type": "generated-index", |  | ||||||
|     "description": "5 minutes to learn the most important Docusaurus concepts." |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 6 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Congratulations! |  | ||||||
|  |  | ||||||
| You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. |  | ||||||
|  |  | ||||||
| Docusaurus has **much more to offer**! |  | ||||||
|  |  | ||||||
| Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. |  | ||||||
|  |  | ||||||
| Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) |  | ||||||
|  |  | ||||||
| ## What's next? |  | ||||||
|  |  | ||||||
| - Read the [official documentation](https://docusaurus.io/) |  | ||||||
| - Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) |  | ||||||
| - Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) |  | ||||||
| - Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) |  | ||||||
| - Add a [search bar](https://docusaurus.io/docs/search) |  | ||||||
| - Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) |  | ||||||
| - Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 3 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Create a Blog Post |  | ||||||
|  |  | ||||||
| Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... |  | ||||||
|  |  | ||||||
| ## Create your first Post |  | ||||||
|  |  | ||||||
| Create a file at `blog/2021-02-28-greetings.md`: |  | ||||||
|  |  | ||||||
| ```md title="blog/2021-02-28-greetings.md" |  | ||||||
| --- |  | ||||||
| slug: greetings |  | ||||||
| title: Greetings! |  | ||||||
| authors: |  | ||||||
|   - name: Joel Marcey |  | ||||||
|     title: Co-creator of Docusaurus 1 |  | ||||||
|     url: https://github.com/JoelMarcey |  | ||||||
|     image_url: https://github.com/JoelMarcey.png |  | ||||||
|   - name: Sébastien Lorber |  | ||||||
|     title: Docusaurus maintainer |  | ||||||
|     url: https://sebastienlorber.com |  | ||||||
|     image_url: https://github.com/slorber.png |  | ||||||
| tags: [greetings] |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| Congratulations, you have made your first post! |  | ||||||
|  |  | ||||||
| Feel free to play around and edit this post as much as you like. |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). |  | ||||||
| @@ -1,57 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 2 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Create a Document |  | ||||||
|  |  | ||||||
| Documents are **groups of pages** connected through: |  | ||||||
|  |  | ||||||
| - a **sidebar** |  | ||||||
| - **previous/next navigation** |  | ||||||
| - **versioning** |  | ||||||
|  |  | ||||||
| ## Create your first Doc |  | ||||||
|  |  | ||||||
| Create a Markdown file at `docs/hello.md`: |  | ||||||
|  |  | ||||||
| ```md title="docs/hello.md" |  | ||||||
| # Hello |  | ||||||
|  |  | ||||||
| This is my **first Docusaurus document**! |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). |  | ||||||
|  |  | ||||||
| ## Configure the Sidebar |  | ||||||
|  |  | ||||||
| Docusaurus automatically **creates a sidebar** from the `docs` folder. |  | ||||||
|  |  | ||||||
| Add metadata to customize the sidebar label and position: |  | ||||||
|  |  | ||||||
| ```md title="docs/hello.md" {1-4} |  | ||||||
| --- |  | ||||||
| sidebar_label: 'Hi!' |  | ||||||
| sidebar_position: 3 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Hello |  | ||||||
|  |  | ||||||
| This is my **first Docusaurus document**! |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| It is also possible to create your sidebar explicitly in `sidebars.js`: |  | ||||||
|  |  | ||||||
| ```js title="sidebars.js" |  | ||||||
| export default { |  | ||||||
|   tutorialSidebar: [ |  | ||||||
|     'intro', |  | ||||||
|     // highlight-next-line |  | ||||||
|     'hello', |  | ||||||
|     { |  | ||||||
|       type: 'category', |  | ||||||
|       label: 'Tutorial', |  | ||||||
|       items: ['tutorial-basics/create-a-document'], |  | ||||||
|     }, |  | ||||||
|   ], |  | ||||||
| }; |  | ||||||
| ``` |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 1 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Create a Page |  | ||||||
|  |  | ||||||
| Add **Markdown or React** files to `src/pages` to create a **standalone page**: |  | ||||||
|  |  | ||||||
| - `src/pages/index.js` → `localhost:3000/` |  | ||||||
| - `src/pages/foo.md` → `localhost:3000/foo` |  | ||||||
| - `src/pages/foo/bar.js` → `localhost:3000/foo/bar` |  | ||||||
|  |  | ||||||
| ## Create your first React Page |  | ||||||
|  |  | ||||||
| Create a file at `src/pages/my-react-page.js`: |  | ||||||
|  |  | ||||||
| ```jsx title="src/pages/my-react-page.js" |  | ||||||
| import React from 'react'; |  | ||||||
| import Layout from '@theme/Layout'; |  | ||||||
|  |  | ||||||
| export default function MyReactPage() { |  | ||||||
|   return ( |  | ||||||
|     <Layout> |  | ||||||
|       <h1>My React page</h1> |  | ||||||
|       <p>This is a React page</p> |  | ||||||
|     </Layout> |  | ||||||
|   ); |  | ||||||
| } |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). |  | ||||||
|  |  | ||||||
| ## Create your first Markdown Page |  | ||||||
|  |  | ||||||
| Create a file at `src/pages/my-markdown-page.md`: |  | ||||||
|  |  | ||||||
| ```mdx title="src/pages/my-markdown-page.md" |  | ||||||
| # My Markdown page |  | ||||||
|  |  | ||||||
| This is a Markdown page |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 5 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Deploy your site |  | ||||||
|  |  | ||||||
| Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). |  | ||||||
|  |  | ||||||
| It builds your site as simple **static HTML, JavaScript and CSS files**. |  | ||||||
|  |  | ||||||
| ## Build your site |  | ||||||
|  |  | ||||||
| Build your site **for production**: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm run build |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The static files are generated in the `build` folder. |  | ||||||
|  |  | ||||||
| ## Deploy your site |  | ||||||
|  |  | ||||||
| Test your production build locally: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm run serve |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). |  | ||||||
|  |  | ||||||
| You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). |  | ||||||
| @@ -1,152 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 4 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Markdown Features |  | ||||||
|  |  | ||||||
| Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. |  | ||||||
|  |  | ||||||
| ## Front Matter |  | ||||||
|  |  | ||||||
| Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): |  | ||||||
|  |  | ||||||
| ```text title="my-doc.md" |  | ||||||
| // highlight-start |  | ||||||
| --- |  | ||||||
| id: my-doc-id |  | ||||||
| title: My document title |  | ||||||
| description: My document description |  | ||||||
| slug: /my-custom-url |  | ||||||
| --- |  | ||||||
| // highlight-end |  | ||||||
|  |  | ||||||
| ## Markdown heading |  | ||||||
|  |  | ||||||
| Markdown text with [links](./hello.md) |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Links |  | ||||||
|  |  | ||||||
| Regular Markdown links are supported, using url paths or relative file paths. |  | ||||||
|  |  | ||||||
| ```md |  | ||||||
| Let's see how to [Create a page](/create-a-page). |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ```md |  | ||||||
| Let's see how to [Create a page](./create-a-page.md). |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| **Result:** Let's see how to [Create a page](./create-a-page.md). |  | ||||||
|  |  | ||||||
| ## Images |  | ||||||
|  |  | ||||||
| Regular Markdown images are supported. |  | ||||||
|  |  | ||||||
| You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): |  | ||||||
|  |  | ||||||
| ```md |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them: |  | ||||||
|  |  | ||||||
| ```md |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Code Blocks |  | ||||||
|  |  | ||||||
| Markdown code blocks are supported with Syntax highlighting. |  | ||||||
|  |  | ||||||
| ````md |  | ||||||
| ```jsx title="src/components/HelloDocusaurus.js" |  | ||||||
| function HelloDocusaurus() { |  | ||||||
|   return <h1>Hello, Docusaurus!</h1>; |  | ||||||
| } |  | ||||||
| ``` |  | ||||||
| ```` |  | ||||||
|  |  | ||||||
| ```jsx title="src/components/HelloDocusaurus.js" |  | ||||||
| function HelloDocusaurus() { |  | ||||||
|   return <h1>Hello, Docusaurus!</h1>; |  | ||||||
| } |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Admonitions |  | ||||||
|  |  | ||||||
| Docusaurus has a special syntax to create admonitions and callouts: |  | ||||||
|  |  | ||||||
| ```md |  | ||||||
| :::tip My tip |  | ||||||
|  |  | ||||||
| Use this awesome feature option |  | ||||||
|  |  | ||||||
| ::: |  | ||||||
|  |  | ||||||
| :::danger Take care |  | ||||||
|  |  | ||||||
| This action is dangerous |  | ||||||
|  |  | ||||||
| ::: |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| :::tip My tip |  | ||||||
|  |  | ||||||
| Use this awesome feature option |  | ||||||
|  |  | ||||||
| ::: |  | ||||||
|  |  | ||||||
| :::danger Take care |  | ||||||
|  |  | ||||||
| This action is dangerous |  | ||||||
|  |  | ||||||
| ::: |  | ||||||
|  |  | ||||||
| ## MDX and React Components |  | ||||||
|  |  | ||||||
| [MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: |  | ||||||
|  |  | ||||||
| ```jsx |  | ||||||
| export const Highlight = ({children, color}) => ( |  | ||||||
|   <span |  | ||||||
|     style={{ |  | ||||||
|       backgroundColor: color, |  | ||||||
|       borderRadius: '20px', |  | ||||||
|       color: '#fff', |  | ||||||
|       padding: '10px', |  | ||||||
|       cursor: 'pointer', |  | ||||||
|     }} |  | ||||||
|     onClick={() => { |  | ||||||
|       alert(`You clicked the color ${color} with label ${children}`) |  | ||||||
|     }}> |  | ||||||
|     {children} |  | ||||||
|   </span> |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| This is <Highlight color="#25c2a0">Docusaurus green</Highlight> ! |  | ||||||
|  |  | ||||||
| This is <Highlight color="#1877F2">Facebook blue</Highlight> ! |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| export const Highlight = ({children, color}) => ( |  | ||||||
|   <span |  | ||||||
|     style={{ |  | ||||||
|       backgroundColor: color, |  | ||||||
|       borderRadius: '20px', |  | ||||||
|       color: '#fff', |  | ||||||
|       padding: '10px', |  | ||||||
|       cursor: 'pointer', |  | ||||||
|     }} |  | ||||||
|     onClick={() => { |  | ||||||
|       alert(`You clicked the color ${color} with label ${children}`); |  | ||||||
|     }}> |  | ||||||
|     {children} |  | ||||||
|   </span> |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| This is <Highlight color="#25c2a0">Docusaurus green</Highlight> ! |  | ||||||
|  |  | ||||||
| This is <Highlight color="#1877F2">Facebook blue</Highlight> ! |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| { |  | ||||||
|   "label": "Tutorial - Extras", |  | ||||||
|   "position": 3, |  | ||||||
|   "link": { |  | ||||||
|     "type": "generated-index" |  | ||||||
|   } |  | ||||||
| } |  | ||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 25 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 27 KiB | 
| @@ -1,55 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 1 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Manage Docs Versions |  | ||||||
|  |  | ||||||
| Docusaurus can manage multiple versions of your docs. |  | ||||||
|  |  | ||||||
| ## Create a docs version |  | ||||||
|  |  | ||||||
| Release a version 1.0 of your project: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm run docusaurus docs:version 1.0 |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. |  | ||||||
|  |  | ||||||
| Your docs now have 2 versions: |  | ||||||
|  |  | ||||||
| - `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs |  | ||||||
| - `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** |  | ||||||
|  |  | ||||||
| ## Add a Version Dropdown |  | ||||||
|  |  | ||||||
| To navigate seamlessly across versions, add a version dropdown. |  | ||||||
|  |  | ||||||
| Modify the `docusaurus.config.js` file: |  | ||||||
|  |  | ||||||
| ```js title="docusaurus.config.js" |  | ||||||
| export default { |  | ||||||
|   themeConfig: { |  | ||||||
|     navbar: { |  | ||||||
|       items: [ |  | ||||||
|         // highlight-start |  | ||||||
|         { |  | ||||||
|           type: 'docsVersionDropdown', |  | ||||||
|         }, |  | ||||||
|         // highlight-end |  | ||||||
|       ], |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The docs version dropdown appears in your navbar: |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Update an existing version |  | ||||||
|  |  | ||||||
| It is possible to edit versioned docs in their respective folder: |  | ||||||
|  |  | ||||||
| - `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` |  | ||||||
| - `docs/hello.md` updates `http://localhost:3000/docs/next/hello` |  | ||||||
| @@ -1,88 +0,0 @@ | |||||||
| --- |  | ||||||
| sidebar_position: 2 |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| # Translate your site |  | ||||||
|  |  | ||||||
| Let's translate `docs/intro.md` to French. |  | ||||||
|  |  | ||||||
| ## Configure i18n |  | ||||||
|  |  | ||||||
| Modify `docusaurus.config.js` to add support for the `fr` locale: |  | ||||||
|  |  | ||||||
| ```js title="docusaurus.config.js" |  | ||||||
| export default { |  | ||||||
|   i18n: { |  | ||||||
|     defaultLocale: 'en', |  | ||||||
|     locales: ['en', 'fr'], |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Translate a doc |  | ||||||
|  |  | ||||||
| Copy the `docs/intro.md` file to the `i18n/fr` folder: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ |  | ||||||
|  |  | ||||||
| cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. |  | ||||||
|  |  | ||||||
| ## Start your localized site |  | ||||||
|  |  | ||||||
| Start your site on the French locale: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm run start -- --locale fr |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. |  | ||||||
|  |  | ||||||
| :::caution |  | ||||||
|  |  | ||||||
| In development, you can only use one locale at a time. |  | ||||||
|  |  | ||||||
| ::: |  | ||||||
|  |  | ||||||
| ## Add a Locale Dropdown |  | ||||||
|  |  | ||||||
| To navigate seamlessly across languages, add a locale dropdown. |  | ||||||
|  |  | ||||||
| Modify the `docusaurus.config.js` file: |  | ||||||
|  |  | ||||||
| ```js title="docusaurus.config.js" |  | ||||||
| export default { |  | ||||||
|   themeConfig: { |  | ||||||
|     navbar: { |  | ||||||
|       items: [ |  | ||||||
|         // highlight-start |  | ||||||
|         { |  | ||||||
|           type: 'localeDropdown', |  | ||||||
|         }, |  | ||||||
|         // highlight-end |  | ||||||
|       ], |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The locale dropdown now appears in your navbar: |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Build your localized site |  | ||||||
|  |  | ||||||
| Build your site for a specific locale: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm run build -- --locale fr |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Or build your site to include all the locales at once: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| npm run build |  | ||||||
| ``` |  | ||||||
| @@ -10,8 +10,8 @@ import {themes as prismThemes} from 'prism-react-renderer'; | |||||||
|  |  | ||||||
| /** @type {import('@docusaurus/types').Config} */ | /** @type {import('@docusaurus/types').Config} */ | ||||||
| const config = { | const config = { | ||||||
|   title: 'My Site', |   title: 'Homelabbing', | ||||||
|   tagline: 'Dinosaurs are cool', |   tagline: 'Your guide for a perfect homelab', | ||||||
|   favicon: 'img/favicon.ico', |   favicon: 'img/favicon.ico', | ||||||
|  |  | ||||||
|   // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future |   // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future | ||||||
| @@ -89,14 +89,26 @@ const config = { | |||||||
|         items: [ |         items: [ | ||||||
|           { |           { | ||||||
|             type: 'docSidebar', |             type: 'docSidebar', | ||||||
|             sidebarId: 'tutorialSidebar', |             sidebarId: 'software', | ||||||
|             position: 'left', |             position: 'left', | ||||||
|             label: 'Tutorial', |             label: 'Software', | ||||||
|           }, |           }, | ||||||
|           {to: '/blog', label: 'Blog', position: 'left'}, |  | ||||||
|           { |           { | ||||||
|             href: 'https://github.com/facebook/docusaurus', |             type: 'docSidebar', | ||||||
|             label: 'GitHub', |             sidebarId: 'hardware', | ||||||
|  |             position: 'left', | ||||||
|  |             label: 'Hardware', | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             type: 'docSidebar', | ||||||
|  |             sidebarId: 'knowhow', | ||||||
|  |             position: 'left', | ||||||
|  |             label: 'Know-How', | ||||||
|  |           }, | ||||||
|  |           {to: '/blog', label: 'Blog', position: 'right'}, | ||||||
|  |           { | ||||||
|  |             href: 'https://gitea.js-devop.de/jschaufuss/Homelabbing', | ||||||
|  |             label: 'Gitea', | ||||||
|             position: 'right', |             position: 'right', | ||||||
|           }, |           }, | ||||||
|         ], |         ], | ||||||
| @@ -108,8 +120,16 @@ const config = { | |||||||
|             title: 'Docs', |             title: 'Docs', | ||||||
|             items: [ |             items: [ | ||||||
|               { |               { | ||||||
|                 label: 'Tutorial', |                 label: 'Software', | ||||||
|                 to: '/docs/intro', |                 to: '/docs/software/', | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 label: 'Hardware', | ||||||
|  |                 to: '/docs/hardware/', | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 label: 'Know-How', | ||||||
|  |                 to: '/docs/knowhow/', | ||||||
|               }, |               }, | ||||||
|             ], |             ], | ||||||
|           }, |           }, | ||||||
| @@ -138,8 +158,8 @@ const config = { | |||||||
|                 to: '/blog', |                 to: '/blog', | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 label: 'GitHub', |                 label: 'Gitea', | ||||||
|                 href: 'https://github.com/facebook/docusaurus', |                 href: 'https://gitea.js-devop.de/jschaufuss/Homelabbing', | ||||||
|               }, |               }, | ||||||
|             ], |             ], | ||||||
|           }, |           }, | ||||||
|   | |||||||
							
								
								
									
										44
									
								
								homelabbing/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								homelabbing/package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | { | ||||||
|  |   "name": "homelabbing", | ||||||
|  |   "version": "0.0.0", | ||||||
|  |   "private": true, | ||||||
|  |   "scripts": { | ||||||
|  |     "docusaurus": "docusaurus", | ||||||
|  |     "start": "docusaurus start", | ||||||
|  |     "build": "docusaurus build", | ||||||
|  |     "swizzle": "docusaurus swizzle", | ||||||
|  |     "deploy": "docusaurus deploy", | ||||||
|  |     "clear": "docusaurus clear", | ||||||
|  |     "serve": "docusaurus serve", | ||||||
|  |     "write-translations": "docusaurus write-translations", | ||||||
|  |     "write-heading-ids": "docusaurus write-heading-ids" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "@docusaurus/core": "3.8.1", | ||||||
|  |     "@docusaurus/preset-classic": "3.8.1", | ||||||
|  |     "@mdx-js/react": "^3.0.0", | ||||||
|  |     "clsx": "^2.0.0", | ||||||
|  |     "prism-react-renderer": "^2.3.0", | ||||||
|  |     "react": "^19.0.0", | ||||||
|  |     "react-dom": "^19.0.0" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@docusaurus/module-type-aliases": "3.8.1", | ||||||
|  |     "@docusaurus/types": "3.8.1" | ||||||
|  |   }, | ||||||
|  |   "browserslist": { | ||||||
|  |     "production": [ | ||||||
|  |       ">0.5%", | ||||||
|  |       "not dead", | ||||||
|  |       "not op_mini all" | ||||||
|  |     ], | ||||||
|  |     "development": [ | ||||||
|  |       "last 3 chrome version", | ||||||
|  |       "last 3 firefox version", | ||||||
|  |       "last 5 safari version" | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "engines": { | ||||||
|  |     "node": ">=18.0" | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -15,21 +15,77 @@ | |||||||
|  @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} |  @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} | ||||||
|  */ |  */ | ||||||
| const sidebars = { | const sidebars = { | ||||||
|   // By default, Docusaurus generates a sidebar from the docs folder structure |   software: [ | ||||||
|   tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], |     'software/index', | ||||||
|  |  | ||||||
|   // But you can create a sidebar manually |  | ||||||
|   /* |  | ||||||
|   tutorialSidebar: [ |  | ||||||
|     'intro', |  | ||||||
|     'hello', |  | ||||||
|     { |     { | ||||||
|       type: 'category', |       type: 'category', | ||||||
|       label: 'Tutorial', |       label: 'Mediastack', | ||||||
|       items: ['tutorial-basics/create-a-document'], |       items: [ | ||||||
|  |         'software/mediastack/introduction', | ||||||
|  |         { | ||||||
|  |           type: 'category', | ||||||
|  |           label: 'Jellyfin', | ||||||
|  |           items: [ | ||||||
|  |             'software/mediastack/jellyfin/introduction', | ||||||
|  |             'software/mediastack/jellyfin/installation', | ||||||
|  |           ], | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           type: 'category', | ||||||
|  |           label: 'Jellyseerr', | ||||||
|  |           items: [ | ||||||
|  |             'software/mediastack/jellyseerr/introduction', | ||||||
|  |             'software/mediastack/jellyseerr/installation', | ||||||
|  |           ], | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  |   hardware: [ | ||||||
|  |     'hardware/index', | ||||||
|  |     { | ||||||
|  |       type: 'category', | ||||||
|  |       label: 'Server', | ||||||
|  |       items: [ | ||||||
|  |         { | ||||||
|  |           type: 'category', | ||||||
|  |           label: 'Starter-Server', | ||||||
|  |           items: ['hardware/server/starter-server/index'], | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  |   knowhow: [ | ||||||
|  |     'knowhow/index', | ||||||
|  |     { | ||||||
|  |       type: 'category', | ||||||
|  |       label: 'Linux', | ||||||
|  |       items: [ | ||||||
|  |         { | ||||||
|  |           type: 'category', | ||||||
|  |           label: 'Basics', | ||||||
|  |           items: ['knowhow/linux/basics/index'], | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       type: 'category', | ||||||
|  |       label: 'Docker', | ||||||
|  |       items: [ | ||||||
|  |         'knowhow/docker/index', | ||||||
|  |         { | ||||||
|  |           type: 'category', | ||||||
|  |           label: 'Docker Compose', | ||||||
|  |           items: ['knowhow/docker/docker-compose/index'], | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           type: 'category', | ||||||
|  |           label: 'Docker Swarm Mode', | ||||||
|  |           items: ['knowhow/docker/docker-swarm/index'], | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|     }, |     }, | ||||||
|   ], |   ], | ||||||
|    */ |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| export default sidebars; | export default sidebars; | ||||||
|   | |||||||
| @@ -19,8 +19,8 @@ function HomepageHeader() { | |||||||
|         <div className={styles.buttons}> |         <div className={styles.buttons}> | ||||||
|           <Link |           <Link | ||||||
|             className="button button--secondary button--lg" |             className="button button--secondary button--lg" | ||||||
|             to="/docs/intro"> |             to="/docs/how-to-use-this-guide"> | ||||||
|             Docusaurus Tutorial - 5min ⏱️ |             How to use this Guide | ||||||
|           </Link> |           </Link> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user