# Claude Code Installation — LXC 108 Ghost Blog
Protokoll der Installation, durchgeführt am 2026-06-16 nach Auftrag `Claude-Code-Prompt-LXC108.md`.
---
## Infrastruktur
| Parameter | Wert |
|---|---|
| Proxmox-Host | `pve` (
[email protected]) |
| LXC ID | 108 |
| Hostname | `ghost-blog` |
| Template | Ubuntu 22.04 LTS (`ubuntu-22.04-standard_22.04-1_amd64.tar.zst`) |
| RAM | 512 MB |
| Swap | 512 MB |
| Disk | 10 GB (`local-lvm`) |
| CPU | 1 vCore |
| Netzwerk | DHCP, Bridge `vmbr0` |
| IP | **192.168.2.196** |
| Unprivileged | ja |
| Start at boot | ja |
---
## Installierte Software
| Software | Version | Hinweis |
|---|---|---|
| Ubuntu | 22.04.5 LTS | |
| Node.js | **22.22.3** | Abweichend vom Plan (Node 18) — siehe „Abweichungen" |
| npm | 10.9.8 | |
| MySQL | 8.0.46 | Root-Login lokal abgesichert |
| Ghost-CLI | 1.29.3 | Update nötig (initial 1.28.4 zu alt) |
| Ghost | 6.45.0 | Process Manager: `local`, Environment: `development` |
---
## Durchgeführte Schritte
1. **Template laden:** `pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst`
2. **LXC erstellen:**
```bash
pct create 108 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
--hostname ghost-blog --memory 512 --swap 512 --cores 1 \
--rootfs local-lvm:10 --net0 name=eth0,bridge=vmbr0,ip=dhcp,type=veth \
--unprivileged 1 --onboot 1 --features nesting=1
```
3. **Start + IP ermitteln:** `pct start 108` → DHCP-IP `192.168.2.196`
4. **System-Update:** `apt update && apt upgrade -y`, Locale-Fix (`en_US.UTF-8`)
5. **Node.js 22 LTS:** NodeSource-Setup-Skript (`setup_22.x`), `apt install nodejs`
6. **MySQL 8:** `apt install mysql-server`, danach non-interaktive Absicherung per SQL (Root-Passwort setzen, anonyme User + `test`-DB entfernen) statt interaktivem `mysql_secure_installation`
7. **Ghost-CLI:** `npm install -g ghost-cli`, später Update auf `ghost-cli@latest`
8. **Ghost-User:** dedizierter Linux-User `ghost` angelegt (Gruppe `sudo`), Owner von `/var/www/ghost`
9. **Ghost-Installation:** `ghost install local` als User `ghost` ausgeführt (SQLite-Backend, Standard bei `local`-Install)
10. **Erreichbarkeit korrigiert:** Ghost band sich initial nur an `127.0.0.1` → Konfiguration angepasst:
```bash
ghost config url http://192.168.2.196:2368
ghost config server.host 0.0.0.0
ghost restart
```
11. **Setup-Wizard:** unter `http://192.168.2.196:2368/ghost/` durch den Nutzer abgeschlossen ✅
---
## Abweichungen vom ursprünglichen Plan
| Plan | Tatsächlich | Grund |
|---|---|---|
| Node.js 18 LTS | Node.js 22 LTS | Ghost v6.45.0 benötigt Node `^22.13.1`; Node 18 ist zudem EOL (April 2025). Nach Rückfrage umgesetzt. |
| `mysql_secure_installation` (interaktiv) | Äquivalente SQL-Befehle | Interaktives Tool lässt sich nicht automatisiert per SSH ausführen |
| `chown <user>:www-data` (Platzhalter) | Dedizierter User `ghost`, Owner `ghost:ghost` | Ghost-CLI verweigert Installation als root; Platzhalter im Originalplan war nicht aufgelöst |
| Ghost-CLI Version offen | 1.28.4 → 1.29.3 | 1.28.4 inkompatibel zu Ghost v6.45.0 (benötigt `^1.29.1`) |
| Server-Bindung nicht spezifiziert | `server.host 0.0.0.0` + `url` auf LAN-IP gesetzt | `ghost install local` bindet standardmäßig nur an `127.0.0.1` → von außen unerreichbar |
---
## Zugangsdaten
- **MySQL Root-Passwort:** `zBEuxEuPbSSGr9779ln0` (lokal in LXC 108, nicht öffentlich erreichbar; aktuell ungenutzt, da Ghost auf SQLite läuft)
- **Ghost Admin:** im Setup-Wizard durch Nutzer angelegt (nicht hier dokumentiert)
---
## Status zum Abschluss
- ✅ Ghost läuft, Status `running (development)`
- ✅ Erreichbar unter `http://192.168.2.196:2368/`
- ✅ Setup-Wizard abgeschlossen
- ⏳ MySQL als DB-Backend noch nicht genutzt (Ghost läuft auf SQLite)
- ⏳ Inhalte aus `obeco-policom.blogspot.com` noch nicht migriert
Siehe auch: [PROJEKT.md](PROJEKT.md)