Compare commits

1 Commits
main ... dev

Author SHA1 Message Date
41adec1bf7 basic structure 2025-08-04 23:13:23 +02:00
34 changed files with 717 additions and 569 deletions

View File

View 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 youre 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.

View File

@@ -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.

View 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 Dockers 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/

View File

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

View File

View 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:
![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

View File

@@ -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

View File

@@ -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 havent 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

View File

@@ -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

View File

@@ -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

View File

@@ -1,8 +0,0 @@
{
"label": "Tutorial - Basics",
"position": 2,
"link": {
"type": "generated-index",
"description": "5 minutes to learn the most important Docusaurus concepts."
}
}

View File

@@ -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)

View File

@@ -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).

View File

@@ -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'],
},
],
};
```

View File

@@ -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).

View File

@@ -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)**).

View File

@@ -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 <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> !

View File

@@ -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

View File

@@ -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`

View File

@@ -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
```

View File

@@ -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',
},
],
},

44
homelabbing/package.json Normal file
View 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"
}
}

View File

@@ -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;

View File

@@ -19,8 +19,8 @@ function HomepageHeader() {
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/intro">
Docusaurus Tutorial - 5min
to="/docs/how-to-use-this-guide">
How to use this Guide
</Link>
</div>
</div>