kitestacks-homelab/homelab-mastery/build-guide/with-ai/05-all-services.md
kenpat 1e8319ee75 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>
2026-06-19 01:08:43 -05:00

266 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Step 5 — All Remaining Services
**Track:** With AI (Beginner)
**Time for this step:** 48 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)