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

69 KiB
Raw Blame History

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

  1. ÚVOD

  2. TEORETICKÁ ČÁST

  3. ANALÝZA A NÁVRH

  4. IMPLEMENTACE

  5. TESTOVÁNÍ

  6. NASAZENÍ A PROVOZ

  7. EKONOMICKÉ ZHODNOCENÍ

  8. ZÁVĚR

  9. SEZNAM POUŽITÉ LITERATURY A ZDROJŮ

  10. PŘÍLOHY


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ů:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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:

  1. 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
  2. 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í
  3. 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í
  4. 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í
  5. 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
  6. 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, range atd.) 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-face pravidlo 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:

  1. Fluid Grid: Použití relativních jednotek (%, em, rem) namísto fixních pixelů
  2. Flexibilní obrázky: Obrázky se přizpůsobují velikosti kontejneru
  3. 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 odkazy
  • mod_ssl: HTTPS podpora (i když certifikát je primárně spravován přes Cloudflare)
  • mod_php: Integrace PHP do Apache
  • mod_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 tabulek
  • INSERT: 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:

  1. Izolace: Každá VM běží izolovaně, selhání jedné neovlivní ostatní
  2. Efektivní využití zdrojů: Více služeb na jednom fyzickém serveru
  3. Snadná správa: Snapshoty, klonování, migrace
  4. Testovací prostředí: Možnost rychle vytvořit testovací instance
  5. 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:

  1. Otevření portů 80 a 443 na firewallu
  2. Port forwarding na routeru
  3. Vystavení serveru přímo na internet

Cloudflare Tunnel funguje jinak:

  1. Na serveru běží cloudflared daemon
  2. Daemon vytvoří odchozí spojení k Cloudflare (port 443 outbound)
  3. Veškerý příchozí traffic jde přes Cloudflare síť
  4. 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:

  1. Handshake: Klient a server se dohodnou na šifrovacích algoritmech
  2. Výměna certifikátů: Server posílá svůj SSL certifikát
  3. Ověření identity: Klient ověřuje platnost certifikátu
  4. Š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í

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:

  1. Vlastnictví dat: Fotografie jsou na vlastním serveru
  2. Žádné omezení velikosti: Pouze limitováno velikostí disku
  3. Žádné poplatky: Kromě hostingu žádné měsíční poplatky
  4. Customizace: Možnost přizpůsobit galerii potřebám projektu
  5. Soukromí: Data nejsou na serverech třetích stran

Nevýhody:

  1. Údržba: Nutnost spravovat server a aktualizace
  2. Backup: Odpovědnost za zálohování dat
  3. Š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:

  1. Title tag: Unikátní a popisný název stránky (50-60 znaků)
  2. Meta description: Popis obsahu stránky (150-160 znaků)
  3. Heading tags (H1-H6): Hierarchická struktura nadpisů
  4. URL struktura: Čisté, SEO-friendly URL
  5. Alt text u obrázků: Popis obrázků pro vyhledávače
  6. Interní odkazy: Propojení stránek webu
  7. Content kvalita: Unikátní, relevantní a kvalitní obsah
  8. Keywords: Přirozené použití klíčových slov

Technical SEO:

  1. Rychlost načítání: Optimalizace velikosti souborů, caching
  2. Mobile-friendly: Responzivní design
  3. HTTPS: Zabezpečené spojení
  4. XML Sitemap: Přehled všech stránek pro vyhledávače
  5. Robots.txt: Instrukce pro crawlery
  6. Strukturovaná data: Schema.org markup
  7. Canonical URLs: Prevence duplicitního obsahu

