69 KiB
MATURITNÍ PRÁCE
WEBOVÁ PREZENTACE A SELF-HOSTED GALERIE PRO FOTOGRAFICKÉ STUDIO REKLIK
Autor: Radim Ilek
Škola: [Název školy]
Školní rok: 2024/2025
Obor: Informační technologie
Vedoucí práce: [Jméno vedoucího]
Datum odevzdání: říjen 2025
PROHLÁŠENÍ AUTORA
Prohlašuji, že jsem maturitní práci vypracoval samostatně pod vedením vedoucího práce a s použitím uvedené literatury a zdrojů. Dále prohlašuji, že tato práce nebyla využita k získání jiného nebo stejného titulu.
V Uherském Hradišti, dne 13. října 2025
________________________
Podpis autora
PODĚKOVÁNÍ
Rád bych poděkoval vedoucímu mé maturitní práce za odborné vedení, cenné rady a připomínky během tvorby tohoto projektu. Dále děkuji rodině za podporu a trpělivost během celého studia.
ABSTRAKT
Název práce: Webová prezentace a self-hosted galerie pro fotografické studio Reklik
Autor: Radim Ilek
Vedoucí práce: [Jméno vedoucího]
Klíčová slova: webová prezentace, fotografické studio, self-hosted galerie, io200, Cloudflare Tunnel, Apache, responzivní design, SEO optimalizace
Cílem této maturitní práce bylo vytvořit kompletní webové řešení pro fotografické studio Reklik specializující se na fotografování nemovitostí v Uherském Hradišti a okolí. Projekt zahrnuje moderní responzivní webovou prezentaci s důrazem na SEO optimalizaci a uživatelskou přívětivost, doplněnou o self-hosted fotografickou galerii běžící na vlastním serveru.
Webová aplikace je postavena na moderních webových technologiích včetně HTML5, CSS3 a JavaScriptu. Pro správu a prezentaci fotografií byla implementována open-source galerie io200, hostovaná na Ubuntu serveru v infrastruktuře Proxmox. Komunikace mezi interním serverem a internetem je realizována prostřednictvím zabezpečeného Cloudflare Tunnel, což eliminuje potřebu klasického port-forwardingu a zvyšuje bezpečnost celého řešení.
Projekt demonstruje komplexní přístup k tvorbě webových aplikací – od analýzy požadavků, přes návrh architektury, implementaci frontend i backend komponent, až po nasazení do produkčního prostředí a následnou údržbu. Součástí práce je také konfigurace webového serveru Apache, správa domén a DNS záznamů, a implementace bezpečnostních opatření.
Výsledkem je plně funkční webová prezentace dostupná na adrese https://reklik.net s integrovanou galerií na https://foto.reklik.net, která splňuje všechny požadavky zadání a je připravena k aktivnímu komerčnímu využití.
OBSAH
-
- 2.1 Webové technologie
- 2.1.1 HTML5
- 2.1.2 CSS3 a responzivní design
- 2.1.3 JavaScript
- 2.2 Serverové technologie
- 2.2.1 Webový server Apache
- 2.2.2 PHP
- 2.2.3 Databázový systém MariaDB
- 2.3 Virtualizace a hosting
- 2.3.1 Proxmox VE
- 2.3.2 Ubuntu Server
- 2.4 Bezpečnost a síťové služby
- 2.4.1 Cloudflare Tunnel
- 2.4.2 HTTPS a SSL/TLS
- 2.5 Systémy pro správu fotografií
- 2.5.1 io200 Gallery
- 2.6 SEO optimalizace
- 2.7 Verzovací systémy
- 2.7.1 Git a GitHub
- 2.1 Webové technologie
-
- 3.1 Analýza požadavků
- 3.1.1 Funkční požadavky
- 3.1.2 Nefunkční požadavky
- 3.2 Analýza cílové skupiny
- 3.3 Konkurenční analýza
- 3.4 Návrh architektury
- 3.4.1 Celková architektura systému
- 3.4.2 Frontend architektura
- 3.4.3 Backend architektura
- 3.4.4 Síťová architektura
- 3.5 Návrh uživatelského rozhraní
- 3.6 Návrh databázového modelu
- 3.7 Bezpečnostní návrh
- 3.1 Analýza požadavků
-
- 4.1 Vývojové prostředí a nástroje
- 4.2 Struktura projektu
- 4.3 Implementace frontendu
- 4.3.1 HTML struktura
- 4.3.2 CSS styly a responzivita
- 4.3.3 JavaScript funkcionality
- 4.4 SEO implementace
- 4.4.1 Meta tagy
- 4.4.2 Strukturovaná data
- 4.4.3 Sitemap a robots.txt
- 4.5 Konfigurace serveru
- 4.6 Implementace io200 galerie
- 4.7 Konfigurace Cloudflare Tunnel
- 4.8 Správa domén a DNS
-
- 6.1 Postup nasazení
- 6.2 Monitoring a údržba
- 6.3 Zálohování
- 6.4 Řešení problémů
-
- 8.1 Zhodnocení výsledků
- 8.2 Splnění cílů
- 8.3 Možnosti dalšího rozvoje
- 8.4 Osobní přínos
1. ÚVOD
1.1 Motivace a důvody výběru tématu
V současné digitální době je kvalitní webová prezentace nezbytnou součástí každého úspěšného podnikání. Pro fotografické studio, které se zabývá profesionálním fotografováním nemovitostí, je tato potřeba ještě výraznější – potenciální klienti potřebují vidět nejen informace o službách, ale především kvalitní ukázky realizovaných prací v podobě přehledné a profesionální fotogalerie.
Reklik je fotografické studio působící v Uherském Hradišti a okolí, které se specializuje na fotografování nemovitostí pro realitní kanceláře, Airbnb a ubytovací portály. Studio poskytuje jak interiérové, tak exteriérové fotografie s důrazem na profesionální prezentaci nemovitostí, která maximalizuje jejich prodejní potenciál.
Rozhodl jsem se pro toto téma z několika důvodů:
-
Praktické využití: Projekt není pouze teoretickým cvičením, ale skutečným komerčním řešením, které bude aktivně využíváno reálným klientem.
-
Komplexnost řešení: Projekt zahrnuje široké spektrum moderních webových technologií – od frontendového vývoje, přes backendové řešení a správu serveru, až po síťovou bezpečnost a cloudové služby.
-
Vlastní hosting: Na rozdíl od jednoduchých řešení postavených na hotových platformách (WordPress, Wix apod.) jsem se rozhodl implementovat vlastní server infrastrukturu s důrazem na kontrolu, flexibilitu a bezpečnost.
-
Aktuálnost technologií: Použité technologie jako Cloudflare Tunnel, containerizace a moderní webový vývoj představují současný standard v oboru a jejich praktické zvládnutí má vysokou hodnotu pro další profesní růst.
-
SEO a marketing: Projekt klade důraz na optimalizaci pro vyhledávače (SEO), což je klíčové pro získávání nových zákazníků v konkurenčním prostředí.
1.2 Cíle práce
Hlavním cílem této maturitní práce je navrhnout a implementovat kompletní webové řešení pro fotografické studio Reklik, které bude splňovat jak funkční, tak nefunkční požadavky moderní webové aplikace.
Hlavní cíle:
-
Vytvoření responzivní webové prezentace
- Moderní, esteticky vyhovující design odpovídající charakteru fotografického studia
- Plná responzivita pro všechna běžná zařízení (desktop, tablet, mobilní telefon)
- Přehledná navigace a intuitivní uživatelské rozhraní
- Optimalizace pro rychlé načítání stránek
-
Implementace fotografické galerie
- Nasazení self-hosted řešení pro správu a prezentaci fotografií
- Možnost kategorizace fotografií do alb
- Optimalizace zobrazování velkých obrázků
- Správa metadat a popisů fotografií
-
Konfigurace serverové infrastruktury
- Instalace a konfigurace Ubuntu serveru na Proxmox virtualizační platformě
- Nastavení webového serveru Apache včetně virtual hosts
- Implementace databázového systému MariaDB
- Správa PHP runtime prostředí
-
Zabezpečení komunikace
- Implementace Cloudflare Tunnel pro bezpečný přístup bez port-forwardingu
- Konfigurace HTTPS/SSL certifikátů
- Implementace základních bezpečnostních opatření
-
SEO optimalizace
- Implementace všech důležitých meta tagů
- Vytvoření XML sitemapy
- Konfigurace robots.txt
- Implementace strukturovaných dat (Schema.org)
- Optimalizace rychlosti načítání pro lepší ranking
-
Dokumentace a nasazení
- Vytvoření komplexní technické dokumentace
- Dokumentace postupu instalace a konfigurace
- Popis údržby a možného dalšího rozvoje
Dílčí cíle:
- Prostudování moderních webových technologií a best practices
- Analýza konkurenčních řešení v oboru fotografických služeb
- Návrh uživatelského rozhraní s důrazem na UX (User Experience)
- Implementace verzovacího systému pro správu kódu (Git/GitHub)
- Vytvoření veřejně dostupného repozitáře jako ukázka práce
- Testování funkcionality, výkonnosti a bezpečnosti
- Nasazení do produkčního prostředí
1.3 Struktura dokumentu
Tato maturitní práce je strukturována do logických kapitol, které pokrývají všechny fáze realizace projektu:
Kapitola 2 – Teoretická část poskytuje přehled všech použitých technologií, vysvětluje základní koncepty a principy, na kterých je projekt postaven. Zahrnuje webové technologie (HTML5, CSS3, JavaScript), serverové technologie (Apache, PHP, MariaDB), virtualizační platformy, síťové služby a bezpečnostní mechanismy.
Kapitola 3 – Analýza a návrh obsahuje detailní analýzu požadavků, cílové skupiny a konkurence. Dále prezentuje návrh architektury systému, uživatelského rozhraní a bezpečnostního modelu.
Kapitola 4 – Implementace popisuje praktickou realizaci projektu. Dokumentuje implementaci frontendu, backendu, konfiguraci serveru, nasazení galerie io200 a konfiguraci Cloudflare Tunnel. Obsahuje ukázky kódu a konfiguračních souborů.
Kapitola 5 – Testování shrnuje testovací proces včetně funkčního, výkonnostního a bezpečnostního testování. Prezentuje výsledky testů a případné problémy, které byly řešeny.
Kapitola 6 – Nasazení a provoz popisuje postup nasazení do produkčního prostředí, monitoring, údržbu a zálohování systému.
Kapitola 7 – Ekonomické zhodnocení analyzuje náklady na vývoj a provoz řešení a srovnává je s komerčními alternativami.
Kapitola 8 – Závěr shrnuje dosažené výsledky, hodnotí splnění cílů a navrhuje možnosti dalšího rozvoje projektu.
Součástí práce je také seznam použité literatury a zdrojů a přílohy obsahující doplňující materiály jako screenshoty, diagramy a ukázky konfigurací.
2. TEORETICKÁ ČÁST
Tato kapitola poskytuje teoretický základ pro porozumění technologiím a konceptům použitým v projektu. Jednotlivé podkapitoly popisují klíčové technologie, jejich vlastnosti, výhody a způsob využití v kontextu tohoto projektu.
2.1 Webové technologie
2.1.1 HTML5
HTML5 (HyperText Markup Language, verze 5) je aktuální standard značkovacího jazyka pro tvorbu webových stránek. HTML5 bylo publikováno konsorciem W3C (World Wide Web Consortium) v roce 2014 a představuje významnou evoluci předchozích verzí HTML.
Klíčové vlastnosti HTML5:
-
Sémantické elementy: HTML5 přináší nové sémantické tagy jako
<header>,<nav>,<article>,<section>,<aside>,<footer>, které umožňují lepší strukturování obsahu a zlepšují přístupnost i SEO. -
Multimédia bez pluginů: Nativní podpora audio a video elementů (
<audio>,<video>) bez nutnosti použití Flash nebo jiných pluginů. -
Canvas a SVG: Možnost vykreslování 2D grafiky přímo v prohlížeči pomocí elementu
<canvas>a nativní podpora vektorové grafiky SVG. -
Pokročilé formuláře: Nové typy inputů (
email,date,number,rangeatd.) s vestavěnou validací. -
Offline aplikace: Podpora Application Cache a Local Storage pro ukládání dat na straně klienta.
-
Geolokace: API pro zjištění polohy uživatele.
Využití v projektu Reklik:
V projektu je HTML5 použito pro vytvoření sémanticky správné struktury webových stránek. Využívány jsou moderní sémantické elementy pro lepší SEO a přístupnost. Strukturovaná data jsou implementována pomocí atributů itemscope a itemtype podle standardu Schema.org.
2.1.2 CSS3 a responzivní design
CSS3 (Cascading Style Sheets, verze 3) je stylový jazyk používaný k popisu vzhledu dokumentů napsaných v HTML. CSS3 je modulární standard, který přináší řadu nových vlastností pro pokročilé stylování webových stránek.
Klíčové vlastnosti CSS3:
-
Media Queries: Umožňují aplikovat různé styly v závislosti na vlastnostech zařízení (šířka obrazovky, orientace, rozlišení). Jsou základem responzivního designu.
-
Flexbox: Flexibilní box model umožňuje snadné vytváření komplexních layoutů s automatickým rozdělováním prostoru.
-
Grid Layout: CSS Grid je dvourozměrný layoutový systém pro vytváření komplexních mřížkových designů.
-
Transformace a přechody: CSS transformace (
transform) a animace (transition,animation) umožňují vytváření interaktivních efektů bez JavaScriptu. -
Vlastní fonty:
@font-facepravidlo umožňuje použití vlastních webových fontů. -
Pokročilé efekty: Stíny (
box-shadow,text-shadow), zaoblené rohy (border-radius), gradienty (linear-gradient,radial-gradient).
Responzivní design:
Responzivní webový design je přístup k návrhu webových stránek, který zajišťuje optimální zobrazení na různých zařízeních a velikostech obrazovek. Hlavní principy:
- Fluid Grid: Použití relativních jednotek (%, em, rem) namísto fixních pixelů
- Flexibilní obrázky: Obrázky se přizpůsobují velikosti kontejneru
- Media Queries: Aplikace různých stylů pro různá zařízení
Využití v projektu:
Projekt využívá kombinaci vlastního CSS a frameworku pro responzivní design. Implementovány jsou breakpointy pro mobily, tablety a desktopy. Použity jsou moderní techniky jako Flexbox a Grid pro vytvoření flexibilního layoutu.
2.1.3 JavaScript
JavaScript je interpretovaný programovací jazyk, který běží v prohlížeči a umožňuje vytváření dynamických a interaktivních webových aplikací. JavaScript je spolu s HTML a CSS základní technologií moderního webu.
Klíčové vlastnosti:
- Event-driven programming: JavaScript reaguje na události (kliknutí, scroll, načtení stránky)
- DOM manipulace: Možnost dynamicky měnit strukturu a obsah HTML dokumentu
- Asynchronní programování: Práce s AJAX, Fetch API, Promises, async/await
- ES6+ features: Moderní JavaScript přináší arrow functions, destructuring, template literals, classes a další
Využití v projektu:
V projektu je JavaScript využit pro:
- Interaktivní navigační menu s animacemi
- Lazy loading obrázků pro optimalizaci výkonu
- Smooth scrolling mezi sekcemi
- Validaci formulářů
- Integrace s analytics (GoatCounter)
- Overlay efekty a galeriové funkce
Použita je knihovna jQuery pro zjednodušení DOM manipulace a cross-browser kompatibilitu.
2.2 Serverové technologie
2.2.1 Webový server Apache
Apache HTTP Server (zkráceně Apache) je open-source multiplatformní webový server vývíjený a udržovaný organizací Apache Software Foundation. Apache je jedním z nejpoužívanějších webových serverů na světě.
Klíčové vlastnosti:
- Modularita: Apache používá modulární architekturu, kde lze funkcionalitu rozšiřovat pomocí modulů
- Virtual Hosts: Možnost hostovat více webových stránek na jednom serveru
- .htaccess: Konfigurace na úrovni adresářů bez nutnosti restartu serveru
- Podpora SSL/TLS: Integrace s mod_ssl pro HTTPS
- Rewrite Engine: Mod_rewrite pro přepisování URL
- Multiplatformnost: Běží na Linux, Windows, macOS a dalších systémech
Důležité moduly použité v projektu:
mod_rewrite: URL rewriting pro SEO-friendly odkazymod_ssl: HTTPS podpora (i když certifikát je primárně spravován přes Cloudflare)mod_php: Integrace PHP do Apachemod_headers: Manipulace s HTTP hlavičkami
Konfigurace Virtual Host:
Virtual Host umožňuje provozovat více webů na jednom serveru. V projektu je nakonfigurován Virtual Host pro doménu foto.reklik.net s nastavením DocumentRoot a povolenými .htaccess soubory pomocí direktivy AllowOverride All.
2.2.2 PHP
PHP (PHP: Hypertext Preprocessor) je široce používaný open-source skriptovací jazyk určený především pro vývoj webových aplikací. PHP kód je vykonáván na serveru a výsledkem je HTML, který je odeslán klientovi.
Klíčové vlastnosti:
- Server-side scripting: Kód běží na serveru, klient dostává pouze výsledek
- Databázová integrace: Nativní podpora pro MySQL/MariaDB, PostgreSQL a další databáze
- Cross-platform: Běží na různých operačních systémech
- Bohatá standardní knihovna: Funkce pro práce se soubory, obrázky, XML, JSON atd.
- Objektově orientované programování: Podpora OOP od verze 5.x
Využití v projektu:
PHP je použito primárně pro:
- Backend galerie io200 (napsané v PHP)
- Případné budoucí rozšíření o kontaktní formuláře
- Možnost implementace administračního rozhraní
- Generování dynamického obsahu
2.2.3 Databázový systém MariaDB
MariaDB je open-source relační databázový systém, který vznikl jako fork MySQL. MariaDB je plně kompatibilní s MySQL a nabízí vylepšený výkon a nové funkce.
Klíčové vlastnosti:
- Kompatibilita s MySQL: Bezproblémová migrace z MySQL
- Výkon: Optimalizace a nové storage enginy (Aria, XtraDB)
- Bezpečnost: Pravidelné bezpečnostní aktualizace
- Open-source: Skutečně otevřený vývoj pod GPL licencí
- JSON podpora: Nativní podpora pro práci s JSON daty
SQL (Structured Query Language):
SQL je standardní jazyk pro práci s relačními databázemi. Základní operace:
SELECT: Výběr dat z tabulekINSERT: Vkládání nových záznamůUPDATE: Aktualizace existujících záznamůDELETE: Mazání záznamůCREATE,ALTER,DROP: Definice databázové struktury
Využití v projektu:
MariaDB je v projektu připravena pro ukládání:
- Metadat fotografií (titulky, popisy, tagy)
- Informací o albech a kategoriích
- Uživatelských dat pro administrátorské rozhraní
- Statistik a analytických dat
2.3 Virtualizace a hosting
2.3.1 Proxmox VE
Proxmox Virtual Environment (Proxmox VE) je open-source platforma pro virtualizaci a správu kontejnerů. Proxmox kombinuje KVM (Kernel-based Virtual Machine) pro virtualizaci a LXC (Linux Containers) pro kontejnerizaci.
Klíčové vlastnosti:
- KVM virtualizace: Plná hardwarová virtualizace pro provoz různých operačních systémů
- LXC kontejnery: Lehké kontejnery pro Linux aplikace
- Webové rozhraní: Moderní webové GUI pro správu
- High Availability (HA): Clustering a automatické přepínání při výpadku
- Backup a restore: Integrované řešení pro zálohování VM a kontejnerů
- Storage flexibilita: Podpora pro různé storage backendy (LVM, ZFS, Ceph, NFS)
- Live migrace: Přesun běžících VM mezi hosty bez výpadku
Výhody virtualizace:
- Izolace: Každá VM běží izolovaně, selhání jedné neovlivní ostatní
- Efektivní využití zdrojů: Více služeb na jednom fyzickém serveru
- Snadná správa: Snapshoty, klonování, migrace
- Testovací prostředí: Možnost rychle vytvořit testovací instance
- Flexibilita: Snadné přidávání zdrojů (CPU, RAM, disk)
Využití v projektu:
Webový server pro projekt běží na Ubuntu virtuálním stroji v Proxmox prostředí. To umožňuje:
- Snadné zálohování celého serveru pomocí Proxmox snapshots
- Možnost snadno přidat výkon při zvýšené zátěži
- Izolaci od ostatních služeb v síti
- Možnost testování změn na klonované VM před aplikací na produkci
2.3.2 Ubuntu Server
Ubuntu Server je linuxová distribuce založená na Debianu, optimalizovaná pro serverové nasazení. Vydávána je společností Canonical s pravidelnými aktualizacemi a dlouhodobou podporou (LTS verze).
Klíčové vlastnosti:
- LTS (Long Term Support): 5 let bezpečnostních aktualizací pro LTS verze
- APT balíčkovací systém: Snadná správa softwarových balíčků
- Velká komunita: Rozsáhlá dokumentace a komunitní podpora
- Bezpečnost: Pravidelné bezpečnostní aktualizace, firewall (UFW), AppArmor
- Cloud ready: Optimalizace pro cloud prostředí (AWS, Azure, Google Cloud)
- Kontejnerizace: Dobrá podpora pro Docker a Kubernetes
Výhody Ubuntu Server:
- Stabilita a spolehlivost
- Bezplatné používání i pro komerční účely
- Pravidelné aktualizace
- Široká podpora hardware
- Velké množství dostupných balíčků
Využití v projektu:
V projektu je použita Ubuntu Server LTS verze jako hostitelský operační systém pro:
- Apache webový server
- PHP runtime
- MariaDB databázi
- io200 galerii
- Cloudflare daemon (cloudflared)
2.4 Bezpečnost a síťové služby
2.4.1 Cloudflare Tunnel
Cloudflare Tunnel (dříve Argo Tunnel) je služba Cloudflare, která vytváří zabezpečené spojení mezi původním serverem (origin) a Cloudflare sítí bez nutnosti otevírat veřejné příchozí porty na firewallu.
Princip fungování:
Tradiční přístup vyžaduje:
- Otevření portů 80 a 443 na firewallu
- Port forwarding na routeru
- Vystavení serveru přímo na internet
Cloudflare Tunnel funguje jinak:
- Na serveru běží
cloudflareddaemon - Daemon vytvoří odchozí spojení k Cloudflare (port 443 outbound)
- Veškerý příchozí traffic jde přes Cloudflare síť
- Cloudflare přeposílá požadavky přes tunel na lokální server
Výhody Cloudflare Tunnel:
- Bezpečnost: Server není přímo dostupný z internetu, útočníci nevidí skutečnou IP adresu
- Žádný port forwarding: Jednodušší konfigurace, server může být v privátní síti
- DDoS ochrana: Automatická ochrana proti DDoS útokům
- CDN: Statické obsahy jsou cachovány na Cloudflare edge serverech
- SSL/TLS: Automatický HTTPS certifikát od Cloudflare
- Load balancing: Možnost rozložit zátěž mezi více servery
Konfigurace:
Tunel se konfiguruje pomocí YAML souboru (/etc/cloudflared/config.yml), kde se definuje:
- ID tunelu
- Cesta k credentials souboru
- Ingress pravidla (hostname → local service mapping)
Využití v projektu:
Cloudflare Tunnel umožňuje bezpečně zpřístupnit galerii běžící na lokálním serveru (192.168.0.x) pod doménou foto.reklik.net bez nutnosti otevírat porty na routeru. Všechen traffic prochází přes Cloudflare síť, která poskytuje ochranu a caching.
2.4.2 HTTPS a SSL/TLS
HTTPS (HTTP Secure) je zabezpečená verze HTTP protokolu používaná pro komunikaci mezi webovým prohlížečem a serverem. Komunikace je šifrována pomocí SSL/TLS.
SSL/TLS:
- SSL (Secure Sockets Layer) – starší protokol (dnes už zastaralý)
- TLS (Transport Layer Security) – moderní nástupce SSL
Jak TLS funguje:
- Handshake: Klient a server se dohodnou na šifrovacích algoritmech
- Výměna certifikátů: Server posílá svůj SSL certifikát
- Ověření identity: Klient ověřuje platnost certifikátu
- Šifrovaná komunikace: Data jsou šifrována symetrickým klíčem
Výhody HTTPS:
- Šifrování: Data nelze odposlechnout
- Integrita: Data nelze změnit během přenosu
- Autentizace: Ověření identity serveru
- SEO: Google preferuje HTTPS stránky v výsledcích vyhledávání
- Důvěra uživatelů: Zelený zámek v prohlížeči
Typy SSL certifikátů:
- Domain Validated (DV): Základní ověření vlastnictví domény
- Organization Validated (OV): Ověření organizace
- Extended Validation (EV): Nejpřísnější ověření, zelená lišta v některých prohlížečích
Využití v projektu:
Cloudflare poskytuje automatický SSL/TLS certifikát pro doménu foto.reklik.net. Komunikace mezi uživatelem a Cloudflare je šifrovaná TLS 1.3. Mezi Cloudflare a lokálním serverem je v současnosti použito noTLSVerify: true, což je vhodné pro interní síť, ale pro produkční prostředí by bylo lepší implementovat i backend TLS.
2.5 Systémy pro správu fotografií
2.5.1 io200 Gallery
io200 je open-source self-hosted fotografická galerie napsaná v PHP. io200 je navržena jako moderní, rychlá a jednoduchá alternativa k složitějším galeriím jako Piwigo nebo Gallery.
Klíčové vlastnosti:
- Self-hosted: Plná kontrola nad daty, žádná závislost na třetích stranách
- Rychlost: Optimalizace pro rychlé načítání i velkých galerií
- Moderní UI: Responzivní a čisté uživatelské rozhraní
- Správa alb: Organizace fotografií do alb a kategorií
- Metadata: Podpora EXIF dat, titulků, popisů
- Automatické miniatury: Generování náhledů v různých velikostech
- Lightbox: Plnoobrazovkové prohlížení fotografií
- Ochrana hesel: Možnost chránit alba heslem
- RSS feed: Automaticky generovaný RSS feed pro nové fotografie
Výhody self-hosted galerie:
- Vlastnictví dat: Fotografie jsou na vlastním serveru
- Žádné omezení velikosti: Pouze limitováno velikostí disku
- Žádné poplatky: Kromě hostingu žádné měsíční poplatky
- Customizace: Možnost přizpůsobit galerii potřebám projektu
- Soukromí: Data nejsou na serverech třetích stran
Nevýhody:
- Údržba: Nutnost spravovat server a aktualizace
- Backup: Odpovědnost za zálohování dat
- Škálovatelnost: Při velkém provozu může být potřeba optimalizace
Využití v projektu:
io200 galerie je nainstalována na Ubuntu serveru a slouží k prezentaci portfolia fotografií nemovitostí. Galerie je dostupná na https://foto.reklik.net a obsahuje různá alba pro různé typy nemovitostí a projektů.
2.6 SEO optimalizace
SEO (Search Engine Optimization) je proces optimalizace webových stránek pro lepší umístění ve výsledcích vyhledávačů. Dobrá SEO pozice je klíčová pro přilákání organického trafficu.
Klíčové faktory SEO:
On-page SEO:
- Title tag: Unikátní a popisný název stránky (50-60 znaků)
- Meta description: Popis obsahu stránky (150-160 znaků)
- Heading tags (H1-H6): Hierarchická struktura nadpisů
- URL struktura: Čisté, SEO-friendly URL
- Alt text u obrázků: Popis obrázků pro vyhledávače
- Interní odkazy: Propojení stránek webu
- Content kvalita: Unikátní, relevantní a kvalitní obsah
- Keywords: Přirozené použití klíčových slov
Technical SEO:
- Rychlost načítání: Optimalizace velikosti souborů, caching
- Mobile-friendly: Responzivní design
- HTTPS: Zabezpečené spojení
- XML Sitemap: Přehled všech stránek pro vyhledávače
- Robots.txt: Instrukce pro crawlery
- Strukturovaná data: Schema.org markup
- Canonical URLs: Prevence duplicitního obsahu
Off-page SEO:
- Backlinks: Odkazy z jiných kvalitních webů
- Social signals: Aktivita na sociálních sítích
- Brand mentions: Zmínky o značce
Open Graph a Twitter Cards:
Open Graph a Twitter Cards jsou protokoly pro sdílení obsahu na sociálních sítích. Definují, jak se stránka zobrazí při sdílení na Facebook, Twitter atd.
Využití v projektu:
Projekt implementuje komplexní SEO strategii:
- Optimalizované meta tagy pro každou stránku
- Strukturovaná data typu Photography podle Schema.org
- XML sitemap pro všechny stránky
- Robots.txt s povolenými/zakázanými sekcemi
- Open Graph a Twitter Cards tagy pro sociální sítě
- Optimalizace obrázků (komprese, správné formáty)
- Canonical URL pro prevenci duplicit
2.7 Verzovací systémy
2.7.1 Git a GitHub
Git je distribuovaný verzovací systém pro sledování změn ve zdrojovém kódu. Git umožňuje efektivní spolupráci více vývojářů na stejném projektu.
Klíčové koncepty Git:
- Repository (repo): Úložiště projektu včetně celé historie změn
- Commit: Uložení změn s popisem
- Branch: Větev vývoje umožňující paralelní práci
- Merge: Sloučení změn z různých větví
- Remote: Vzdálené úložiště (např. na GitHub)
- Clone: Stažení kopie repository
- Pull: Stažení nejnovějších změn ze vzdáleného repository
- Push: Nahrání lokálních změn do vzdáleného repository
Základní Git workflow:
git initnebogit clone– Inicializace/klonování repositorygit add <soubory>– Přidání souborů do staging areagit commit -m "zpráva"– Uložení změn s popisemgit push– Nahrání na vzdálené repositorygit pull– Stažení změn od ostatních
Výhody verzování:
- Historie změn: Možnost vrátit se k předchozím verzím
- Spolupráce: Více lidí může pracovat současně
- Branching: Experimentování bez ovlivnění hlavní verze
- Backup: Distribuovaný charakter Git je formou zálohy
- Code review: Možnost kontroly změn před začleněním
GitHub:
GitHub je webová platforma pro hostování Git repository s dodatečnými funkcemi:
- Issues pro sledování úkolů a bugů
- Pull requests pro code review
- Actions pro CI/CD automatizaci
- Wiki pro dokumentaci
- GitHub Pages pro hosting statických stránek
- Spolupráce a komunitní funkce
Využití v projektu:
Zdrojový kód projektu Reklik je verzován pomocí Git a hostován na GitHubu na adrese https://github.com/Dvorinka/reklik. To umožňuje:
- Sledování všech změn v kódu
- Možnost vrátit se k předchozím verzím při problémech
- Veřejnou prezentaci projektu jako součást portfolia
- Dokumentaci ve formě README a dalších markdown souborů
- Potenciální spolupráci s dalšími vývojáři
3. ANALÝZA A NÁVRH
Tato kapitola se věnuje analýze požadavků projektu, návrhu architektury systému a designu uživatelského rozhraní. Důkladná analytická a návrhová fáze je klíčová pro úspěšnou implementaci projektu.
3.1 Analýza požadavků
3.1.1 Funkční požadavky
Funkční požadavky definují, co systém musí umět dělat. Pro projekt Reklik byly identifikovány následující funkční požadavky:
FR1 – Prezentace portfolia
- Systém musí umožnit prezentaci fotografií nemovitostí v atraktivní formě
- Fotografie musí být organizovány do kategorií (alb)
- Každá fotografie může mít titulek a popis
- Zobrazení fotografií v plné velikosti pomocí lightbox efektu
FR2 – Informace o službách
- Prezentace nabízených služeb (interiérové fotografie, exteriérové fotografie)
- Ceník služeb s jasnou strukturou
- Popis procesu objednávky a realizace
FR3 – Kontaktní možnosti
- Zobrazení kontaktních údajů (telefon, email)
- Zobrazení oblasti působnosti (Uherské Hradiště a okolí)
- Odkaz na objednávkový formulář nebo přímý kontakt
FR4 – O nás sekce
- Představení fotografického studia
- Informace o zakladatelích a jejich zkušenostech
- Filozofie a přístup k fotografování
FR5 – Responzivní zobrazení
- Automatické přizpůsobení layoutu pro různá zařízení
- Optimalizované zobrazení na mobilech, tabletech a desktopech
- Touch-friendly ovládání na mobilních zařízeních
FR6 – Navigace
- Intuitivní navigační menu
- Odkazy na všechny důležité sekce
- Mobilní hamburger menu pro malé obrazovky
FR7 – Blog/Aktuality
- Možnost publikovat články o projektech
- Showcase realizovaných projektů
FR8 – Správa galerií (admin)
- Nahrávání nových fotografií
- Organizace fotografií do alb
- Editace metadat
- Mazání fotografií
3.1.2 Nefunkční požadavky
NFR1 – Výkon: Doba načtení < 3 sekundy, lazy loading, optimalizace obrázků
NFR2 – Dostupnost: 99% uptime
NFR3 – Bezpečnost: HTTPS, ochrana před běžnými útoky
NFR4 – Škálovatelnost: Možnost růstu
NFR5 – Přístupnost: WCAG 2.1 AA standardy
NFR6 – SEO: Optimalizace pro vyhledávače
NFR7 – Kompatibilita: Podpora hlavních prohlížečů
3.2 Analýza cílové skupiny
Primární cílovou skupinou jsou realitní makléři, majitelé nemovitostí k prodeji/pronájmu a provozovatelé Airbnb. Tito uživatelé hledají profesionální fotografické služby pro prezentaci nemovitostí.
Klíčové charakteristiky:
- Věk: 25-65 let
- Technologická gramotnost: střední až vysoká
- Rozhodovací kritéria: Portfolio, cena, rychlost realizace
3.3 Konkurenční analýza
Analýza konkurence ukázala, že většina lokálních fotografů má zastaralé weby s špatnou SEO. Konkurenční výhodou projektu Reklik je:
- Moderní webová prezentace
- Self-hosted galerie s plnou kontrolou
- Optimalizace pro vyhledávače
- Lokální působení v Uherském Hradišti
3.4 Návrh architektury
3.4.1 Celková architektura systému
Projekt využívá třívrstevnou architekturu:
- Client Layer: Webový prohlížeč (Desktop, Tablet, Mobile)
- CDN/Proxy Layer: Cloudflare (DDoS ochrana, SSL/TLS, caching)
- Application Layer: Apache + PHP + io200 galerie
- Data Layer: MariaDB databáze + souborový systém
Síťová topologie:
Internet → Cloudflare CDN → Cloudflare Tunnel → Home Network →
→ Proxmox Host → Ubuntu VM (192.168.0.185) → Apache:80
3.4.2 Frontend architektura
/reklik
├── index.html # Landing page
├── css/ # Styly
│ ├── vendors.min.css
│ ├── style.min.css
│ └── responsive.min.css
├── js/ # JavaScript
│ ├── jquery.js
│ ├── main.js
│ └── vendors.min.js
├── images/ # Grafika
├── fonts/ # Webové fonty
├── robots.txt
└── sitemap.xml
3.4.3 Backend architektura
- Webový server: Apache 2.4 s Virtual Hosts
- PHP: Verze 7.4+ pro io200 galerii
- Databáze: MariaDB 10.x pro metadata
- Cloudflared: Daemon pro Cloudflare Tunnel
3.5 Návrh uživatelského rozhraní
Design principy:
- Minimalistický design s důrazem na fotografie
- Čistá vizuální hierarchie
- Dostatečný white space
- Mobile-first přístup
Barevná paleta:
- Primární: Tmavě šedá/Černá (#000000) - profesionalita
- Sekundární: Světle šedá (#f5f5f5) - pozadí
- Text: Vysoký kontrast pro čitelnost
Struktura stránky:
- Header s navigací a CTA tlačítkem
- Hero sekce s hlavním call-to-action
- Portfolio grid s fotografiemi
- Služby a ceník
- Kontaktní informace
- Footer s odkazy
3.6 Návrh databázového modelu
Hlavní tabulky:
albums (id, name, description, slug, created_at)
photos (id, album_id, filename, title, description, exif_data)
tags (id, name, slug)
photo_tags (photo_id, tag_id)
users (id, username, email, password_hash, role)
Databáze využívá relační model s normalizací do 3NF pro eliminaci redundance dat.
3.7 Bezpečnostní návrh
Implementovaná opatření:
-
Síťová bezpečnost:
- Cloudflare Tunnel (žádné otevřené porty)
- UFW firewall na serveru
- Fail2ban pro ochranu před brute-force
-
Aplikační bezpečnost:
- HTTPS/TLS pro veškerou komunikaci
- Prepared statements proti SQL injection
- Input validace a output escapování
- CSRF tokeny pro formuláře
- Bcrypt pro hashování hesel
-
Zálohování:
- Denní automatické zálohy databáze
- Týdenní Proxmox snapshots
- Offsite záloha kritických dat
4. IMPLEMENTACE
Tato kapitola popisuje praktickou realizaci projektu včetně implementace frontendu, konfigurace serveru a nasazení jednotlivých komponent.
4.1 Vývojové prostředí a nástroje
Použité nástroje:
- IDE/Editor: Visual Studio Code s rozšířeními (HTML CSS Support, JavaScript ES6, Live Server)
- Verzovací systém: Git 2.x
- Prohlížeče: Chrome DevTools, Firefox Developer Tools pro testování
- Design: Figma pro wireframes (volitelně)
- SSH Client: PuTTY/OpenSSH pro správu serveru
- FTP/SFTP: FileZilla pro přenos souborů
Server prostředí:
- Virtualizace: Proxmox VE 7.x
- OS: Ubuntu Server 22.04 LTS
- Webový server: Apache 2.4.52
- PHP: PHP 8.1
- Databáze: MariaDB 10.6
- Tunelování: cloudflared latest
4.2 Struktura projektu
Projekt má následující adresářovou strukturu:
reklik/
├── index.html # Hlavní stránka
├── css/
│ ├── vendors.min.css # Bootstrap, třetí strany
│ ├── icon.min.css # Font Awesome ikony
│ ├── style.min.css # Hlavní styly (minifikované)
│ ├── responsive.min.css # Media queries
│ └── style.css # Custom styly
├── js/
│ ├── jquery.js # jQuery 3.x
│ ├── vendors.min.js # Bootstrap JS, plugins
│ ├── main.js # Hlavní aplikační logika
│ └── highlight-overlap.js # Vizuální efekty
├── images/
│ ├── reklik_l.png # Logo
│ ├── reklik.png # Favicon
│ └── [další obrázky]
├── fonts/ # Webové fonty
├── assets/ # Další statické soubory
├── robots.txt # Instrukce pro crawlery
├── sitemap.xml # XML sitemap
└── README.md # Dokumentace projektu
4.3 Implementace frontendu
4.3.1 HTML struktura
Hlavní index.html využívá sémantické HTML5 elementy:
<!doctype html>
<html class="no-js" lang="cs" itemscope itemtype="http://schema.org/Photography">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Profesionální fotografování nemovitostí | Reklik.net</title>
<!-- Meta tagy pro SEO -->
<!-- Open Graph tagy -->
<!-- CSS soubory -->
</head>
<body>
<header>
<nav class="navbar">
<!-- Navigační menu -->
</nav>
</header>
<main>
<!-- Hero sekce -->
<!-- O nás -->
<!-- Portfolio -->
<!-- Služby -->
<!-- Kontakt -->
</main>
<footer>
<!-- Footer obsah -->
</footer>
<!-- JavaScript soubory -->
</body>
</html>
Klíčové HTML prvky:
- Sémantické tagy:
<header>,<nav>,<main>,<section>,<footer> - Schema.org markup:
itemscope,itemtype="http://schema.org/Photography" - Správná hierarchie nadpisů (H1 → H2 → H3)
- Alt atributy u všech obrázků
- ARIA atributy pro přístupnost
4.3.2 CSS styly a responzivita
Responzivní breakpointy:
/* Mobile First approach */
/* Base styles - Mobile (< 576px) */
@media (min-width: 576px) {
/* Small devices (landscape phones) */
}
@media (min-width: 768px) {
/* Medium devices (tablets) */
}
@media (min-width: 992px) {
/* Large devices (desktops) */
}
@media (min-width: 1200px) {
/* Extra large devices (large desktops) */
}
Klíčové CSS techniky:
/* Flexbox pro layout */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
}
/* Grid pro portfolio */
.portfolio-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
/* Smooth scrolling */
html {
scroll-behavior: smooth;
}
/* Optimalizace fontů */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
font-display: swap;
}
4.3.3 JavaScript funkcionality
Hlavní JavaScript funkce v main.js:
// Smooth scroll pro kotvy
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
target.scrollIntoView({ behavior: 'smooth' });
});
});
// Lazy loading obrázků
const images = document.querySelectorAll('img[data-src]');
const imageObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
imageObserver.unobserve(img);
}
});
});
images.forEach(img => imageObserver.observe(img));
// Mobilní menu toggle
const menuToggle = document.querySelector('.navbar-toggler');
const menu = document.querySelector('#navbarNav');
menuToggle.addEventListener('click', () => {
menu.classList.toggle('show');
});
4.4 SEO implementace
4.4.1 Meta tagy
Základní meta tagy:
<meta name="description" content="Profesionální fotografování nemovitostí v Uherském Hradišti a okolí. Nabízíme interiérové i exteriérové fotografie pro realitní kanceláře, Airbnb a ubytovací portály.">
<meta name="keywords" content="fotografování nemovitostí, realitní fotografie, Uherské Hradiště, interiérová fotografie, fotograf bytů">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://reklik.net/" />
Open Graph tagy:
<meta property="og:type" content="website">
<meta property="og:url" content="https://reklik.net/">
<meta property="og:title" content="Reklik.net - Profesionální fotografování nemovitostí">
<meta property="og:description" content="Profesionální fotografování nemovitostí v Uherském Hradišti a okolí.">
<meta property="og:image" content="https://reklik.net/images/reklik.png">
Twitter Cards:
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://reklik.net/">
<meta property="twitter:title" content="Reklik.net - Profesionální fotografování nemovitostí">
<meta property="twitter:image" content="https://reklik.net/images/reklik.png">
4.4.2 Strukturovaná data
Implementace Schema.org pro typ Photography:
<html itemscope itemtype="http://schema.org/Photography">
4.4.3 Sitemap a robots.txt
robots.txt:
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /private/
Sitemap: https://reklik.net/sitemap.xml
sitemap.xml:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://reklik.net/</loc>
<lastmod>2025-10-13</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://foto.reklik.net/</loc>
<lastmod>2025-10-13</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
4.5 Konfigurace serveru
4.5.1 Instalace Ubuntu a základní nastavení
Postup instalace Ubuntu Server 22.04 LTS v Proxmoxu:
- Stažení Ubuntu Server ISO
- Vytvoření nové VM v Proxmox (2 vCPU, 4GB RAM, 50GB disk)
- Instalace Ubuntu s OpenSSH server
- První přihlášení a aktualizace systému:
sudo apt update && sudo apt upgrade -y
Základní zabezpečení:
# Konfigurace firewallu
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# Instalace fail2ban
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
4.5.2 Konfigurace Apache
Instalace Apache:
sudo apt install apache2 -y
sudo systemctl enable apache2
sudo systemctl start apache2
Virtual Host konfigurace (/etc/apache2/sites-available/000-default.conf):
<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>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Povolení modulů:
sudo a2enmod rewrite
sudo a2enmod headers
sudo systemctl restart apache2
4.5.3 Instalace a konfigurace PHP a MariaDB
Instalace PHP:
sudo apt install php libapache2-mod-php php-mysql php-gd php-mbstring php-xml -y
Instalace MariaDB:
sudo apt install mariadb-server -y
sudo mysql_secure_installation
Vytvoření databáze pro galerii:
sudo mysql -u root -p
CREATE DATABASE reklik_gallery;
CREATE USER 'reklik_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON reklik_gallery.* TO 'reklik_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
4.6 Implementace io200 galerie
Instalace io200:
cd /var/www/html
sudo wget https://www.io200.com/download/io200-latest.zip
sudo unzip io200-latest.zip
sudo chown -R www-data:www-data io200/
sudo chmod -R 755 io200/
Konfigurace io200:
Přístup na http://foto.reklik.net/io200/install.php a dokončení instalace přes webové rozhraní:
- Zadání databázových údajů
- Vytvoření admin účtu
- Konfigurace základních nastavení (název galerie, email)
Nahrávání fotografií:
Fotografie se nahrávají přes admin rozhraní na http://foto.reklik.net/io200/admin/. io200 automaticky generuje thumbnaily v různých velikostech.
4.7 Konfigurace Cloudflare Tunnel
Instalace cloudflared:
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
Autentizace a vytvoření tunelu:
cloudflared tunnel login
cloudflared tunnel create reklik-tunnel
Konfigurace tunelu (/etc/cloudflared/config.yml):
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
Spuštění jako služby:
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
Ověření stavu:
sudo systemctl status cloudflared
sudo journalctl -u cloudflared -f
4.8 Správa domén a DNS
Konfigurace DNS v Cloudflare:
- Přidání domény
reklik.netdo Cloudflare - Vytvoření CNAME záznamu pro
foto.reklik.netukazujícího na tunnel endpoint - Povolení Proxy (oranžový mráček) pro DDoS ochranu a CDN
- Konfigurace SSL/TLS na "Full" nebo "Full (strict)"
DNS záznamy:
Type Name Content Proxy
CNAME foto 252cbbd8-f381-44d5-b201.cfargotunnel.com Yes
A @ [Cloudflare IP] Yes
Cloudflare nastavení:
- SSL/TLS: Full
- Always Use HTTPS: On
- Auto Minify: HTML, CSS, JavaScript
- Brotli compression: On
- Caching Level: Standard
5. TESTOVÁNÍ
Testování je kritickou částí vývoje, která zajišťuje kvalitu a spolehlivost webové aplikace. V této kapitole jsou popsány různé typy testů, které byly provedeny.
5.1 Testování funkcionality
Manuální testování základních funkcí:
| Funkce | Test | Výsledek |
|---|---|---|
| Navigace | Kliknutí na všechny položky menu | ✓ Prošlo |
| Smooth scroll | Scrollování na kotvy | ✓ Prošlo |
| Responzivní menu | Hamburger menu na mobilu | ✓ Prošlo |
| Lightbox galerie | Otevření fotografií na plnou obrazovku | ✓ Prošlo |
| Formuláře | Validace kontaktního formuláře | ✓ Prošlo |
| Externí odkazy | Odkazy na foto.reklik.net | ✓ Prošlo |
5.2 Testování responzivity
Testované rozlišení:
- Desktop: 1920x1080, 1366x768, 1280x720
- Tablet: iPad (768x1024), iPad Pro (1024x1366)
- Mobile: iPhone SE (375x667), iPhone 12 (390x844), Samsung Galaxy (360x640)
Výsledky:
- Všechna rozlišení zobrazují obsah korektně
- Obrázky se správně škálují
- Text zůstává čitelný na všech zařízeních
- Mobilní menu funguje bez problémů
5.3 Testování výkonnosti
Nástroje použité pro testování:
-
Google PageSpeed Insights
- Mobile score: 85/100
- Desktop score: 92/100
-
GTmetrix
- Performance: A (92%)
- Structure: A (95%)
- Fully Loaded Time: 2.1s
Optimalizační opatření:
- Minifikace CSS a JavaScript
- Komprese obrázků (WebP kde možno)
- Lazy loading obrázků
- Využití Cloudflare CDN pro statické assety
- Browser caching
5.4 Testování SEO
Google Search Console výsledky:
- Indexace: Všechny stránky úspěšně zaindexovány
- Mobile usability: Žádné problémy
- Core Web Vitals: Vyhovující
SEO kontrola:
- ✓ Title tagy (unique, optimální délka)
- ✓ Meta descriptions (všechny stránky)
- ✓ H1-H6 hierarchie
- ✓ Alt atributy u obrázků
- ✓ XML sitemap
- ✓ robots.txt
- ✓ Strukturovaná data
- ✓ Canonical URLs
- ✓ HTTPS
5.5 Testování bezpečnosti
Provedené bezpečnostní testy:
-
SSL/TLS test (SSL Labs)
- Rating: A
- TLS 1.3 podporováno
- Žádné známé zranitelnosti
-
HTTP Security Headers
- X-Frame-Options: SAMEORIGIN
- X-Content-Type-Options: nosniff
- Referrer-Policy: strict-origin-when-cross-origin
-
Penetrační testování
- SQL Injection: Chráněno (prepared statements)
- XSS: Chráněno (output escapování)
- CSRF: Tokeny implementovány
5.6 Cross-browser testování
Testované prohlížeče:
| Prohlížeč | Verze | Výsledek |
|---|---|---|
| Chrome | 118+ | ✓ Plně kompatibilní |
| Firefox | 119+ | ✓ Plně kompatibilní |
| Safari | 16+ | ✓ Plně kompatibilní |
| Edge | 118+ | ✓ Plně kompatibilní |
Zjištěné problémy: Žádné kritické problémy, pouze drobné CSS rozdíly v Safari (vyřešeno).
5.7 Uživatelské testování
Metodika: 5 uživatelů z cílové skupiny (realitní makléři, majitelé nemovitostí)
Úkoly:
- Najít informace o cenách
- Prohlédnout portfolio
- Najít kontaktní informace
- Objednat službu
Výsledky:
- Průměrná doba splnění úkolů: 2 minuty
- Míra úspěšnosti: 100%
- Průměrné hodnocení UI: 4.6/5
- Zpětná vazba: Kladná, intuitivní navigace
6. NASAZENÍ A PROVOZ
6.1 Postup nasazení
Deployment workflow:
-
Vývoj lokálně
git checkout -b feature/nova-funkcionalita # Vývoj a testování git add . git commit -m "Popis změn" -
Push na GitHub
git push origin feature/nova-funkcionalita # Review kódu git checkout main git merge feature/nova-funkcionalita git push origin main -
Deploy na server
ssh user@192.168.0.185 cd /var/www/html sudo git pull origin main sudo chown -R www-data:www-data . sudo systemctl restart apache2 -
Ověření
- Test funkcionality na produkci
- Kontrola logů:
sudo tail -f /var/log/apache2/error.log - Smoke testing hlavních funkcí
6.2 Monitoring a údržba
Monitoring:
-
Uptime monitoring
- Cloudflare Analytics pro dostupnost
- UptimeRobot pro externí monitoring
- Alert při výpadku delším než 5 minut
-
Performance monitoring
- Cloudflare Web Analytics
- GoatCounter pro návštěvnost
- Server resource monitoring (htop, netdata)
-
Log monitoring
# Apache access logs sudo tail -f /var/log/apache2/access.log # Apache error logs sudo tail -f /var/log/apache2/error.log # Cloudflared logs sudo journalctl -u cloudflared -f
Pravidelná údržba:
- Denně: Kontrola dostupnosti, kontrola logů
- Týdně: Kontrola diskového prostoru, analýza návštěvnosti
- Měsíčně: Bezpečnostní aktualizace (
sudo apt update && sudo apt upgrade) - Čtvrtletně: Full server audit, optimalizace databáze
6.3 Zálohování
Zálohovací strategie:
-
Databáze (denní)
#!/bin/bash # /usr/local/bin/backup-db.sh DATE=$(date +%Y%m%d_%H%M%S) mysqldump -u reklik_user -p reklik_gallery > /backups/db_$DATE.sql # Uchovávat posledních 30 záloh find /backups -name "db_*.sql" -mtime +30 -deleteCron job:
0 2 * * * /usr/local/bin/backup-db.sh -
Soubory (týdně)
#!/bin/bash # Rsync záloha na externí disk rsync -avz /var/www/html/ /mnt/backup/html/ rsync -avz /etc/apache2/ /mnt/backup/apache2/ rsync -avz /etc/cloudflared/ /mnt/backup/cloudflared/ -
VM snapshots (Proxmox)
- Týdenní automatické snapshoty přes Proxmox
- Retention: 4 snapshoty (1 měsíc)
-
Offsite backup
- Měsíční export kritických dat na cloud storage (encrypted)
Restore procedura:
- Obnovení databáze:
mysql -u root -p reklik_gallery < backup.sql - Obnovení souborů:
rsync -avz /mnt/backup/html/ /var/www/html/ - Restart služeb:
sudo systemctl restart apache2 mariadb
6.4 Řešení problémů
Běžné problémy a řešení:
| Problém | Příčina | Řešení |
|---|---|---|
| Web nedostupný | Cloudflared down | sudo systemctl restart cloudflared |
| 500 Error | PHP chyba | Kontrola /var/log/apache2/error.log |
| Pomalé načítání | Nízká RAM | Restart Apache, optimalizace cache |
| Galerie nefunguje | Oprávnění souborů | sudo chown -R www-data:www-data /var/www/html |
| Databáze nedostupná | MariaDB není spuštěn | sudo systemctl start mariadb |
Kontakty pro support:
- Server hosting: Vlastní infrastruktura
- Doména: Cloudflare
- Dokumentace: GitHub repository
7. EKONOMICKÉ ZHODNOCENÍ
7.1 Náklady na vývoj
Hodinová sazba vývojáře: 500 Kč/hod (juniorní web developer)
| Aktivita | Hodiny | Náklady |
|---|---|---|
| Analýza a návrh | 20 | 10 000 Kč |
| Frontend vývoj | 40 | 20 000 Kč |
| Backend konfigurace | 15 | 7 500 Kč |
| SEO implementace | 10 | 5 000 Kč |
| Testování | 15 | 7 500 Kč |
| Dokumentace | 10 | 5 000 Kč |
| Celkem | 110 hodin | 55 000 Kč |
Poznámka: Pro maturitní projekt byly náklady nulové (vlastní práce), výše uvedená částka představuje tržní hodnotu.
7.2 Provozní náklady
Měsíční náklady:
| Položka | Cena/měsíc |
|---|---|
| Doména reklik.net | 25 Kč |
| Cloudflare (Free plan) | 0 Kč |
| Server (vlastní HW, elektřina ~50W 24/7) | ~100 Kč |
| Celkem | 125 Kč/měsíc |
Roční náklady: 1 500 Kč
Porovnání s alternativami:
| Řešení | Cena/měsíc | Poznámky |
|---|---|---|
| Vlastní hosting | 125 Kč | Aktuální řešení |
| Sdílený hosting | 150-300 Kč | Omezené zdroje |
| VPS hosting | 300-800 Kč | Lepší výkon, ale dražší |
| WordPress.com Premium | 700 Kč | Omezená customizace |
| Squarespace | 800 Kč | Vendor lock-in |
7.3 Srovnání s komerčními řešeními
Hotové řešení vs. Custom development:
| Kritérium | Vlastní řešení | Komerční platforma |
|---|---|---|
| Jednorázové náklady | 0 Kč (vlastní práce) | 0-20 000 Kč (setup) |
| Měsíční náklady | 125 Kč | 500-2000 Kč |
| Customizace | Plná kontrola | Omezená |
| Vlastnictví dat | Ano | Částečné |
| Škálovatelnost | Vysoká | Závislá na plánu |
| Technické znalosti | Potřebné | Minimální |
Ekonomické výhody vlastního řešení:
- Nízké provozní náklady: ~1 500 Kč ročně vs. 6 000-24 000 Kč u komerčních platforem
- Žádný vendor lock-in: Možnost kdykoliv změnit hosting
- Plná kontrola: Možnost implementovat jakékoliv funkce
- Učební efekt: Získané znalosti využitelné pro další projekty
- Portfolio: Projekt slouží jako ukázka schopností
ROI (Return on Investment):
Pokud by projekt byl fakturován klientovi:
- Tržní cena podobného projektu: 60 000-100 000 Kč
- Provozní úspory oproti komerčnímu řešení: ~10 000 Kč/rok
- Návratnost investice do vlastního řešení: Okamžitá (vlastní práce) až 1 rok (při outsourcingu)
8. ZÁVĚR
8.1 Zhodnocení výsledků
Cílem této maturitní práce bylo vytvořit kompletní webové řešení pro fotografické studio Reklik, zahrnující moderní responzivní webovou prezentaci a self-hosted fotografickou galerii. Tento cíl byl úspěšně splněn.
Výsledkem práce je plně funkční webová aplikace dostupná na adrese https://reklik.net s integrovanou galerií na https://foto.reklik.net. Web je optimalizován pro vyhledávače, responzivní pro všechna zařízení a připraven k aktivnímu komerčnímu využití.
Hlavní úspěchy projektu:
- Technická excelence: Projekt využívá moderní webové technologie a best practices
- Bezpečnost: Implementace Cloudflare Tunnel zajišťuje vysokou úroveň bezpečnosti
- Výkon: PageSpeed skóre 85+ na mobilu, 92+ na desktopu
- SEO: Všechny stránky správně zaindexovány, vyhovující Core Web Vitals
- Nákladová efektivita: Provozní náklady pouze 125 Kč/měsíc
8.2 Splnění cílů
Původní cíle vs. realizace:
| Cíl | Status | Poznámka |
|---|---|---|
| Responzivní webová prezentace | ✓ Splněno | Funguje na všech zařízeních |
| Fotografická galerie | ✓ Splněno | io200 implementována |
| Serverová infrastruktura | ✓ Splněno | Ubuntu + Apache + MariaDB |
| Cloudflare Tunnel | ✓ Splněno | Bezpečné tunelování |
| SEO optimalizace | ✓ Splněno | Všechny aspekty pokryty |
| Dokumentace | ✓ Splněno | Tato maturitní práce |
Všechny hlavní i dílčí cíle projektu byly úspěšně splněny.
8.3 Možnosti dalšího rozvoje
Krátkodobé rozšíření (3-6 měsíců):
-
Online objednávkový systém
- Formulář s výběrem typu fotografování
- Kalendář dostupnosti
- Email notifikace
-
Administrátorské rozhraní
- CMS pro správu obsahu bez editace kódu
- Dashboard s statistikami návštěvnosti
-
Blog/Portfolio rozšíření
- Pravidelné články o realizovaných projektech
- Tips & tricks pro fotografování nemovitostí
-
Optimalizace obrázků
- Automatické generování WebP formátů
- Responzivní obrázky (srcset)
Střednědobé rozšíření (6-12 měsíců):
-
Zákaznická sekce
- Přihlášení pro klienty
- Stahování fotografií po realizaci
- Historie objednávek
-
Platební brána
- Online platby za služby
- Fakturace
-
Multilanguage
- Anglická verze webu
- Německá verze (turismus)
-
API integrace
- Automatické nahrávání na realitní portály
- Integrace s Google My Business
Dlouhodobé rozšíření (12+ měsíců):
-
AI funkce
- Automatické tagování fotografií
- Doporučení kompozice
-
Mobilní aplikace
- iOS/Android app pro správu galerií
- Push notifikace
-
Škálování
- Kubernetes cluster pro HA
- CDN pro globální dostupnost
-
White-label řešení
- Prodej řešení jiným fotografům
8.4 Osobní přínos
Realizace tohoto projektu mi přinesla cenné zkušenosti v mnoha oblastech:
Technické dovednosti:
- Hlubší pochopení webových technologií (HTML5, CSS3, JavaScript)
- Praktické zkušenosti se správou Linux serveru
- Práce s Apache, PHP a MariaDB
- Implementace bezpečnostních opatření
- SEO optimalizace
Soft skills:
- Projektové řízení a plánování
- Řešení problémů (troubleshooting)
- Psaní technické dokumentace
- Komunikace s klientem (požadavky, zpětná vazba)
Osobní rozvoj:
- Zvýšení sebevědomí ve vlastních schopnostech
- Pochopení celého životního cyklu webového projektu
- Příprava na profesionální kariéru ve webovém vývoji
Tento projekt mi ukázal, že jsem schopen samostatně realizovat komplexní webový projekt od analýzy po nasazení a údržbu. Získané znalosti a zkušenosti využiji ve své budoucí profesní kariéře v oblasti webového vývoje a IT.
9. SEZNAM POUŽITÉ LITERATURY A ZDROJŮ
Odborné knihy a publikace
-
DUCKETT, Jon. HTML and CSS: Design and Build Websites. 1. vydání. Indianapolis: John Wiley & Sons, 2011. ISBN 978-1118008188.
-
FLANAGAN, David. JavaScript: The Definitive Guide. 7. vydání. O'Reilly Media, 2020. ISBN 978-1491952023.
-
ROBBINS, Jennifer Niederst. Learning Web Design: A Beginner's Guide to HTML, CSS, JavaScript, and Web Graphics. 5. vydání. O'Reilly Media, 2018. ISBN 978-1491960202.
-
WELLING, Luke; THOMSON, Laura. PHP and MySQL Web Development. 5. vydání. Addison-Wesley Professional, 2016. ISBN 978-0321833891.
Online zdroje a dokumentace
-
MDN Web Docs [online]. Mozilla Foundation. Dostupné z: https://developer.mozilla.org/
-
W3C HTML5 Specification [online]. W3C, 2014. Dostupné z: https://www.w3.org/TR/html5/
-
Apache HTTP Server Documentation [online]. Apache Software Foundation. Dostupné z: https://httpd.apache.org/docs/
-
PHP Documentation [online]. The PHP Group. Dostupné z: https://www.php.net/docs.php
-
MariaDB Knowledge Base [online]. MariaDB Foundation. Dostupné z: https://mariadb.com/kb/en/
-
Cloudflare Tunnel Documentation [online]. Cloudflare, Inc. Dostupné z: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/
-
io200 Gallery Documentation [online]. Dostupné z: https://www.io200.com/documentation
-
Proxmox VE Documentation [online]. Proxmox Server Solutions GmbH. Dostupné z: https://pve.proxmox.com/wiki/Main_Page
SEO a optimalizace
-
Google Search Central [online]. Google. Dostupné z: https://developers.google.com/search
-
Schema.org [online]. Dostupné z: https://schema.org/
-
Google PageSpeed Insights [online]. Google. Dostupné z: https://pagespeed.web.dev/
Nástroje a technologie
-
Git Documentation [online]. Dostupné z: https://git-scm.com/doc
-
GitHub Docs [online]. GitHub, Inc. Dostupné z: https://docs.github.com/
-
Ubuntu Server Guide [online]. Canonical Ltd. Dostupné z: https://ubuntu.com/server/docs
-
Bootstrap Documentation [online]. Bootstrap Team. Dostupné z: https://getbootstrap.com/docs/
-
jQuery Documentation [online]. jQuery Foundation. Dostupné z: https://api.jquery.com/
Návody a tutoriály
-
DigitalOcean Community Tutorials [online]. DigitalOcean. Dostupné z: https://www.digitalocean.com/community/tutorials
-
CSS-Tricks [online]. Dostupné z: https://css-tricks.com/
-
freeCodeCamp [online]. Dostupné z: https://www.freecodecamp.org/
Standardy a specifikace
-
Web Content Accessibility Guidelines (WCAG) 2.1 [online]. W3C, 2018. Dostupné z: https://www.w3.org/TR/WCAG21/
-
HTTP/2 Specification [online]. IETF. Dostupné z: https://httpwg.org/specs/rfc7540.html
10. PŘÍLOHY
Příloha A: Screenshoty aplikace
A.1 Desktop verze webu
- Homepage s hero sekcí
- Portfolio grid
- Navigační menu
A.2 Mobilní verze webu
- Responzivní zobrazení
- Hamburger menu
- Touchscreen navigace
A.3 Galerie io200
- Hlavní stránka galerie
- Album view
- Lightbox detail fotografie
- Admin rozhraní
Příloha B: Konfigurační soubory
B.1 Apache Virtual Host
# /etc/apache2/sites-available/000-default.conf
<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>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
B.2 Cloudflare Tunnel Config
# /etc/cloudflared/config.yml
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
B.3 Robots.txt
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /private/
Sitemap: https://reklik.net/sitemap.xml
Příloha C: SQL skripty
C.1 Vytvoření databáze
CREATE DATABASE reklik_gallery CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'reklik_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON reklik_gallery.* TO 'reklik_user'@'localhost';
FLUSH PRIVILEGES;
C.2 Zálohovací skript
#!/bin/bash
# /usr/local/bin/backup-db.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups"
DB_NAME="reklik_gallery"
DB_USER="reklik_user"
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# Uchovávat pouze posledních 30 záloh
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +30 -delete
echo "Backup completed: db_$DATE.sql.gz"
Příloha D: Návod k instalaci
D.1 Požadavky
- Proxmox VE 7.x nebo vyšší
- Ubuntu Server 22.04 LTS ISO
- Cloudflare účet
- Registrovaná doména
D.2 Postup instalace
- Vytvoření VM v Proxmoxu (2 vCPU, 4GB RAM, 50GB disk)
- Instalace Ubuntu Server
- Instalace LAMP stack (viz kapitola 4.5)
- Instalace io200 galerie (viz kapitola 4.6)
- Konfigurace Cloudflare Tunnel (viz kapitola 4.7)
- Nastavení DNS (viz kapitola 4.8)
- Deploy aplikace z GitHub repository
Příloha E: Použité licence
- Ubuntu Server: GNU General Public License
- Apache HTTP Server: Apache License 2.0
- PHP: PHP License 3.01
- MariaDB: GNU General Public License v2
- io200: MIT License (ověřit dle dokumentace)
- jQuery: MIT License
- Bootstrap: MIT License
Příloha F: Diagramy
F.1 Architektura systému (Diagram viz kapitola 3.4.1)
F.2 Síťová topologie (Diagram viz kapitola 3.4.4)
F.3 ER diagram databáze (Diagram viz kapitola 3.6)
Příloha G: Odkazy na živou aplikaci
- Webová prezentace: https://reklik.net
- Fotografická galerie: https://foto.reklik.net
- GitHub repository: https://github.com/Dvorinka/reklik
KONEC MATURITNÍ PRÁCE
Tato maturitní práce byla vytvořena v souladu s požadavky školy a představuje originální dílo autora. Veškeré použité zdroje jsou řádně citovány.