# ONOXSOFT Installer

Phase 1 Epic 2 + Epic 17 deliverable. AlmaLinux 9 sıfır kurulumdan tüm stack'i ayağa kaldırır.

## Durum

**Bu klasör şu an iskelet.** Her `install/lib/*.sh` dosyası TODO işaretleriyle dolu. Phase 0 sysadmin learning haftalarından doğrulanan komutlar buraya kademeli olarak eklenecek.

### Phase 0 → Installer Eşlemesi

| Phase 0 Hafta | Installer Modülü | Status |
|---|---|---|
| 1 — AlmaLinux temel | `lib/preflight.sh` (OS check, RAM, disk, hostname) | 🟢 SKELETON |
| 2 — systemd | Tüm `lib/*.sh` (`systemctl enable/start` pattern) | 🟢 SKELETON |
| 3 — User/quota | `lib/panel.sh` (onx_panel user), Epic 4 sysapi | 🟢 SKELETON |
| 4 — Bash | `lib/common.sh` (logging, run wrapper, traps) | ✅ COMPLETE |
| 5 — firewalld | `lib/firewall.sh` | 🟡 STRUCTURED — TODO içerik |
| 6-7 — SELinux | `lib/selinux.sh` | 🟡 STRUCTURED — TODO içerik |
| 8 — Apache | `lib/configure.sh::configure_apache` | 🟡 STRUCTURED — TODO içerik |
| 9 — PHP-FPM | `lib/configure.sh::configure_php_fpm` | 🟡 STRUCTURED — TODO içerik |
| 10 — MariaDB | `lib/configure.sh::configure_mariadb` | 🟡 STRUCTURED — TODO içerik |
| 11 — PowerDNS | `lib/configure.sh::configure_powerdns` | 🟡 STRUCTURED — TODO içerik |
| 12 — certbot/acme | `lib/packages.sh::packages_install_acme` | 🟡 STRUCTURED — TODO içerik |
| 13 — SSH/SFTP/FTP | `lib/configure.sh::{configure_sshd, configure_pureftpd}` | 🟡 STRUCTURED — TODO içerik |
| 14 — Backup/monitoring | Epic 15'te eklenecek | ⏳ TODO |
| 15 — KVKK | Manuel — docs/kvkk/ | ⏳ TODO |
| 16 — Master milestone | Tüm installer'ın bir CX22'de çalışması | ⏳ TODO |

## Yapı

```
install/
├── README.md                   # Bu dosya
└── lib/
    ├── common.sh               # Loglama, renkli output, run/run_or_die, trap
    ├── preflight.sh            # OS, RAM, disk, hostname, network, port kontrolleri
    ├── repos.sh                # EPEL 9, Remi Modular, PowerDNS resmi repo
    ├── packages.sh             # dnf install — base + PHP multi-version + acme.sh
    ├── configure.sh            # Apache, PHP-FPM, MariaDB, PowerDNS, Pure-FTPd, sshd
    ├── firewall.sh             # firewalld zone'lar, fail2ban jail'leri
    ├── selinux.sh              # Enforcing, boolean'lar, fcontexts
    └── panel.sh                # Laravel app deployment (onx_panel user, .env, migrate)
```

## Kullanım (Phase 1 GA sonrası)

```bash
# Tek satırla kurulum (curl + bash):
curl -fsSL https://get.onox.com.tr/install.sh | sudo bash

# Parametre ile:
curl -fsSL https://get.onox.com.tr/install.sh | sudo bash -s -- \
    --hostname panel.example.com \
    --admin-email me@example.com

# Local test:
sudo bash install.sh --debug

# Dry-run (komutları yazdır, çalıştırma):
sudo bash install.sh --dry-run

# Yardım:
bash install.sh --help
```

## Geliştirme Akışı

**Her Phase 0 haftası sonu:**
1. `lab-notes/week-XX-*.md` dosyasındaki komutları kontrol et
2. İlgili `install/lib/*.sh` fonksiyonundaki TODO blokuna komutları ekle
3. `bash install.sh --dry-run` ile syntax kontrolü
4. Hetzner CX22'de gerçek test: `sudo bash install.sh --debug`
5. `Phase 0 → Installer Eşlemesi` tablosunda status güncelle
6. Git commit (örn: `feat(installer): week-9 PHP-FPM config from lab-notes`)

**Hafta 16 master milestone:**
- Sıfır CX22 → `bash install.sh` → 10-15 dakika içinde panel ayakta
- Tüm 9 step `[OK]` durumda
- `https://${ONOXSOFT_HOSTNAME}` erişilebilir, admin login çalışıyor

## Tasarım Prensipleri

1. **Idempotent** — Aynı script 2. kez çalıştırıldığında sistem bozulmasın
2. **Fail loud** — `set -euo pipefail` + `trap ERR`, sessiz hata olmasın
3. **Logged** — Her komut `/var/log/onoxsoft/install.log`'a yazılır
4. **Validated** — Her input regex/whitelist ile filtrelenir
5. **Resumable** — Hata sonrası fix + restart aynı yere gelir (state file)
6. **No magic** — `--debug` ile her şey görünür, --dry-run ile preview
7. **Single source of truth** — `lib/` fonksiyonları sysapi script'leriyle aynı pattern'i izler

## TODO

Phase 1 Epic 2 + Epic 17 ilerledikçe:
- [ ] State file mekanizması (`/var/lib/onoxsoft/install-state.json` — son başarılı adım)
- [ ] Resume support (`--from-step 6`)
- [ ] Uninstall script (`install.sh --uninstall`)
- [ ] Update script (existing kurulumu yükselt)
- [ ] Bash test framework (bats-core ile her lib fonksiyonu için unit test)

---

**İlgili:** [docs/master-plan-ref.md](../docs/master-plan-ref.md) • [docs/architecture.md](../docs/architecture.md) • [lab-notes/](../lab-notes/)
