fix photos

This commit is contained in:
Graham McIntire 2025-09-13 10:58:18 -05:00
parent 4d376c353f
commit c959b4581c
2 changed files with 144 additions and 0 deletions

140
CLAUDE.md Normal file
View file

@ -0,0 +1,140 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Repository Overview
This is a multi-environment infrastructure-as-code repository managing:
- **Ansible**: Configuration management for servers across multiple environments (VNTX, home, app servers)
- **Terraform**: DNS infrastructure management across DNSimple, Porkbun, and PowerDNS
- **Kubernetes**: K3s cluster deployments on Proxmox with Flatcar/Debian
- **Home Lab**: K3s configurations with Tailscale integration
## Common Commands
### Ansible Operations
```bash
# Run main playbook
cd ansible && ./run.sh
# Bootstrap new host
make bootstrap-init HOSTNAME=hostname ANSIBLE_HOST=ip_address
# Run specific playbook
ansible-playbook general.yml
# Run with specific tags
ansible-playbook -t caddy general.yml
# Gather facts from all hosts
make facts
```
### Terraform Operations
```bash
cd terraform
terraform init
terraform plan
terraform apply
# Format terraform files before committing
terraform fmt
```
### K3s Cluster Deployment (VNTX)
```bash
cd clusters/vntx
export TF_VAR_proxmox_password="your-password"
./deploy.sh
# Manual steps if needed:
cd terraform && tofu apply
cd ../ansible && ansible-playbook -i inventory.yml k3s-install.yml
export KUBECONFIG=./kubeconfig
kubectl get nodes
```
## Architecture
### Directory Structure
- `ansible/` - Ansible playbooks and roles for server configuration
- `roles/` - Reusable roles (base, caddy, docker, k3s, resolvers, etc.)
- `group_vars/` - Group-specific variables
- `host_vars/` - Host-specific variables
- Main playbooks: `playbook.yml`, `general.yml`, `bootstrap.yml`
- `terraform/` - DNS infrastructure management
- Manages domains: w5isp.com, vntx.net/org, manero.org, mcintire.me, gridmap.org
- Providers: DNSimple, Porkbun, PowerDNS (reverse DNS)
- `clusters/vntx/` - K3s cluster on Proxmox
- `terraform/` - VM provisioning on Proxmox
- `ansible/` - K3s installation and configuration
- `infrastructure/` - Services like Icinga2, FreeRADIUS, Unbound
- `system/` - Core services: MetalLB, Longhorn, cert-manager
- `home/` - Home lab K3s configurations
- `k3s/` - K3s service definitions with Tailscale integration
- `cluster/` - Application deployments (Forgejo, Node-RED, etc.)
### Key Infrastructure Services
**Monitoring**: Icinga2 with MariaDB backend
**DNS**: Unbound resolvers, PowerDNS for reverse zones
**VPN**: Tailscale integration across environments
**Web Proxy**: Caddy for reverse proxy and SSL termination
**Storage**: Longhorn distributed storage for K3s
**Load Balancing**: MetalLB for bare-metal K3s
### Security Notes
- Ansible user (UID 10001) with passwordless sudo
- SSH keys fetched from GitHub for authentication
- Tailscale requires `TAILSCALE_KEY` environment variable
- Terraform credentials should use environment variables (TF_VAR_*)
## Development Workflow
### Adding New Hosts
1. Add host to `ansible/hosts` inventory
2. Create host_vars file if needed
3. Run bootstrap: `make bootstrap-init HOSTNAME=x ANSIBLE_HOST=y`
4. Apply configuration: `ansible-playbook -l hostname general.yml`
### DNS Changes
1. Edit appropriate `terraform/dns_*.tf` file
2. Run `terraform fmt` to format
3. Review with `terraform plan`
4. Apply with `terraform apply`
### K3s Service Deployment
1. Create namespace if needed
2. Deploy storage (PVC) if stateful
3. Create ConfigMaps/Secrets
4. Deploy application
5. Configure Service/Ingress for access
## Testing
### Ansible
```bash
# Syntax check
ansible-playbook --syntax-check playbook.yml
# Dry run
ansible-playbook --check playbook.yml
# Test on specific host
ansible-playbook -l hostname playbook.yml
```
### Terraform
```bash
terraform validate
terraform plan
```
### Kubernetes
```bash
kubectl apply --dry-run=client -f manifest.yaml
kubectl diff -f manifest.yaml
```

View file

@ -19,3 +19,7 @@
truck.w5isp.com {
reverse_proxy http://100.105.74.2
}
photos.w5isp.com {
reverse_proxy http://10.0.16.1:2283
}