diff --git a/homelabbing/docs/hardware/index.md b/homelabbing/docs/hardware/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/hardware/server/index.md b/homelabbing/docs/hardware/server/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/hardware/server/starter-server/index.md b/homelabbing/docs/hardware/server/starter-server/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/how-to-use-this-guide.md b/homelabbing/docs/how-to-use-this-guide.md new file mode 100644 index 0000000..5129500 --- /dev/null +++ b/homelabbing/docs/how-to-use-this-guide.md @@ -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. diff --git a/homelabbing/docs/intro.md b/homelabbing/docs/intro.md deleted file mode 100644 index 45e8604..0000000 --- a/homelabbing/docs/intro.md +++ /dev/null @@ -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. diff --git a/homelabbing/docs/knowhow/docker/docker-compose/index.md b/homelabbing/docs/knowhow/docker/docker-compose/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/knowhow/docker/docker-swarm/index.md b/homelabbing/docs/knowhow/docker/docker-swarm/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/knowhow/docker/index.md b/homelabbing/docs/knowhow/docker/index.md new file mode 100644 index 0000000..e255d00 --- /dev/null +++ b/homelabbing/docs/knowhow/docker/index.md @@ -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/ diff --git a/homelabbing/docs/knowhow/index.md b/homelabbing/docs/knowhow/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/knowhow/linux/basics/index.md b/homelabbing/docs/knowhow/linux/basics/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/knowhow/linux/index.md b/homelabbing/docs/knowhow/linux/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/software/img/mediastack-diagram.png b/homelabbing/docs/software/img/mediastack-diagram.png new file mode 100644 index 0000000..abf15b6 Binary files /dev/null and b/homelabbing/docs/software/img/mediastack-diagram.png differ diff --git a/homelabbing/docs/software/index.md b/homelabbing/docs/software/index.md new file mode 100644 index 0000000..e69de29 diff --git a/homelabbing/docs/software/mediastack/introduction.md b/homelabbing/docs/software/mediastack/introduction.md new file mode 100644 index 0000000..a3db256 --- /dev/null +++ b/homelabbing/docs/software/mediastack/introduction.md @@ -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: + +![Media Stack Architecture](../img/mediastack-diagram.png) + +**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 diff --git a/homelabbing/docs/software/mediastack/jellyfin/installation.md b/homelabbing/docs/software/mediastack/jellyfin/installation.md new file mode 100644 index 0000000..6e0d749 --- /dev/null +++ b/homelabbing/docs/software/mediastack/jellyfin/installation.md @@ -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://: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 diff --git a/homelabbing/docs/software/mediastack/jellyfin/introduction.md b/homelabbing/docs/software/mediastack/jellyfin/introduction.md new file mode 100644 index 0000000..8bbf21c --- /dev/null +++ b/homelabbing/docs/software/mediastack/jellyfin/introduction.md @@ -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 diff --git a/homelabbing/docs/software/mediastack/jellyseerr/installation.md b/homelabbing/docs/software/mediastack/jellyseerr/installation.md new file mode 100644 index 0000000..6a34f5e --- /dev/null +++ b/homelabbing/docs/software/mediastack/jellyseerr/installation.md @@ -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://: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 diff --git a/homelabbing/docs/software/mediastack/jellyseerr/introduction.md b/homelabbing/docs/software/mediastack/jellyseerr/introduction.md new file mode 100644 index 0000000..b356b5b --- /dev/null +++ b/homelabbing/docs/software/mediastack/jellyseerr/introduction.md @@ -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 diff --git a/homelabbing/docs/tutorial-basics/_category_.json b/homelabbing/docs/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55..0000000 --- a/homelabbing/docs/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/homelabbing/docs/tutorial-basics/congratulations.md b/homelabbing/docs/tutorial-basics/congratulations.md deleted file mode 100644 index 04771a0..0000000 --- a/homelabbing/docs/tutorial-basics/congratulations.md +++ /dev/null @@ -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) diff --git a/homelabbing/docs/tutorial-basics/create-a-blog-post.md b/homelabbing/docs/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index 550ae17..0000000 --- a/homelabbing/docs/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -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). diff --git a/homelabbing/docs/tutorial-basics/create-a-document.md b/homelabbing/docs/tutorial-basics/create-a-document.md deleted file mode 100644 index c22fe29..0000000 --- a/homelabbing/docs/tutorial-basics/create-a-document.md +++ /dev/null @@ -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'], - }, - ], -}; -``` diff --git a/homelabbing/docs/tutorial-basics/create-a-page.md b/homelabbing/docs/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac3..0000000 --- a/homelabbing/docs/tutorial-basics/create-a-page.md +++ /dev/null @@ -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 ( - -

