Files
private-ai-platform/README.md
Hrankin, Aleksandr (contracted) f243f440c3 init
2026-02-19 11:34:13 +00:00

272 lines
5.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.
# 🧠 DevOps Infra Stack --- Proxmox + Ceph + Kubernetes + DNS
Fully automated self-hosted infrastructure.
![Project Logo](documentation/images/arch-diagram.jpg)
The project deploys:
- Proxmox infrastructure
- Golden VM templates via
Packer - VM provisioning via Terraform
- Hardened nodes (SSH, nftables,
fail2ban)
- DNS (PowerDNS)
- NTP (chrony hierarchy)
- Ceph cluster
- Kubernetes cluster
- K8s apps (MetalLB, ingress, postgres operator,
valkey)
Everything is deployed via Makefile + Ansible + Terraform + Packer.
------------------------------------------------------------------------
# 🏗 Architecture
Infrastructure components:
- Proxmox host (bare metal)
- LXC packer builder
- Golden VM templates
- VM nodes:
- DNS
- NTP
- Ceph (3 nodes)
- Kubernetes master
- Kubernetes worker
- K8s stack:
- MetalLB
- nginx ingress
- Crunchy Postgres Operator
- Valkey (Redis alternative)
------------------------------------------------------------------------
# 📦 Technology Stack
- Proxmox VE
- Terraform
- Ansible
- Packer
- Docker + Docker Compose (for DNS)
- Ceph
- Kubernetes
- Helm
- PowerDNS
- Chrony
- nftables + fail2ban hardening
------------------------------------------------------------------------
# 🚀 Full Infrastructure Bootstrap
Main entrypoint:
``` bash
make -f bootstrap.mk
```
It will execute:
1. VM creation
2. Hardening
3. DNS setup
4. NTP setup
5. Ceph cluster
------------------------------------------------------------------------
# 🧱 Deployment Stages
## 0. Create LXC + Packer
``` bash
make -f 00_create_and_setup_lxc_container_with_packer.mk
```
- Download LXC template
- Create LXC via Terraform
- Install packer inside LXC
------------------------------------------------------------------------
## 1. Golden VM template
``` bash
make -f 01_create_vm_golden_template.mk
```
- Download ISO
- Upload packer config
- Build golden image
- Shut down packer LXC
------------------------------------------------------------------------
## 2. Create VMs
``` bash
make -f 02_create_vms.mk
```
- Enable cloud-init snippets
- Terraform creates VMs
------------------------------------------------------------------------
## 3. Harden nodes
``` bash
make -f 03_harden_vms.mk
```
- Remove packer user
- SSH hardening
- nftables
- fail2ban
------------------------------------------------------------------------
## 4. DNS
``` bash
make -f 04_setup_dns.mk
```
- PowerDNS install
- Zones + records via Terraform
- systemd-resolved config
------------------------------------------------------------------------
## 5. NTP
``` bash
make -f 05_setup_ntp.mk
```
Hierarchy:
- edge NTP server (proxmox)
- core NTP server
- clients use core NTP server
------------------------------------------------------------------------
## 6. Ceph
``` bash
make -f 06_setup_ceph.mk
```
- install
- bootstrap
- share keys
- cluster init
------------------------------------------------------------------------
## 7. Kubernetes
``` bash
make -f 07_setup_k8s.mk
```
After installation:
``` bash
ssh user@k8smasternode -p 10525
```
Replace cluster endpoint with localhost tunnel.
Then:
``` bash
terraform apply -target=module.metallb_helm
terraform apply -target=module.crunchy_operator
terraform apply
```
Get credentials:
``` bash
# postgres
kubectl -n postgres-operator get secret hippo-pguser-gitlab -o jsonpath='{.data.user}' | base64 -d; echo
# valkey
kubectl -n valkey get secret valkey-users -o jsonpath='{.data.default}' | base64 -d; echo
```
------------------------------------------------------------------------
# 📁 Project Structure
ansible/
terraform/
packer/
makefiles/
bootstrap.mk
------------------------------------------------------------------------
# 🔐 Requirements
Before running:
- SSH access to Proxmox
- Proxmox API token
- terraform.tfvars filled
- inventory.ini filled
- kubeconfig path specified
------------------------------------------------------------------------
# 🔭 Planned Services & Future Stack
The following services are planned for the next deployment stages:
- **NetBird** --- internal VPN mesh network (currently working on this
stage)
- **Keycloak** --- unified authentication and identity provider across
services
- **Monitoring stack (Grafana, Loki, Prometheus, Trickster)** ---
monitoring and observability tools\
*(previously deployed, but not yet integrated into this project)*
- **FreeIPA** --- centralized user and identity management inside
operating systems
- **Vault** --- centralized storage for passwords, tokens, and
operational credentials
- **OpenNebula** --- additional virtualization layer for providing
user VM spaces\
*(similar to AWS EC2 for internal infrastructure)*
- **Nextcloud + LibreOffice** --- Google Cloud alternative for
collaborative document editing\
*(Nextcloud deployed previously, but not yet within this project)*
- **Element + Matrix** --- Telegram-like communication platform\
*(stack deployed previously, but not yet integrated into this
project)*
- **LLM (local language model)** --- neural network for text
processing\
*(GPT2 already tested; LLaMA 7B planned as MVP depending on
available resources)*\
Future usage:
- LibreOffice document assistant
- Matrix/Element chatbot integration
- **Kafka** --- message queue layer between LibreOffice, Element, and
LLM services\
Ensures reliable request delivery and acts as a service integration
layer
- **OCR tools** --- document recognition and conversion pipeline\
Enables transforming documents into formats suitable for LLM
processing and search
------------------------------------------------------------------------
# 🧠 Project Idea
Self-hosted cloud platform, own mini cloud. Fully autonomous infrastructure.
# 👤 Author
Aleksandr Hrankin