Off-page SEO:

  1. Backlinks: Odkazy z jiných kvalitních webů
  2. Social signals: Aktivita na sociálních sítích
  3. 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:

  1. git init nebo git clone Inicializace/klonování repository
  2. git add <soubory> Přidání souborů do staging area
  3. git commit -m "zpráva" Uložení změn s popisem
  4. git push Nahrání na vzdálené repository
  5. git 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:

  1. Client Layer: Webový prohlížeč (Desktop, Tablet, Mobile)
  2. CDN/Proxy Layer: Cloudflare (DDoS ochrana, SSL/TLS, caching)
  3. Application Layer: Apache + PHP + io200 galerie
  4. 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í:

  1. Síťová bezpečnost:

    • Cloudflare Tunnel (žádné otevřené porty)
    • UFW firewall na serveru
    • Fail2ban pro ochranu před brute-force
  2. 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
  3. 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:

  1. Stažení Ubuntu Server ISO
  2. Vytvoření nové VM v Proxmox (2 vCPU, 4GB RAM, 50GB disk)
  3. Instalace Ubuntu s OpenSSH server
  4. 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í:

  1. Zadání databázových údajů
  2. Vytvoření admin účtu
  3. 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:

  1. Přidání domény reklik.net do Cloudflare
  2. Vytvoření CNAME záznamu pro foto.reklik.net ukazujícího na tunnel endpoint
  3. Povolení Proxy (oranžový mráček) pro DDoS ochranu a CDN
  4. 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í:

  1. Google PageSpeed Insights

    • Mobile score: 85/100
    • Desktop score: 92/100
  2. 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:

  1. SSL/TLS test (SSL Labs)

    • Rating: A
    • TLS 1.3 podporováno
    • Žádné známé zranitelnosti
  2. HTTP Security Headers

    • X-Frame-Options: SAMEORIGIN
    • X-Content-Type-Options: nosniff
    • Referrer-Policy: strict-origin-when-cross-origin
  3. 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:

  1. Najít informace o cenách
  2. Prohlédnout portfolio
  3. Najít kontaktní informace
  4. 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:

  1. Vývoj lokálně

    git checkout -b feature/nova-funkcionalita
    # Vývoj a testování
    git add .
    git commit -m "Popis změn"
    
  2. Push na GitHub

    git push origin feature/nova-funkcionalita
    # Review kódu
    git checkout main
    git merge feature/nova-funkcionalita
    git push origin main
    
  3. 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
    
  4. 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:

  1. Uptime monitoring

    • Cloudflare Analytics pro dostupnost
    • UptimeRobot pro externí monitoring
    • Alert při výpadku delším než 5 minut
  2. Performance monitoring

    • Cloudflare Web Analytics
    • GoatCounter pro návštěvnost
    • Server resource monitoring (htop, netdata)
  3. 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:

  1. 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 -delete
    

    Cron job: 0 2 * * * /usr/local/bin/backup-db.sh

  2. 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/
    
  3. VM snapshots (Proxmox)

    • Týdenní automatické snapshoty přes Proxmox
    • Retention: 4 snapshoty (1 měsíc)
  4. Offsite backup

    • Měsíční export kritických dat na cloud storage (encrypted)

Restore procedura:

  1. Obnovení databáze: mysql -u root -p reklik_gallery < backup.sql
  2. Obnovení souborů: rsync -avz /mnt/backup/html/ /var/www/html/
  3. 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í:

  1. Nízké provozní náklady: ~1 500 Kč ročně vs. 6 000-24 000 Kč u komerčních platforem
  2. Žádný vendor lock-in: Možnost kdykoliv změnit hosting
  3. Plná kontrola: Možnost implementovat jakékoliv funkce
  4. Učební efekt: Získané znalosti využitelné pro další projekty
  5. 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:

  1. Technická excelence: Projekt využívá moderní webové technologie a best practices
  2. Bezpečnost: Implementace Cloudflare Tunnel zajišťuje vysokou úroveň bezpečnosti
  3. Výkon: PageSpeed skóre 85+ na mobilu, 92+ na desktopu
  4. SEO: Všechny stránky správně zaindexovány, vyhovující Core Web Vitals
  5. 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ů):

  1. Online objednávkový systém

    • Formulář s výběrem typu fotografování
    • Kalendář dostupnosti
    • Email notifikace
  2. Administrátorské rozhraní

    • CMS pro správu obsahu bez editace kódu
    • Dashboard s statistikami návštěvnosti
  3. Blog/Portfolio rozšíření

    • Pravidelné články o realizovaných projektech
    • Tips & tricks pro fotografování nemovitostí
  4. Optimalizace obrázků

    • Automatické generování WebP formátů
    • Responzivní obrázky (srcset)

