docs: comprehensive homelab-mastery rewrite with full build guides
Complete documentation suite for KiteStacks covering all 11 services across 2-host active-active architecture. Includes beginner track (with AI, 8 files) and advanced track (without AI, 7 files) with time estimates, real troubleshooting cases, and command-by-command explanations. Updates certifications roadmap to reflect July 7 2026 A+ Core 2 exam goal. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e3cfa80d98
commit
1e8319ee75
24 changed files with 5243 additions and 298 deletions
266
homelab-mastery/build-guide/with-ai/05-all-services.md
Normal file
266
homelab-mastery/build-guide/with-ai/05-all-services.md
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
# Step 5 — All Remaining Services
|
||||
|
||||
**Track:** With AI (Beginner)
|
||||
**Time for this step:** 4–8 hours (take breaks — deploy one service at a time)
|
||||
|
||||
In this step you will deploy the remaining eight services. For each one:
|
||||
1. Create the folder
|
||||
2. Create the `docker-compose.yml` file
|
||||
3. Run `docker compose up -d`
|
||||
4. Verify it is working
|
||||
5. Move on to the next one
|
||||
|
||||
For each service, ask your AI to explain the docker-compose file before you run it.
|
||||
|
||||
---
|
||||
|
||||
## How to Use Your AI for Each Service
|
||||
|
||||
For every service in this step, you can say to your AI:
|
||||
|
||||
> "I am setting up [service name] in my KiteStacks homelab. It is a self-hosted [description].
|
||||
> Can you give me a docker-compose.yml for it that joins a network called 'kitestacks'?
|
||||
> I want to understand each part before I run it."
|
||||
|
||||
Then ask follow-up questions about anything you do not understand.
|
||||
|
||||
---
|
||||
|
||||
## Service 4 — Open WebUI + LiteLLM (AI Chat)
|
||||
|
||||
Open WebUI is your ChatGPT-style interface. LiteLLM sits behind it and routes your
|
||||
AI requests to OpenRouter (where you have free model access).
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/kite-openwebui
|
||||
mkdir -p ~/kitestacks-live/docker/kite-litellm
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "I want to set up Open WebUI (ghcr.io/open-webui/open-webui) with LiteLLM as the
|
||||
> backend. LiteLLM should route to OpenRouter. Can you give me docker-compose files
|
||||
> for both? Container names: kite-openwebui and kite-litellm. Network: kitestacks."
|
||||
|
||||
Work with your AI to get the right environment variables (you will need your OpenRouter
|
||||
API key from openrouter.ai).
|
||||
|
||||
Start both:
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/kite-litellm && docker compose up -d
|
||||
cd ~/kitestacks-live/docker/kite-openwebui && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `ai.yourdomain.com` and create your admin account.
|
||||
|
||||
---
|
||||
|
||||
## Service 5 — Karakeep (Bookmarks)
|
||||
|
||||
Karakeep saves bookmarks, articles, and links. It uses a headless Chrome browser
|
||||
to capture the full content of pages you save.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/karakeep
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "I want to set up Karakeep (ghcr.io/karakeep/karakeep) for bookmark management.
|
||||
> It needs a headless Chrome container (browserless/chrome) for page capture and
|
||||
> a Meilisearch container for search. Container names: karakeep, karakeep-chrome,
|
||||
> karakeep-meilisearch. All on the 'kitestacks' network. Give me one docker-compose.yml
|
||||
> for all three."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/karakeep && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `links.yourdomain.com`.
|
||||
|
||||
**Important:** When you set up SSO for Karakeep in Step 6, note that Karakeep uses
|
||||
NextAuth.js with the provider ID `custom` — so the OAuth2 redirect URL will be
|
||||
`https://links.yourdomain.com/api/auth/callback/custom` (not `/callback/authentik`).
|
||||
This is a common mistake. Make a note of it now.
|
||||
|
||||
---
|
||||
|
||||
## Service 6 — Kavita (eBook Reader)
|
||||
|
||||
Kavita lets you read ebooks, manga, and comics from a library you maintain.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/kavita/library/books
|
||||
mkdir -p ~/kitestacks-live/docker/kavita/config
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "I want to set up Kavita (jvmilazz0/kavita) as an ebook reader. Container name: kavita.
|
||||
> The library should be mounted from ./library/books into the container. Config directory
|
||||
> at ./config. Network: kitestacks. Give me the docker-compose.yml."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/kavita && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `kavita.yourdomain.com` and create your admin account. Add your books by placing
|
||||
ebook files in `~/kitestacks-live/docker/kavita/library/books/` and scanning the library
|
||||
in Kavita's settings.
|
||||
|
||||
**Important for SSO:** Kavita's OIDC settings must be configured through the Kavita web UI,
|
||||
not by editing files directly. The Authority URL must end with a trailing slash:
|
||||
`https://auth.yourdomain.com/application/o/kavita/`
|
||||
|
||||
---
|
||||
|
||||
## Service 7 — Grafana (Monitoring Dashboards)
|
||||
|
||||
Grafana shows you beautiful graphs of your server's CPU, RAM, network, and disk usage.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/grafana/provisioning/datasources
|
||||
mkdir -p ~/kitestacks-live/docker/grafana/provisioning/dashboards
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "I want to set up Grafana (grafana/grafana) with Prometheus as the data source.
|
||||
> I want the 'Node Exporter Full' dashboard (id 1860) to auto-load via provisioning.
|
||||
> Container name: grafana. Network: kitestacks. Give me the docker-compose.yml and
|
||||
> the provisioning YAML files for the datasource and dashboard."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/grafana && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `grafana.yourdomain.com`.
|
||||
|
||||
**Also set up Prometheus and node-exporter (Grafana needs these for data):**
|
||||
|
||||
**Ask your AI:**
|
||||
> "I want to set up Prometheus to scrape metrics from node-exporter running on the same
|
||||
> host. Container names: prometheus and node-exporter. Network: kitestacks. Give me the
|
||||
> docker-compose.yml and prometheus.yml config file."
|
||||
|
||||
---
|
||||
|
||||
## Service 8 — Uptime Kuma (Status Page)
|
||||
|
||||
Uptime Kuma monitors all your services and shows a public status page.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/uptime-kuma
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "Set up Uptime Kuma (louislam/uptime-kuma). Container name: uptime-kuma. Network: kitestacks.
|
||||
> Use a named volume called 'uptime-kuma' for data. Give me the docker-compose.yml."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/uptime-kuma && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `status.yourdomain.com`, create your admin account, then add HTTP monitors for
|
||||
each of your eleven services. Set each monitor to check every 60 seconds.
|
||||
|
||||
**Add a status page:**
|
||||
- In Uptime Kuma → Status Pages → New Status Page
|
||||
- Slug: `homelab`
|
||||
- Add all your monitors to it
|
||||
- Your public status page will be at `status.yourdomain.com/status/homelab`
|
||||
|
||||
---
|
||||
|
||||
## Service 9 — BookStack (Wiki)
|
||||
|
||||
BookStack is a clean wiki for writing and organizing documentation.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/bookstack
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "Set up BookStack (lscr.io/linuxserver/bookstack) with its own MariaDB database.
|
||||
> Container names: bookstack and bookstack-db. APP_URL should be https://wiki.yourdomain.com.
|
||||
> Network: kitestacks. Give me the docker-compose.yml."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/bookstack && docker compose up -d
|
||||
```
|
||||
|
||||
BookStack takes about a minute to start on first run. Visit `wiki.yourdomain.com`.
|
||||
Default login: `admin@admin.com` / `password` — change this immediately.
|
||||
|
||||
---
|
||||
|
||||
## Service 10 — OSTicket (Help Desk)
|
||||
|
||||
OSTicket is a help desk and ticketing system.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/osticket
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "Set up OSTicket using the docker image campbellsoftwaresolutions/osticket with its
|
||||
> own MySQL database. Container names: osticket-app and osticket-db. Network: kitestacks.
|
||||
> What environment variables do I need? Give me the docker-compose.yml."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/osticket && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `tasks.yourdomain.com` to complete the web-based setup.
|
||||
|
||||
---
|
||||
|
||||
## Service 11 — Portainer (Docker Management)
|
||||
|
||||
Portainer gives you a visual dashboard to manage all your containers.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/kitestacks-live/docker/portainer
|
||||
```
|
||||
|
||||
**Ask your AI:**
|
||||
> "Set up Portainer CE (portainer/portainer-ce). Container name: portainer. Port 9443 (HTTPS).
|
||||
> Mount the Docker socket (/var/run/docker.sock) so it can manage containers.
|
||||
> Network: kitestacks. Give me the docker-compose.yml."
|
||||
|
||||
```bash
|
||||
cd ~/kitestacks-live/docker/portainer && docker compose up -d
|
||||
```
|
||||
|
||||
Visit `portainer.yourdomain.com`. Create your admin account.
|
||||
|
||||
---
|
||||
|
||||
## Checkpoint
|
||||
|
||||
Run this to see all your containers:
|
||||
```bash
|
||||
docker ps --format "table {{.Names}}\t{{.Status}}"
|
||||
```
|
||||
|
||||
You should see all of these running:
|
||||
- cloudflared
|
||||
- homepage
|
||||
- forgejo
|
||||
- authentik + authentik-worker
|
||||
- kite-openwebui + kite-litellm
|
||||
- karakeep + karakeep-chrome + karakeep-meilisearch
|
||||
- kavita
|
||||
- grafana + prometheus + node-exporter
|
||||
- uptime-kuma
|
||||
- bookstack + bookstack-db
|
||||
- osticket-app + osticket-db
|
||||
- portainer
|
||||
- authentik-postgres + authentik-redis
|
||||
|
||||
If any are missing or show as unhealthy, check their logs:
|
||||
```bash
|
||||
docker logs <container-name>
|
||||
```
|
||||
|
||||
Ask your AI to help diagnose any errors.
|
||||
|
||||
---
|
||||
|
||||
**Next:** [Step 6 — Single Sign-On (SSO)](06-sso.md)
|
||||
Loading…
Add table
Add a link
Reference in a new issue