Complete restructure from patterns/examples/reference to technology-focused directories: • Created technology-specific directories with comprehensive documentation: - /tdarr/ - Transcoding automation with gaming-aware scheduling - /docker/ - Container management with GPU acceleration patterns - /vm-management/ - Virtual machine automation and cloud-init - /networking/ - SSH infrastructure, reverse proxy, and security - /monitoring/ - System health checks and Discord notifications - /databases/ - Database patterns and troubleshooting - /development/ - Programming language patterns (bash, nodejs, python, vuejs) • Enhanced CLAUDE.md with intelligent context loading: - Technology-first loading rules for automatic context provision - Troubleshooting keyword triggers for emergency scenarios - Documentation maintenance protocols with automated reminders - Context window management for optimal documentation updates • Preserved valuable content from .claude/tmp/: - SSH security improvements and server inventory - Tdarr CIFS troubleshooting and Docker iptables solutions - Operational scripts with proper technology classification • Benefits achieved: - Self-contained technology directories with complete context - Automatic loading of relevant documentation based on keywords - Emergency-ready troubleshooting with comprehensive guides - Scalable structure for future technology additions - Eliminated context bloat through targeted loading 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
154 lines
6.1 KiB
YAML
154 lines
6.1 KiB
YAML
#cloud-config
|
|
#
|
|
# Proxmox Cloud-Init User Data Template
|
|
# Use this as the user data for VM provisioning in Proxmox
|
|
# This automates: updates, SSH keys, Docker installation, security hardening
|
|
#
|
|
|
|
# System configuration
|
|
hostname: homelab-vm
|
|
timezone: America/New_York
|
|
locale: en_US.UTF-8
|
|
|
|
# User configuration
|
|
users:
|
|
- name: cal
|
|
groups: [sudo, docker]
|
|
shell: /bin/bash
|
|
sudo: ALL=(ALL) NOPASSWD:ALL
|
|
ssh_authorized_keys:
|
|
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDVVK02rOeeIw1e7BkGlUtSCVrO66dcYM6wGC6snL/lDSxRWi3ABinOj7a74SJ12uuBjpj1Ui6fGbYLvLHCzrMQaijOKpno4BQmulVLT2hKw6xBszQlA7Z2NpP/CiieUsCYBj+vfn743grLRkb6jgVEw2E3TCkNOord0zfmPp6EIre7clUuPUlP75IZMpttbqXhOTjn8Kfq+8+a/iHln4LLDBJbaz/J31Wxnk+eI5tdVz9nO0LHxMxfTbS0HTAAQaP4RRdU+7f455p1xlSIFhZJ0EEXPPTTy7GU07QonzdppS99G+f95kw2mgkX6RmK4j3y7tw01eNV9eWj/hoSvad4xKpMfQbeKXT9EuqsLgzyoUrxaDhEuGH2bZhxMXiQn7AL5kdKfZAaChoy17B+tcSQdZBc1FyHMVYZoJyPYH5kDQKq1qVkHoyQ/H9szKsAIGXzTGwqWMa/5R5FzgrppwpP+dQMqP84DmlY9EeRISegFEKNz2dTKerB/sG4S1bp4EmNUYfdWZUW7ROdS5KOcjExouBlQmksucZpn3sJ6TLDzBN47dw8SCAPuuZzyAXWVAP7GLu7is+cb+jQMh+Twv6LPwVl6SpnpEJxJAG2ijlFgTL9DlHnrcZB7Rilumb3oO5+uKMae+3EYI7jsvbqZlyCIYF6nOB+La1eEIrQyncqdQ== homelab-cal@nobara-pc
|
|
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCPzqHDgdK9TlN4uzumBZKEOGtxHaQPK2/m7vy/A9bNLRprG7BO0fXsdRi3wRBzPdta/fMERw/jDTsr+Nvofl8y7eaIAemZ3dJ7DsMVdlNCROrnEwAcBS0JnOKfx0YLqqGvTuXGFQuX9PCzGhGSfjOgn6+o2+WdrFW21fvFxMc2mV6Ds1/m8VO9rqPjAqRvuUl3LJPv+/jYHpt7otv4zJOg+guWO7gxUe0lVF7fBW54Cl3e7fMic8MjAdGvkaruTIC4uOqNMYKJjGQEYrlWB4vhI0ZAkLi6vxTm36bwy6jeTy9Mcl9pNM2ATyQzo8rA/OdG5ifHBSd1jrzT5Uj00mntDku73hQptMhakRj2PUUjRXmk1SPYi+Ts6iFg1xc0oeIXmd/lLXfod1K4avAKzuiOyubSVVp1K5RYYPT4tdaSA8yraEA9F23CaD2Cw+AjAGXKcaOuHZvFY8r8I/vb/Y7c+JQr6uAhM1aJnXGFKKwo6YFTJmv93gB5/yTBpmXAkRlwplcxnxvvjA3i/PC3H22XDqJyjmU29F9PjVMga82I4iU1cyJ+3zMbu4e1biJK+jSPYIr+qXdzvvLrrSG/ajg+9flc8HHhEs/A5EAm2naRR739xvKOIQboRsV67UgZ4TH1aJZNzQEkA70qGSGsZNPtVsbzS/4YlHH9CPawnv3ICQ== emergency-homelab-cal@nobara-pc
|
|
|
|
# SSH configuration
|
|
ssh_pwauth: false
|
|
disable_root: true
|
|
ssh_genkeytypes: []
|
|
|
|
# Package management
|
|
package_update: true
|
|
package_upgrade: true
|
|
package_reboot_if_required: true
|
|
|
|
packages:
|
|
- curl
|
|
- wget
|
|
- git
|
|
- vim
|
|
- htop
|
|
- unzip
|
|
- software-properties-common
|
|
- apt-transport-https
|
|
- ca-certificates
|
|
- gnupg
|
|
- lsb-release
|
|
- unattended-upgrades
|
|
|
|
# Docker installation via runcmd
|
|
runcmd:
|
|
# Configure automatic security updates
|
|
- dpkg-reconfigure -plow unattended-upgrades
|
|
|
|
# Remove any old Docker installations
|
|
- apt-get remove -y docker docker-engine docker.io containerd runc || true
|
|
|
|
# Add Docker GPG key and repository
|
|
- mkdir -p /etc/apt/keyrings
|
|
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
|
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
|
|
# Install Docker
|
|
- apt-get update
|
|
- apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
|
|
# Enable Docker service
|
|
- systemctl enable docker
|
|
- systemctl start docker
|
|
|
|
# Add cal user to docker group (will take effect after next login)
|
|
- usermod -aG docker cal
|
|
|
|
# Test Docker installation
|
|
- docker run --rm hello-world
|
|
|
|
# Write configuration files
|
|
write_files:
|
|
# SSH hardening configuration
|
|
- path: /etc/ssh/sshd_config.d/99-homelab-security.conf
|
|
content: |
|
|
PasswordAuthentication no
|
|
PubkeyAuthentication yes
|
|
PermitRootLogin no
|
|
AllowUsers cal
|
|
Protocol 2
|
|
ClientAliveInterval 300
|
|
ClientAliveCountMax 2
|
|
MaxAuthTries 3
|
|
permissions: '0644'
|
|
|
|
# Useful bash aliases for the cal user
|
|
- path: /home/cal/.bash_aliases
|
|
content: |
|
|
# Docker aliases
|
|
alias dps='docker ps'
|
|
alias dlog='docker logs'
|
|
alias dexec='docker exec -it'
|
|
alias dstop='docker stop $(docker ps -q)'
|
|
alias dprune='docker system prune -f'
|
|
|
|
# Docker Compose aliases
|
|
alias dc='docker compose'
|
|
alias dcup='docker compose up -d'
|
|
alias dcdown='docker compose down'
|
|
alias dclogs='docker compose logs -f'
|
|
|
|
# System aliases
|
|
alias ll='ls -alF'
|
|
alias la='ls -A'
|
|
alias l='ls -CF'
|
|
alias ..='cd ..'
|
|
alias ...='cd ../..'
|
|
alias grep='grep --color=auto'
|
|
alias fgrep='fgrep --color=auto'
|
|
alias egrep='egrep --color=auto'
|
|
owner: cal:cal
|
|
permissions: '0644'
|
|
|
|
# Welcome message with system info
|
|
- path: /etc/motd
|
|
content: |
|
|
|
|
╔══════════════════════════════════════════════════════╗
|
|
║ Home Lab VM - Ready ║
|
|
║ ║
|
|
║ Docker & Docker Compose: Installed ✓ ║
|
|
║ SSH Keys: Deployed ✓ ║
|
|
║ Security: Hardened ✓ ║
|
|
║ Updates: Automatic ✓ ║
|
|
║ ║
|
|
║ Quick Commands: ║
|
|
║ docker --version ║
|
|
║ docker compose version ║
|
|
║ docker run --rm hello-world ║
|
|
║ ║
|
|
╚══════════════════════════════════════════════════════╝
|
|
|
|
permissions: '0644'
|
|
|
|
# Final commands to run after everything else
|
|
final_message: |
|
|
VM provisioning completed successfully!
|
|
|
|
Installed software:
|
|
- Docker & Docker Compose
|
|
- Essential system packages
|
|
- Automatic security updates
|
|
|
|
Security configuration:
|
|
- SSH key-based authentication only
|
|
- Password authentication disabled
|
|
- User 'cal' added to docker group
|
|
|
|
Connect via SSH: ssh cal@<vm-ip>
|
|
|
|
System is ready for Docker container deployment! |