# Nasazení backendu + infra (Sládkova interkom)

Backend běží na **Oracle Montreal `151.145.32.160`** (vedle Nežera), doména
**`sladkova.kukackovi.cz`**, docroot = složka `server/`. Vše, co drží tajemství
(heslo stanice, SMTP, tokeny), píše Martin přímo na serveru do `inc/config.php`
(je v `.gitignore`, do repa nepatří).

> Kroky označené ⭐ dělá Martin (heslo/klíče/BIOS/infra). Claude připraví příkazy.

## 1. ⭐ ZeroTier na Montreal (aby backend dosáhl na interkom)

Backend sahá na dveřní stanici přes ZeroTier (`10.86.31.110`, port-forward na
routeru → `192.0.0.2`). Montreal proto musí být členem sítě.

```bash
# na Montrealu
curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli join 88c5b1f33959cde7
sudo zerotier-cli info          # vypíše node ID
```
Pak v ZeroTier Central <https://central.zerotier.com/network/88c5b1f33959cde7>
uzel **autorizovat** (pojmenovat „Backend Montreal"). Ověření dosahu:
```bash
curl -s --max-time 8 http://10.86.31.110/ISAPI/System/deviceInfo?format=json -u admin:HESLO --digest
# (digest → 200 a XML/JSON se zařízením = stanice je dosažitelná)
```

## 2. ⭐ Router: port-forward 554 (kvůli kameře)

Na RUT200 (SSH `root@10.86.31.110` nebo WebUI) přidat redirect zóna `zerotier`
→ `192.0.0.2:554` (RTSP), stejně jako stávající 80/8000. Bez něj relay nevidí
na stream stanice.

## 3. ⭐ DNS + Apache + HTTPS

- DNS `sladkova.kukackovi.cz` → `151.145.32.160`.
- Apache vhost, docroot = cesta k `server/`, `AllowOverride All` (kvůli `.htaccess`),
  `mod_rewrite` zapnutý. HTTPS přes `certbot --apache -d sladkova.kukackovi.cz`.

## 4. ⭐ MySQL databáze

```sql
CREATE DATABASE sladkova CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'sladkova'@'localhost' IDENTIFIED BY 'HESLO_DB';
GRANT ALL ON sladkova.* TO 'sladkova'@'localhost';
```
Schéma založí sama appka (první požadavek spustí `migrate()`), nebo `php uzivatel.php seznam`.

## 5. ⭐ Konfigurace (tajemství)

```bash
cp server/inc/config.vzor.php server/inc/config.php
# vyplň: db heslo, hik.heslo (heslo stanice), smtp.*, push_token (openssl rand -hex 32),
#         sms.heslo (tajné heslo SMS pravidla „dvere"), ota_slozka (neuhodnutelná, např. app-7f3c1a9e)
chmod 640 server/inc/config.php
```
`push_token` = stejný řetězec vlož i do GitHub secret `SLADKOVA_PUSH_TOKEN`.
`ota_slozka` = název složky → veřejná adresa `SLADKOVA_OTA_BASE` =
`https://sladkova.kukackovi.cz/<ota_slozka>`.

## 6. První správce

```bash
php server/uzivatel.php zaloz martin@kukacka.cz "Martin"
php server/uzivatel.php zaloz druhy.spravce@example.cz "Druhý správce"
php server/uzivatel.php seznam
```
Víc správců domu = víc řádků. Odebrat přístup: `php uzivatel.php deaktivuj <email>`
(zruší i jeho přihlášené telefony).

## 7. Kamera — relay go2rtc (fáze 2)

go2rtc přepublikuje RTSP sub-stream stanice jako WebRTC/HLS stránku, kterou appka
přehraje ve WebView. On-demand (appka zapíná/vypíná) šetří data SIM.

```bash
# na Montrealu, go2rtc (jednobinárka), config /etc/go2rtc.yaml:
streams:
  dvere: rtsp://admin:HESLO@10.86.31.110:554/Streaming/Channels/102
api:
  listen: ":1984"
```
Za reverse proxy (Apache) vystavit přehrávací stránku streamu pod HTTPS a tu
adresu vložit do `config.php` → `kamera.stream_url`
(např. `https://sladkova.kukackovi.cz/kamera/stream.html?src=dvere`).
RTSP vyžaduje TCP; go2rtc to řeší sám. Heslo stanice zůstává server-side.

## 8. Deploy kódu

Doporučeně stejně jako Nežer: git na serveru + `git reset --hard` z větve
produkce (nebo `rsync`). Deploy pouští Martin (SSH na Montreal má jen on).
Backend je „stateless" PHP — stačí nahrát `server/` a mít `inc/config.php`.

## 9. Ověření end-to-end

```bash
# auth
curl -s -X POST https://sladkova.kukackovi.cz/api/v1/auth/request-code \
  -H 'Content-Type: application/json' -d '{"email":"martin@kukacka.cz"}'
# → přijde kód e-mailem; pak verify-code vrátí token
# stav stanice (s tokenem)
curl -s https://sladkova.kukackovi.cz/api/v1/stav -H "Authorization: Bearer <TOKEN>"
# OTA (po prvním buildu)
curl -s https://sladkova.kukackovi.cz/ota.php?akce=verze
```

## GitHub repo + secrets

- Repo **`Pujcovna-na-jihu-s-r-o/sladkova-interkom`** (privátní) — aby ho viděl org runner.
- Secrets (viz `.github/workflows/ios-ota.yml`): `IOS_CERT_P12_BASE64`,
  `IOS_CERT_PASSWORD`, `IOS_PROVISION_PROFILE`, `SLADKOVA_WEB_URL`,
  `SLADKOVA_OTA_BASE`, `SLADKOVA_PUSH_TOKEN`.
- Build appky se spouští ručně (`workflow_dispatch`) — **jen na výslovný pokyn**.
