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

7.9 KiB
Raw Blame History

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

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:

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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:

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:

docker logs <container-name>

Ask your AI to help diagnose any errors.


Next: Step 6 — Single Sign-On (SSO)