My React page

-

This is a React page

-
- ); -} -``` - -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). diff --git a/homelabbing/docs/tutorial-basics/deploy-your-site.md b/homelabbing/docs/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee0..0000000 --- a/homelabbing/docs/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -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)**). diff --git a/homelabbing/docs/tutorial-basics/markdown-features.mdx b/homelabbing/docs/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 35e0082..0000000 --- a/homelabbing/docs/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -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 -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -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 -![Docusaurus logo](./img/docusaurus.png) -``` - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - -````md -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` -```` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## 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}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/homelabbing/docs/tutorial-extras/_category_.json b/homelabbing/docs/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc1..0000000 --- a/homelabbing/docs/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/homelabbing/docs/tutorial-extras/img/docsVersionDropdown.png b/homelabbing/docs/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164..0000000 Binary files a/homelabbing/docs/tutorial-extras/img/docsVersionDropdown.png and /dev/null differ diff --git a/homelabbing/docs/tutorial-extras/img/localeDropdown.png b/homelabbing/docs/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc..0000000 Binary files a/homelabbing/docs/tutorial-extras/img/localeDropdown.png and /dev/null differ diff --git a/homelabbing/docs/tutorial-extras/manage-docs-versions.md b/homelabbing/docs/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index ccda0b9..0000000 --- a/homelabbing/docs/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -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: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## 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` diff --git a/homelabbing/docs/tutorial-extras/translate-your-site.md b/homelabbing/docs/tutorial-extras/translate-your-site.md deleted file mode 100644 index b5a644a..0000000 --- a/homelabbing/docs/tutorial-extras/translate-your-site.md +++ /dev/null @@ -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: - -![Locale Dropdown](./img/localeDropdown.png) - -## 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 -``` diff --git a/homelabbing/docusaurus.config.js b/homelabbing/docusaurus.config.js index c1d5534..4933eb5 100644 --- a/homelabbing/docusaurus.config.js +++ b/homelabbing/docusaurus.config.js @@ -10,8 +10,8 @@ import {themes as prismThemes} from 'prism-react-renderer'; /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'My Site', - tagline: 'Dinosaurs are cool', + title: 'Homelabbing', + tagline: 'Your guide for a perfect homelab', favicon: 'img/favicon.ico', // Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future @@ -89,14 +89,26 @@ const config = { items: [ { type: 'docSidebar', - sidebarId: 'tutorialSidebar', + sidebarId: 'software', position: 'left', - label: 'Tutorial', + label: 'Software', }, - {to: '/blog', label: 'Blog', position: 'left'}, { - href: 'https://github.com/facebook/docusaurus', - label: 'GitHub', + type: 'docSidebar', + 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', }, ], @@ -108,8 +120,16 @@ const config = { title: 'Docs', items: [ { - label: 'Tutorial', - to: '/docs/intro', + label: 'Software', + to: '/docs/software/', + }, + { + label: 'Hardware', + to: '/docs/hardware/', + }, + { + label: 'Know-How', + to: '/docs/knowhow/', }, ], }, @@ -138,8 +158,8 @@ const config = { to: '/blog', }, { - label: 'GitHub', - href: 'https://github.com/facebook/docusaurus', + label: 'Gitea', + href: 'https://gitea.js-devop.de/jschaufuss/Homelabbing', }, ], }, diff --git a/homelabbing/package.json b/homelabbing/package.json new file mode 100644 index 0000000..0c64034 --- /dev/null +++ b/homelabbing/package.json @@ -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" + } +} diff --git a/homelabbing/sidebars.js b/homelabbing/sidebars.js index f77355c..49f6a76 100644 --- a/homelabbing/sidebars.js +++ b/homelabbing/sidebars.js @@ -15,21 +15,77 @@ @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - /* - tutorialSidebar: [ - 'intro', - 'hello', + software: [ + 'software/index', { type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], + label: 'Mediastack', + 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; diff --git a/homelabbing/src/pages/index.js b/homelabbing/src/pages/index.js index a8c61f2..558c25d 100644 --- a/homelabbing/src/pages/index.js +++ b/homelabbing/src/pages/index.js @@ -19,8 +19,8 @@ function HomepageHeader() {
- Docusaurus Tutorial - 5min ⏱️ + to="/docs/how-to-use-this-guide"> + How to use this Guide