Correct README/plan/spec after the apply-failure root cause: nesting/keyctl are settable by the API token on an unprivileged CT and are required at create to avoid the systemd-252 TASK WARNINGS that fails apply. Console step reduced to bind mounts only. README apply uses -target (PBS disk drift). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# Proxmox IaC
|
|
|
|
Terraform으로 관리하는 Proxmox 홈랩 인프라.
|
|
|
|
## 구조
|
|
|
|
| 파일 | 설명 |
|
|
|------|------|
|
|
| `provider.tf` | Proxmox 프로바이더 설정 |
|
|
| `variables.tf` | 공통 변수 |
|
|
| `pbs.tf` | PBS LXC 컨테이너 정의 |
|
|
| `pbs-variables.tf` | PBS 관련 변수 |
|
|
| `hermes.tf` | Hermes Agent LXC 컨테이너 정의 (token-safe skeleton) |
|
|
| `hermes-variables.tf` | Hermes 관련 변수 |
|
|
| `scripts/hermes-bootstrap.sh` | Hermes 인-컨테이너 설치 스크립트 |
|
|
| `outputs.tf` | 출력값 |
|
|
|
|
## 사용법
|
|
|
|
```bash
|
|
# 초기화
|
|
terraform init
|
|
|
|
# tfvars 파일 생성
|
|
cp terraform.tfvars.example terraform.tfvars
|
|
# terraform.tfvars에 실제 토큰 값 입력
|
|
|
|
# 변경사항 확인
|
|
terraform plan
|
|
|
|
# 적용
|
|
terraform apply
|
|
```
|
|
|
|
## 노드 정보
|
|
|
|
| 노드 | IP | 사양 |
|
|
|------|-----|------|
|
|
| gihyeon | 192.168.50.87 | 5600G / 64GB |
|
|
| gihyeon2 | 192.168.50.2 | i3-7100U / 16GB |
|
|
|
|
## SDN 대역
|
|
|
|
- gihyeon: `10.1.10.0/24`
|
|
- gihyeon2: `10.1.20.0/24`
|
|
|
|
## Hermes Agent (LXC #118)
|
|
|
|
litellm(#117, `10.1.10.22:4000`)을 LLM 게이트웨이로 쓰는 Nous Research Hermes Agent.
|
|
배포 4단계. `features(nesting/keyctl)`는 **TF가 설정**(토큰 OK)하고, **bind mount(`mp0/mp1`)만 콘솔 `pct set`**(호스트경로 마운트는 root@pam 필요):
|
|
|
|
1. 호스트 준비(node1 콘솔): `mkdir -p /mnt/pve/hdd/hermes /media/2tb/hermes && chown 100000:100000 /mnt/pve/hdd/hermes /media/2tb/hermes`
|
|
2. `terraform apply -target=proxmox_virtual_environment_download_file.debian12_template_gihyeon -target=proxmox_virtual_environment_container.hermes` (컨테이너 생성 — `nesting`/`keyctl` 포함. `-target`은 PBS 디스크 드리프트 회피)
|
|
3. node1 콘솔(bind mount만): `pct set 118 -mp0 /mnt/pve/hdd/hermes,mp=/data -mp1 /media/2tb/hermes,mp=/fast && pct reboot 118`
|
|
4. 스크립트를 LXC에 넣고 실행 — 호스트(node1)에서 `pct push 118 scripts/hermes-bootstrap.sh /root/hermes-bootstrap.sh --perms 0755` (또는 LXC 콘솔 편집기로 붙여넣기) → LXC 콘솔에서 `bash /root/hermes-bootstrap.sh` → `/opt/hermes-stack/.env` 채우고 `docker compose run --rm hermes setup` → `docker compose up -d`
|
|
|
|
> 비밀값(litellm 키·봇 토큰)은 컨테이너의 `/opt/hermes-stack/.env`에만 두고 repo에 커밋하지 않는다.
|
|
> 왜 `-target`?: `pbs.tf` disk가 실제(48G)와 다르게 16G로 선언돼 있어 무필터 apply는 PBS 디스크 축소를 시도함.
|
|
> TODO: hermes `mp0/mp1`는 TF state에 없음 → 추후 `terraform import`로 따라잡기.
|