## Summary - Create tutorials directory structure with index page - Add 5 main tutorials targeting different audiences: - **what-is-blumeops** (Reader, AI) - High-level orientation - **exploring-the-docs** (All) - Navigation guide - **ai-assistance-guide** (AI, Owner) - Context for AI-assisted operations - **contributing** (Contributor) - First contribution workflow - **replicating-blumeops** (Replicator) - Overview for building similar setup - Add 4 replication sub-tutorials: - tailscale-setup, kubernetes-bootstrap, argocd-config, observability-stack - Update README.md to mark Phase 3 complete - Add changelog fragment Each tutorial explicitly identifies its target audiences and links to reference material rather than re-explaining concepts. ## Deployment and Testing - [x] All pre-commit hooks pass (doc-links validates wiki links) - [ ] Build docs via workflow to verify rendering - [ ] Review content for accuracy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/94
3.2 KiB
| title | tags | |||
|---|---|---|---|---|
| core-services |
|
Core Services Setup
Audiences: Replicator
This tutorial walks through setting up the foundational services that your GitOps infrastructure depends on: a git forge and optionally a container registry.
Why Core Services First?
Before Kubernetes and ArgoCD, you need somewhere to store your infrastructure definitions. forgejo provides:
- Git hosting for your GitOps repository
- CI/CD workflows for building and deploying
- A web interface for code review and PRs
The zot container registry is optional but useful for hosting your own container images.
Step 1: Install Forgejo
Forgejo runs directly on your server (not in Kubernetes) because Kubernetes depends on it.
Using Ansible (BlumeOps Approach)
BlumeOps manages Forgejo via an Ansible role. See reference/ansible/roles .
Manual Installation
- Download Forgejo from forgejo.org
- Create a service user and directories
- Configure with
app.ini - Set up as a system service
Key configuration points:
- SSH on a non-standard port (e.g., 2222) to avoid conflicts
- Database (SQLite works fine for personal use)
- Domain and URL settings for your Tailscale hostname
Step 2: Configure SSH Access
Set up SSH for git operations:
# Add your SSH key to Forgejo via the web UI
# Then test access:
ssh -T git@your-server.tailnet.ts.net -p 2222
Step 3: Create Your GitOps Repository
- Create a new repository in Forgejo (e.g.,
infrastructureorhomelab) - Initialize the standard directory structure:
your-repo/
├── ansible/ # Host configuration
│ ├── playbooks/
│ └── roles/
├── argocd/ # Kubernetes GitOps
│ ├── apps/ # ArgoCD Applications
│ └── manifests/ # K8s manifests per service
├── pulumi/ # IaC for Tailscale, DNS
└── docs/ # Documentation
- Push your initial commit
Step 4: Set Up CI/CD Runner (Optional)
Forgejo Actions runs workflows defined in .forgejo/workflows/. To use it:
- Register a runner on your server
- Configure runner to access your build tools
- Create workflow files for builds and deployments
BlumeOps runs a Forgejo runner in Kubernetes - see forgejo for details.
Step 5: Container Registry (Optional)
If you'll build custom container images, set up zot:
- Install Zot on your server
- Configure authentication
- Set up TLS (via Caddy or similar)
For getting started, you can skip this and use public registries.
What You Now Have
- Git hosting for infrastructure code
- SSH access for git operations
- Foundation for CI/CD workflows
- Optionally, a private container registry
Next Steps
- tutorials/replication/kubernetes-bootstrap - Now that you have a git repo, set up your cluster
- Configure Forgejo webhooks for ArgoCD (after ArgoCD is running)
BlumeOps Specifics
BlumeOps' Forgejo setup includes:
- Ansible role for installation and updates
- SSH on port 2222, proxied via Caddy
- Integration with ArgoCD via deploy keys
- Forgejo runner in Kubernetes for CI/CD