Střednědobé rozšíření (6-12 měsíců):

  1. Zákaznická sekce

    • Přihlášení pro klienty
    • Stahování fotografií po realizaci
    • Historie objednávek
  2. Platební brána

    • Online platby za služby
    • Fakturace
  3. Multilanguage

    • Anglická verze webu
    • Německá verze (turismus)
  4. API integrace

    • Automatické nahrávání na realitní portály
    • Integrace s Google My Business

Dlouhodobé rozšíření (12+ měsíců):

  1. AI funkce

    • Automatické tagování fotografií
    • Doporučení kompozice
  2. Mobilní aplikace

    • iOS/Android app pro správu galerií
    • Push notifikace
  3. Škálování

    • Kubernetes cluster pro HA
    • CDN pro globální dostupnost
  4. 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

  1. DUCKETT, Jon. HTML and CSS: Design and Build Websites. 1. vydání. Indianapolis: John Wiley & Sons, 2011. ISBN 978-1118008188.

  2. FLANAGAN, David. JavaScript: The Definitive Guide. 7. vydání. O'Reilly Media, 2020. ISBN 978-1491952023.

  3. 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.

  4. WELLING, Luke; THOMSON, Laura. PHP and MySQL Web Development. 5. vydání. Addison-Wesley Professional, 2016. ISBN 978-0321833891.

Online zdroje a dokumentace

  1. MDN Web Docs [online]. Mozilla Foundation. Dostupné z: https://developer.mozilla.org/

  2. W3C HTML5 Specification [online]. W3C, 2014. Dostupné z: https://www.w3.org/TR/html5/

  3. Apache HTTP Server Documentation [online]. Apache Software Foundation. Dostupné z: https://httpd.apache.org/docs/

  4. PHP Documentation [online]. The PHP Group. Dostupné z: https://www.php.net/docs.php

  5. MariaDB Knowledge Base [online]. MariaDB Foundation. Dostupné z: https://mariadb.com/kb/en/

  6. Cloudflare Tunnel Documentation [online]. Cloudflare, Inc. Dostupné z: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/

  7. io200 Gallery Documentation [online]. Dostupné z: https://www.io200.com/documentation

  8. Proxmox VE Documentation [online]. Proxmox Server Solutions GmbH. Dostupné z: https://pve.proxmox.com/wiki/Main_Page

SEO a optimalizace

  1. Google Search Central [online]. Google. Dostupné z: https://developers.google.com/search

  2. Schema.org [online]. Dostupné z: https://schema.org/

  3. Google PageSpeed Insights [online]. Google. Dostupné z: https://pagespeed.web.dev/

Nástroje a technologie

  1. Git Documentation [online]. Dostupné z: https://git-scm.com/doc

  2. GitHub Docs [online]. GitHub, Inc. Dostupné z: https://docs.github.com/

  3. Ubuntu Server Guide [online]. Canonical Ltd. Dostupné z: https://ubuntu.com/server/docs

  4. Bootstrap Documentation [online]. Bootstrap Team. Dostupné z: https://getbootstrap.com/docs/

  5. jQuery Documentation [online]. jQuery Foundation. Dostupné z: https://api.jquery.com/

Návody a tutoriály

  1. DigitalOcean Community Tutorials [online]. DigitalOcean. Dostupné z: https://www.digitalocean.com/community/tutorials

  2. CSS-Tricks [online]. Dostupné z: https://css-tricks.com/

  3. freeCodeCamp [online]. Dostupné z: https://www.freecodecamp.org/

Standardy a specifikace

  1. Web Content Accessibility Guidelines (WCAG) 2.1 [online]. W3C, 2018. Dostupné z: https://www.w3.org/TR/WCAG21/

  2. 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

  1. Vytvoření VM v Proxmoxu (2 vCPU, 4GB RAM, 50GB disk)
  2. Instalace Ubuntu Server
  3. Instalace LAMP stack (viz kapitola 4.5)
  4. Instalace io200 galerie (viz kapitola 4.6)
  5. Konfigurace Cloudflare Tunnel (viz kapitola 4.7)
  6. Nastavení DNS (viz kapitola 4.8)
  7. 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


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.