Installation
This guide will walk you through the installation process for the self-hosted infrastructure.
Prerequisites
Before starting, ensure you have:
- Reviewed the Requirements
- Prepared your VPS and local servers
- Installed all required tools on your local machine
- Configured SSH access to your servers
Installation Steps
1. Clone the Repository
git clone https://github.com/ZeiZel/self-hosted.git
cd self-hosted
2. Configure Terraform
Create terraform/terraform.tfvars:
cat > terraform/terraform.tfvars << 'EOF'
local_servers = [
{
name = "server"
hostname = "server.local"
ip_address = "192.168.31.100"
role = "master"
ssh_user = "your_user"
ssh_key = "~/.ssh/id_rsa"
}
]
local_clients = []
EOF
3. Initialize Terraform
cd terraform
terraform init
terraform plan
terraform apply -auto-approve
cd ..
4. Configure Ansible Inventory
Update ansible/pangolin/inventory/hosts.yml with your server details.
5. Setup GPG/SOPS
# Create GPG key
gpg --full-generate-key
# Get key ID
GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep -E "^sec" | head -1 | grep -oE "[A-F0-9]{40}")
# Configure .sops.yaml
cat > kubernetes/.sops.yaml << EOF
---
creation_rules:
- pgp: ${GPG_KEY_ID}
EOF
# Set GPG_TTY
export GPG_TTY=$(tty)
6. Deploy with Ansible
cd ansible/pangolin
# Basic local server setup
ansible-playbook -i inventory/hosts.yml playbooks/deploy_local.yml
# Kubernetes cluster deployment
ansible-playbook -i inventory/hosts.yml playbooks/deploy_local_k8s.yml
# VPS deployment
ansible-playbook -i inventory/hosts.yml playbooks/deploy_vps.yml
cd ../..
7. Deploy Kubernetes Services
cd kubernetes
# Initialize helmfile
helmfile init --force
# Install Gateway API
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml
# Setup Vault (optional)
./scripts/vault-setup.sh
# Deploy all services
helmfile -e k8s apply
cd ..
Verification
After installation, verify that all services are running:
# Check Kubernetes pods
kubectl get pods --all-namespaces
# Check services
kubectl get services --all-namespaces
# Check ingress
kubectl get ingress --all-namespaces
Next Steps
- Quick Start Guide - Get started quickly
- Services Documentation - Learn about available services
- Deployment Guides - Detailed deployment instructions