Files
Reklik/overiew.md
T
2026-04-13 21:24:49 +02:00

219 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Maturitní projekt — Web pro Reklik
**Název projektu:** Reklik (firemní web + selfhosted galerie)
**Autor:** Tomáš Dvořák
**Repozitář:** [https://github.com/Dvorinka/reklik](https://github.com/Dvorinka/reklik)
**Live demo / doména galerie:** [https://foto.reklik.net](https://foto.reklik.net) (selfhosted galerie běžící na serveru s io200)
---
## 1. Přehled (Overview)
Cílem maturitního projektu je vytvořit moderní, responzivní web pro fotografické studio **Reklik** s vlastním řešením galerie hostovaným na interním serveru. Projekt obsahuje:
* statický / dynamický frontend (HTML, CSS, JavaScript) pro prezentaci firmy, portfolia a kontaktů;
* selfhosted galerii (io200) běžící na Ubuntu/Proxmox serveru a dostupnou přes zabezpečený Cloudflare tunnel (cloudflared) bez potřeby portforwardingu;
* backend / server konfiguraci (Apache2, PHP, MariaDB) pro případné CMS nebo dynamický obsah;
* konfigurace domén a reverzního tunelu (cloudflared) pro bezpečné vystavení interní služby ven.
Tento dokument slouží jako technická dokumentace: popis architektury, nasazení, konfigurace serveru, závislosti a doporučení pro další rozvoj.
---
## 2. Technologie a stack
* Frontend: HTML5, CSS3 (v projektu může být použit Tailwind / vlastní CSS podle repozitáře), Vanilla JavaScript
* Galerie: io200 (selfhosted), viz [https://www.io200.com/](https://www.io200.com/)
* Web server: Apache2
* PHP: pro případné malé CMS nebo API integrace
* Databáze: MariaDB (pokud bude potřeba ukládat metadata)
* Tunelování: Cloudflare Tunnel (cloudflared) — origin tunnel, žádné portforwarding
* Host: vlastní server ve vnitřní síti (Proxmox VM / Ubuntu)
---
## 3. Architektura / komponenty
1. **Frontend repository**`https://github.com/Dvorinka/reklik`
* statické soubory v `/var/www/html` (nebo podle DocumentRoot v konfiguraci Apache)
* struktura složek: `css/`, `js/`, `img/`, `assets/`, `pages/` atd. (podrobnosti viz repozitář)
2. **Galerie (io200)**
* běží v Ubuntu VM (Proxmox)
* nainstalováno podle oficiálního instalačního manuálu io200: `https://www.io200.com/documentation#installation-manual`
* nasazeno na lokální IP `192.168.0.185` (v uvedeném příkladu)
3. **Cloudflared tunneling**
* tunel vytváří zabezpečené spojení mezi Cloudflare a lokálním serverem, takže není třeba otevírat porty směrem z internetu
* konfigurace tunelu je uložena v `/etc/cloudflared/config.yml`
4. **Apache virtual host**
* nastavení `ServerName` a `DocumentRoot` + `AllowOverride All` pro běh webu a .htaccess
---
## 4. Serverové konfigurace (ukázky)
### Apache (příklad `/etc/apache2/sites-available/000-default.conf`)
```apache
<VirtualHost *:80>
ServerName foto.reklik.net
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html>
AllowOverride All
</Directory>
</VirtualHost>
```
> Poznámka: `AllowOverride All` umožní použít `.htaccess` soubory — používejte opatrně a zabezpečte, co je třeba.
### cloudflared config (`/etc/cloudflared/config.yml`)
```yaml
tunnel: 252cbbd8-f381-44d5-b201-0c50aea274b9
credentials-file: /root/.cloudflared/252cbbd8-f381-44d5-b201-0c50aea274b9.json
ingress:
- hostname: foto.reklik.net
service: http://localhost:80
originRequest:
noTLSVerify: true
headers:
Host: foto.reklik.net
X-Forwarded-Proto: https
- service: http_status:404
```
> Poznámka: `noTLSVerify: true` znamená, že cloudflared nebude validovat certifikát backendu. To bývá užitečné pro lokální interní služby, ale pokud je možné, doporučuji nasadit správný TLS certifikát v Apache a vypnout `noTLSVerify`.
---
## 5. Instalace a nasazení — krok za krokem (dodatek pro správce)
### Předpoklady (server)
* Ubuntu (na VM nebo fyzickém stroji)
* Sudo/root přístup
* Proxmox (pokud používáte VM)
* Cloudflare konto a doména s přidaným DNS záznamem (CNAME/Hostname pro tunel)
### 1) Apache + PHP + MariaDB
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install apache2 php libapache2-mod-php mariadb-server php-mysql -y
sudo systemctl enable --now apache2
sudo systemctl enable --now mariadb
```
Konfigurujte databázi podle potřeby (pokud je potřeba metadata galerie):
```bash
sudo mysql_secure_installation
# vytvoření DB a uživatele
mysql -u root -p
CREATE DATABASE reklik_db;
CREATE USER 'reklik'@'localhost' IDENTIFIED BY 'sileheslo';
GRANT ALL PRIVILEGES ON reklik_db.* TO 'reklik'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```
### 2) Deploy frontendu
* Klonujte repozitář do `/var/www/html` nebo jiného DocumentRoot
```bash
cd /var/www
sudo rm -rf html/*
sudo git clone https://github.com/Dvorinka/reklik.git html
sudo chown -R www-data:www-data /var/www/html
```
* Pokud používáte build step (npm, webpack), proveďte build lokálně nebo na serveru podle README v repozitáři.
### 3) Instalace a konfigurace cloudflared
Postup (shrnutí):
* Stáhnout a nainstalovat `cloudflared` podle oficiálního návodu.
* Přihlásit tunel k Cloudflare: `cloudflared tunnel login` a následně `cloudflared tunnel create <name>`.
* Vygenerovat `config.yml` jako výše a spustit službu jako systemd nebo pomocí `cloudflared service install`.
Po instalaci ověřte status:
```bash
sudo systemctl status cloudflared
```
### 4) io200 galerie — instalační shrnutí
* Postupujte podle oficiální dokumentace: [https://www.io200.com/documentation#installation-manual](https://www.io200.com/documentation#installation-manual)
* Doporučené nastavení: nasadit io200 do samostatného adresáře v `/var/www/io200` nebo jako samostatný virtuální host.
* Ujistěte se, že galerií vytvořená metadata a obrázky mají správná práva (www-data).
---
## 6. Bezpečnostní doporučení
* Používejte HTTPS: i když Cloudflare poskytuje TLS mezi klientem a Cloudflare, zvažte povolení TLS mezi cloudflared a backend (vypnout `noTLSVerify` po nasazení certifikátu na Apache).
* Pravidelné zálohy: zálohujte soubory `/var/www`, DB (pokud existuje) a složku s obrázky (galerie).
* Omezit přístup k administraci galerie pomocí základní autentizace nebo IPwhitelistu.
* Aktualizace systému a balíčků (security updates).
* Pokud používáte `.htaccess`, zkontrolujte pravidla, aby neumožňovala nahrávání škodlivých souborů.
---
## 7. Testování a nasazení (kontrola)
* Po nasazení frontend projektu ověřit:
* responzivitu (mobil / tablet / desktop)
* rychlost načítání (optimalizace obrázků)
* funkčnost galerie (nahrávání, prohlížení, kategorizace)
* Ověřit logs: `/var/log/apache2/error.log` a `access.log` a logy cloudflared (`journalctl -u cloudflared`)
---
## 8. Známé chyby / omezení
* cloudflared `noTLSVerify: true` — bezpečnostní riziko v případě MITM v síti; doporučeno robustnější TLS nastavení.
* Omezené systémové zdroje (4GB RAM, 2 vCPU) — při velkém provozu může být potřeba zvýšit kapacity.
* Pokud se galerie nebo web stane náročným (mnoho současných uživatelů a vysoké I/O), zvažte oddělení galerie na vlastní VM a použití CDN pro statické assety.
---
## 9. Možné rozšíření (Future work)
* Přidat administrátorské rozhraní pro nahrávání a správu galerií (pokud io200 nepokrývá požadavky)
* Optimalizace obrázků (generování více rozlišení, lazy loading)
* Integrace jednoduchého CMS pro správu textů na stránce
* Monitoring a alerting (Prometheus, Grafana nebo jednoduché health checks)
* CI/CD pipeline pro automatické nasazení při push na GitHub
---
## 10. Kontakty a další zdroje
* Repo: `https://github.com/Dvorinka/reklik`
* Oficiální dokumentace io200: `https://www.io200.com/documentation#installation-manual`
* Cloudflared docs: viz dokumentace Cloudflare Tunnel
---
Pokud chceš, mohu do dokumentace přidat konkrétní části z repozitáře (stručný popis struktury složek, použitých knihoven, nebo příklady kódu), nebo vytvořit `README.md` přímo v repozitáři připravený k nasazení. Stačí poslat další podklady a doplním to.