# Instalace Status VPS 1.0.0

## 1. Požadavky

- Linux VPS nebo hosting s PHP CLI a cronem.
- PHP 8.2+ pro web i příkazovou řádku.
- Rozšíření `curl`, `pdo_sqlite`, `mbstring`.
- Nginx nebo Apache, ideálně HTTPS.
- Volitelně příkaz `ping` pro ICMP kontroly na Linuxu.

Na Debianu/Ubuntu například nainstalujte PHP-FPM, PHP CLI, cURL, SQLite a mbstring balíčky odpovídající vaší verzi PHP. Pro PHP 8.3 jde o `php8.3-fpm php8.3-cli php8.3-curl php8.3-sqlite3 php8.3-mbstring`. Použijte verzi dostupnou a podporovanou na svém serveru.

## 2. Nahrání souborů

Rozbalte ZIP do `/var/www/status-vps`. Zachovejte celou strukturu, nejen `public/`.

**Dokumentový kořen domény musí být `/var/www/status-vps/public`.** Kořen balíčku není bezpečný webový kořen: obsahuje konfiguraci a historii.

## 3. Konfigurace a oprávnění

Pro Debian/Ubuntu s webovým uživatelem `www-data`:

```bash
cd /var/www/status-vps
cp config.example.json config.json
# Upravte config.json podle svých služeb.
sudo chown root:www-data config.json
sudo chmod 640 config.json
sudo install -d -m 750 -o www-data -g www-data storage
sudo -u www-data php bin/install.php
```

Nahraďte `www-data` uživatelem vašeho PHP-FPM/hostingu. Instalační skript nepřepíše existující konfiguraci. Lze jej bezpečně spustit znovu; existující měření nemaže. Veškeré nadřazené adresáře musí být přístupné webovému uživateli.

## 4. Nginx

Ukázka základní konfigurace; PHP socket upravte podle serveru. HTTPS certifikát nastavte obvyklým způsobem pro svou doménu.

```nginx
server {
    listen 80;
    server_name status.vps.cz;
    root /var/www/status-vps/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /index.php {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ \.php$ { return 404; }
    location ~ /\. { deny all; }
}
```

Před načtením změn spusťte `nginx -t`. Nastavení DNS, domény a certifikátu není součástí PHP instalátoru.

Pro Apache nastavte `DocumentRoot /var/www/status-vps/public`. Pokud hosting neumí nastavit kořen na podadresář, domluvte jeho změnu s poskytovatelem nebo umístěte neveřejné části mimo web a přizpůsobte cesty. **Nenahrávejte celý balíček do veřejného kořene bez ochrany soukromých adresářů.**

## 5. První měření

```bash
cd /var/www/status-vps
sudo -u www-data php bin/check.php --validate
sudo -u www-data php bin/check.php
```

Otevřete svou doménu. Kontroly jsou skutečné; šedé čárky se postupně naplní měřeními.

## 6. Cron

Otevřete `sudo crontab -u www-data -e` a přidejte:

```cron
* * * * * /usr/bin/php /var/www/status-vps/bin/check.php >> /var/www/status-vps/storage/worker.log 2>&1
```

Tento zápis je pro uživatelský crontab. V `/etc/cron.d/` je třeba před příkaz přidat uživatelské pole `www-data`.

Cron běží každou minutu, ale služby se kontrolují podle vlastního `interval_seconds`. Nejkratší interval je 60 sekund. Pro zátěžově malé nasazení doporučujeme celistvé násobky 60. Větší počet pomalých cílů může skutečnou četnost prodloužit. Webová obnova `site.refresh_seconds` pouze načítá uložená měření.

## 7. Ověření a údržba

```bash
php tests/run.php
tail -n 30 /var/www/status-vps/storage/worker.log
```

- Ověřte, že `https://vase-domena/config.json` a `/storage/status.sqlite` nevracejí obsah souborů.
- Pravidelně zálohujte konfiguraci a konzistentní kopii SQLite včetně nedokončených WAL zápisů.
- Nastavte rotaci worker logu.
- Při aktualizaci ponechte vlastní `config.json` a `storage/`; předem pořiďte zálohu. Nahradit lze zdrojové soubory z nového balíčku.

## ICMP ping

Používá se příkaz `/usr/bin/ping` nebo `/bin/ping`, jeden paket a timeout. Dostupnost otestujte pod stejným uživatelem jako cron. Instalátor nemění systémová oprávnění pro ICMP. Pokud `ping` není dostupný nebo je blokován, použijte HTTP/TCP monitor nebo upravte systémové nastavení s administrátorem serveru.

Veřejné demo: https://status.jankaminsky.eu/ · Podrobnosti: [README.md](README.md)
