{"id":37361,"date":"2026-09-28T12:42:54","date_gmt":"2026-09-28T10:42:54","guid":{"rendered":"https:\/\/www.websupport.sk\/podpora\/?post_type=ht_kb&#038;p=37361"},"modified":"2026-09-28T12:42:55","modified_gmt":"2026-09-28T10:42:55","slug":"migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps","status":"publish","type":"ht_kb","link":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/","title":{"rendered":"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server. Tento n\u00e1vod pokr\u00fdva inform\u00e1cie od zistenia verzi\u00ed (PHP, datab\u00e1za, webserver) cez spr\u00e1vne dimenzovanie a identick\u00e9 nasadenie prostredia a\u017e po prenos d\u00e1t, HTTPS certifik\u00e1t, ladenie v\u00fdkonu a prev\u00e1dzku nemana\u017eovan\u00e9ho servera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cie\u013eov\u00e1 platforma:<\/strong> Ubuntu Server 24.04 LTS<br><strong>Stack:<\/strong> Nginx + Apache + PHP-FPM + MariaDB<br><strong>N\u00e1ro\u010dnos\u0165:<\/strong> pokro\u010dil\u00e1<br><strong>Predpokladan\u00fd \u010das:<\/strong> pol d\u0148a &#8211; 1 de\u0148<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zo zdie\u013ean\u00e9ho hostingu na VPS: \u010do sa men\u00ed<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Predt\u00fdm, ne\u017e sa pust\u00edte do pr\u00edkazov, je d\u00f4le\u017eit\u00e9 ch\u00e1pa\u0165 povahu tejto zmeny. Neprech\u00e1dzate len na v\u00fdkonnej\u0161\u00ed \u201ebal\u00edk\u201c &#8211; prech\u00e1dzate z <strong>plne mana\u017eovan\u00e9ho prostredia na nemana\u017eovan\u00e9<\/strong>. To je najv\u00e4\u010d\u0161\u00ed rozdiel celej migr\u00e1cie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na zdie\u013eanom hostingu Websupport za v\u00e1s poskytovate\u013e rie\u0161il takmer v\u0161etko \u201epod kapotou\u201c: aktualiz\u00e1cie opera\u010dn\u00e9ho syst\u00e9mu a webov\u00e9ho stacku, bezpe\u010dnostn\u00e9 z\u00e1platy, ochranu pred \u00fatokmi, monitoring dostupnosti, z\u00e1lohovanie aj z\u00e1kladn\u00e9 ladenie v\u00fdkonu. Vy ste sa starali len o svoju aplik\u00e1ciu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na <strong>nemana\u017eovanom VPS<\/strong> dost\u00e1vate dedikovan\u00e9 zdroje a pln\u00fa kontrolu (root pr\u00edstup, \u013eubovo\u013en\u00e9 verzie softv\u00e9ru, vlastn\u00e1 konfigur\u00e1cia), ale z\u00e1rove\u0148 preber\u00e1te <strong>pln\u00fa zodpovednos\u0165<\/strong> za cel\u00fd server &#8211; od jadra syst\u00e9mu po z\u00e1lohy. Nie je to ni\u010d, \u010do by sa nedalo zvl\u00e1dnu\u0165, no treba s t\u00fdm po\u010d\u00edta\u0165 od za\u010diatku, nie a\u017e ke\u010f nie\u010do prestane fungova\u0165.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u010co z\u00edskavate<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vyhraden\u00e9 vCPU, RAM a NVMe disk len pre va\u0161u aplik\u00e1ciu.<\/li>\n\n\n\n<li>\u013dubovo\u013en\u00e9 verzie PHP, datab\u00e1zy a webservera; vlastn\u00e9 roz\u0161\u00edrenia a moduly.<\/li>\n\n\n\n<li>V\u00e4\u010d\u0161ie limity (pam\u00e4\u0165 skriptu, po\u010det procesov, ve\u013ekos\u0165 uploadu, cache).<\/li>\n\n\n\n<li>Mo\u017enos\u0165 \u0161k\u00e1lova\u0165 vertik\u00e1lne (viac zdrojov) aj horizont\u00e1lne (viac serverov).<\/li>\n\n\n\n<li>N\u00e1stroje ako Redis, Varnish, vlastn\u00fd cron, systemd slu\u017eby, CI\/CD.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u010co preber\u00e1te na seba<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aktualiz\u00e1cie OS a v\u0161etk\u00fdch bal\u00edkov (vr\u00e1tane bezpe\u010dnostn\u00fdch).<\/li>\n\n\n\n<li>Z\u00e1lohovanie d\u00e1t a overovanie obnovy.<\/li>\n\n\n\n<li>Monitoring dostupnosti a vy\u0165a\u017eenia (CPU, RAM, disk).<\/li>\n\n\n\n<li>Bezpe\u010dnos\u0165: firewall, ochrana pred \u00fatokmi, hardening.<\/li>\n\n\n\n<li>Ladenie v\u00fdkonu a rie\u0161enie incidentov.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP:<\/strong> V celom n\u00e1vode n\u00e1jdete odpor\u00fa\u010dania <strong>Managed \u2192 Unmanaged<\/strong>, ktor\u00e9 upozor\u0148uj\u00fa na body, kde nie\u010do, \u010do za v\u00e1s doteraz rie\u0161il Websupport, teraz mus\u00edte zabezpe\u010di\u0165 sami. Ak zist\u00edte, \u017ee spr\u00e1va servera je nad va\u0161e \u010dasov\u00e9 alebo person\u00e1lne mo\u017enosti, Websupport pon\u00faka doplnkov\u00fa slu\u017ebu <a href=\"https:\/\/www.websupport.sk\/servery\/sprava\/\">Spr\u00e1va servera<\/a>, v r\u00e1mci ktorej aktualiz\u00e1cie, monitoring, z\u00e1lohy aj ladenie preber\u00fa administr\u00e1tori Websupportu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Anal\u00fdza s\u00fa\u010dasn\u00e9ho prostredia a pr\u00edprava<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cie\u013eom migr\u00e1cie je postavi\u0165 na VPS prostredie, ktor\u00e9 je s p\u00f4vodn\u00fdm <strong>identick\u00e9 alebo lep\u0161ie<\/strong>. To sa d\u00e1 len vtedy, ke\u010f presne viete, \u010do dnes be\u017e\u00ed. Najprv teda zist\u00edte verzie a konfigur\u00e1ciu, a\u017e potom staviate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Zistenie verzie PHP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verziu PHP na zdie\u013eanom hostingu zist\u00edte vo <strong>WebAdmine<\/strong> (sekcia hostingu \u2192 nastavenia PHP), alebo priamo z aplik\u00e1cie kr\u00e1tkym skriptom. Vytvorte s\u00fabor info.php v koreni webu:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br>phpinfo();<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Otvorte <code>https:\/\/mojadomena.sk\/info.php<\/code>. Z v\u00fdstupu si zap\u00ed\u0161te: <strong>verziu PHP<\/strong>, <strong>zapnut\u00e9 roz\u0161\u00edrenia<\/strong> (Loaded Extensions), <strong>SAPI<\/strong> (FPM\/CGI\/Apache module), a hodnoty ako <code>memory_limit, upload_max_filesize, post_max_size, max_execution_time, date.timezone<\/code>. Tie budete na VPS replikova\u0165.<br><\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-danger\"><strong>TIP:<\/strong> <code>info.php<\/code> <strong>okam\u017eite po od\u010d\u00edtan\u00ed zma\u017ete<\/strong>. Nech\u00e1va unikn\u00fa\u0165 citliv\u00e9 inform\u00e1cie o serveri, ktor\u00e9 vyu\u017e\u00edvaj\u00fa \u00fato\u010dn\u00edci. Nikdy ho nenech\u00e1vajte na produk\u010dnom serveri.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ak m\u00e1te SSH\/shell pr\u00edstup, funguje aj:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># verzia CLI PHP a zoznam modulov<br>php -v<br>php -m<br># hodnoty konfigur\u00e1cie, ktor\u00e9 chcete prenies\u0165<br>php -i | grep -Ei 'memory_limit|upload_max|post_max|max_execution|timezone|opcache<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>TIP: <\/strong>PHP 8.1 je EOL a be\u017e\u00ed bez bezpe\u010dnostn\u00fdch z\u00e1plat. Skok na 8.5 je v\u00e4\u010d\u0161\u00ed ako minor upgrade &#8211; medzi verziami pribudli <em>deprecations<\/em> a zmeny spr\u00e1vania. Ne\u017e prostredie ostro nasad\u00edte, preverte kompatibilitu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aktualizujte CMS\/framework a v\u0161etky <strong>pluginy, t\u00e9my a kni\u017enice<\/strong> na verzie, ktor\u00e9 deklaruj\u00fa podporu cie\u013eov\u00e9ho PHP (napr. WordPress, Joomla, Laravel, Symfony maj\u00fa maticu podporovan\u00fdch verzi\u00ed).<\/li>\n\n\n\n<li>Ak pou\u017e\u00edvate Composer, spustite <code>composer why-not php 8.5<\/code> a <code>composer update<\/code> na testovacej k\u00f3pii.<\/li>\n\n\n\n<li>Skontrolujte migra\u010dn\u00e9 pr\u00edru\u010dky PHP (<em>Migration Guide<\/em>) pre 8.2, 8.3, 8.4, 8.5 &#8211; zmeny s\u00fa kumulat\u00edvne.<\/li>\n\n\n\n<li>Otestujte na <strong>staging k\u00f3pii<\/strong> so zapnut\u00fdm<code> display_errors<\/code> a <code>log_errors <\/code>e\u0161te pred prepnut\u00edm produkcie.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 Zistenie datab\u00e1zy a jej verzie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zdie\u013ean\u00fd hosting Websupport pou\u017e\u00edva rela\u010dn\u00e9 datab\u00e1zy <strong>MariaDB\/MySQL<\/strong>. Verziu a znakov\u00fa sadu zist\u00edte cez phpMyAdmin (\u00favodn\u00e1 str\u00e1nka zobrazuje verziu servera), alebo SQL dotazom:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT VERSION();<br>SHOW VARIABLES LIKE 'character_set_server';<br>SHOW VARIABLES LIKE 'collation_server';<br><br>-- ve\u013ekos\u0165 datab\u00e1zy (MB) pod\u013ea sch\u00e9m - d\u00f4le\u017eit\u00e9 pre sizing bufferov<br>SELECT table_schema AS db,<br>       ROUND(SUM(data_length + index_length)\/1024\/1024, 1) AS size_mb<br>FROM information_schema.tables<br>GROUP BY table_schema<br>ORDER BY size_mb DESC;<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP:<\/strong> Star\u0161ie MariaDB\/MySQL datab\u00e1zy s\u00fa vo v\u00e4\u010d\u0161ine pr\u00edpadov <strong>plne kompatibiln\u00e9 s nov\u0161\u00edmi verziami<\/strong> &#8211; dump zo star\u0161ej verzie nov\u0161ia bez probl\u00e9mov naimportuje. Napriek tomu import <strong>otestujte<\/strong> na testovacej DB. Pri prechode z ve\u013emi star\u00fdch verzi\u00ed (napr. MySQL 5.x s utf8\/latin1) dbajte na spr\u00e1vne k\u00f3dovanie &#8211; cie\u013eom by malo by\u0165 utf8mb4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 Webserver, .htaccess a cron<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zdie\u013ean\u00fd hosting be\u017e\u00ed na <strong>Apache<\/strong> s podporou<code> .htaccess<\/code>. Zistite, \u010di ho aplik\u00e1cia vyu\u017e\u00edva (SEO\/pekn\u00e9 URL, presmerovania, hlavi\u010dky, ochrana prie\u010dinkov). To ovplyvn\u00ed architekt\u00faru na VPS:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Apache na VPS<\/strong> zachov\u00e1 <code>.htaccess <\/code>bez \u00faprav (potrebn\u00e9 <code>mod_rewrite<\/code> a <code>AllowOverride All<\/code>).<\/li>\n\n\n\n<li><strong>Nginx<\/strong> <code>.htaccess <\/code>nepozn\u00e1 &#8211; pravidl\u00e1 treba prep\u00edsa\u0165 do konfigur\u00e1cie servera.<\/li>\n\n\n\n<li>V tomto n\u00e1vode pou\u017eijeme <strong>kombin\u00e1ciu oboch<\/strong>: Nginx vpredu (r\u00fdchly, statika, TLS, rate\u2011limit) a Apache s <code>mod_php-fpm<\/code> vzadu (spracuje <code>.htaccess<\/code>).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nezabudnite na <strong>pl\u00e1novan\u00e9 \u00falohy (cron)<\/strong>. Na hostingu ich spravoval WebAdmin; na VPS si ich nastav\u00edte sami cez crontab -e. Vyp\u00ed\u0161te si v\u0161etky existuj\u00face cron \u00falohy a ich \u010dasovanie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.4 \u010eal\u0161ie z\u00e1vislosti aplik\u00e1cie<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Odosielanie e\u2011mailov:<\/strong> ako aplik\u00e1cia posiela po\u0161tu? (funkcia mail(), lok\u00e1lne SMTP, extern\u00e1 slu\u017eba). Na VPS to budete musie\u0165 vyrie\u0161i\u0165.<\/li>\n\n\n\n<li><strong>Roz\u0161\u00edrenia PHP:<\/strong> zo zoznamu z info.php si pripravte, \u010do doin\u0161talova\u0165 (mysqli\/pdo_mysql, gd\/imagick, curl, mbstring, intl, zip, bcmath, xml\u2026).<\/li>\n\n\n\n<li><strong>Extern\u00e9 slu\u017eby a API k\u013e\u00fa\u010de:<\/strong> platobn\u00e9 br\u00e1ny, CDN, SMTP, reCAPTCHA &#8211; overte IP whitelisty (men\u00ed sa v\u00e1m IP servera!).<\/li>\n\n\n\n<li><strong>Ve\u013ekos\u0165 d\u00e1t:<\/strong> celkov\u00fd objem s\u00faborov (du -sh) a datab\u00e1zy &#8211; vstup pre sizing disku.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-alert\"><strong>TIP:<\/strong> E\u0161te pred \u010d\u00edmko\u013evek si vytvorte aktu\u00e1lnu <strong>z\u00e1lohu s\u00faborov aj datab\u00e1zy<\/strong>. Ide\u00e1lne postavte <strong>staging k\u00f3piu<\/strong> (lok\u00e1lne alebo na testovacom VPS) s presne t\u00fdmi verziami, ak\u00e9 pl\u00e1nujete nasadi\u0165. Cel\u00fa migr\u00e1ciu si tak nacvi\u010d\u00edte \u201enane\u010disto\u201c a chyby (ch\u00fdbaj\u00face roz\u0161\u00edrenie, zl\u00e9 cesty, nekompatibilita) odhal\u00edte bez v\u00fdpadku produkcie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Zmeranie s\u00fa\u010dasnej z\u00e1\u0165a\u017ee a sizing na X\u2011n\u00e1sobok<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Naj\u010dastej\u0161ia ot\u00e1zka pri VPS znie: <em>\u201eak\u00fa konfigur\u00e1ciu si m\u00e1m vybra\u0165?\u201c<\/em> Odpove\u010f nie je odhad, ale meranie. V tejto sekcii najprv zist\u00edte, <strong>ko\u013eko toho web zvl\u00e1da teraz<\/strong>, a potom to prepo\u010d\u00edtate na cie\u013eov\u00fd <strong>X\u2011n\u00e1sobok<\/strong> s rozumnou rezervou.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">TIP: Ako <strong>minimum pre produk\u010dn\u00fd VPS<\/strong> odpor\u00fa\u010dame <strong>4 vCPU, 2 GB RAM a 25 GB SSD<\/strong>. Je to dobr\u00fd \u0161tart, ke\u010f nem\u00e1te istotu. Ni\u017e\u0161ie parametre s\u00fa vhodn\u00e9 len pre v\u00fdvoj\/test. Parametre (vCPU, RAM, disk) sa daj\u00fa <strong>kedyko\u013evek nav\u00fd\u0161i\u0165<\/strong>, tak\u017ee sa netreba b\u00e1\u0165 za\u010da\u0165 menej a r\u00e1s\u0165 pod\u013ea meran\u00ed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Krok A &#8211; zmerajte, \u010do web zvl\u00e1da teraz<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zbierajte tieto \u0161tyri skupiny \u00fadajov. \u010cas\u0165 n\u00e1jdete v \u0161tatistik\u00e1ch WebAdmin (n\u00e1v\u0161tevnos\u0165, prenos d\u00e1t, po\u010det DB dotazov), zvy\u0161ok dopo\u010d\u00edtate z logov a datab\u00e1zy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>N\u00e1v\u0161tevnos\u0165 a \u0161pi\u010dkov\u00e9 za\u0165a\u017eenie z access logu<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ak m\u00e1te pr\u00edstup k access logu (na hostingu cez WebAdmin\/FTP, na akejko\u013evek k\u00f3pii lok\u00e1lne), zist\u00edte re\u00e1lny po\u010det po\u017eiadaviek za sekundu v \u0161pi\u010dke. To je k\u013e\u00fa\u010dov\u00e9 \u010d\u00edslo &#8211; priemer klame, dimenzujete na \u0161pi\u010dku.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Po\u010det po\u017eiadaviek za jednotliv\u00e9 sekundy - n\u00e1jde najsilnej\u0161iu \u0161pi\u010dku (req\/s)<br>awk '{print $4}' access.log | cut -d: -f2-4 | sort | uniq -c | sort -rn | head<br><br># Po\u010det po\u017eiadaviek za min\u00fatu (preh\u013eadnej\u0161ie pre men\u0161ie weby)<br>awk '{print $4}' access.log | cut -d: -f2-3 | sort | uniq -c | sort -rn | head<br><br># Podiel dynamick\u00fdch (PHP) vs. statick\u00fdch po\u017eiadaviek - d\u00f4le\u017eit\u00e9 pre sizing PHP-FPM<br>grep -c '\\.php' access.log<br>wc -l &lt; access.log<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pre pohodlnej\u0161iu anal\u00fdzu odpor\u00fa\u010dame n\u00e1stroj <strong>GoAccess<\/strong> (sudo apt install goaccess), ktor\u00fd z logu vygeneruje interakt\u00edvny report vr\u00e1tane \u0161pi\u010diek, top URL a stavov\u00fdch k\u00f3dov.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Odhad s\u00fabe\u017enosti (concurrency)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Po\u010det naozaj <strong>s\u00fa\u010dasne be\u017eiacich po\u017eiadaviek<\/strong> odhadnete z priepustnosti a doby odozvy pod\u013ea Little&#8217;s law:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Little's law - priemern\u00e1 s\u00fabe\u017enos\u0165 s\u00fabe\u017en\u00e9 po\u017eiadavky \u2248 \u0161pi\u010dka (req\/s) \u00d7 priemern\u00e1 doba odozvy (s) # Pr\u00edklad: 30 req\/s v \u0161pi\u010dke, priemern\u00e1 odozva PHP 0,2 s 30 \u00d7 0,2 = 6 s\u00fabe\u017en\u00fdch PHP workerov v priemere (\u0161pi\u010dkovo viac \u2192 r\u00e1tajte 2-3\u00d7)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Datab\u00e1zov\u00e1 z\u00e1\u0165a\u017e a ve\u013ekos\u0165<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Z u\u017e pozn\u00e1me ve\u013ekos\u0165 datab\u00e1zy. Dopl\u0148te inform\u00e1ciu o \u201e\u0165a\u017ek\u00fdch\u201c dotazoch &#8211; tie ur\u010duj\u00fa, ko\u013eko RAM sa oplat\u00ed da\u0165 datab\u00e1ze (buffer pool by mal ide\u00e1lne pokry\u0165 tzv. <em>working set<\/em>, teda akt\u00edvne pou\u017e\u00edvan\u00e9 d\u00e1ta a indexy).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aktu\u00e1lne syst\u00e9mov\u00e9 metriky<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ak be\u017e\u00ed aplik\u00e1cia u\u017e na nejakom serveri, kde m\u00e1te pr\u00edstup, sledujte<code> htop, free -h, iostat<\/code>. Na zdie\u013eanom hostingu tento poh\u013ead nem\u00e1te &#8211; tam sa oprite o n\u00e1v\u0161tevnos\u0165 a typ aplik\u00e1cie (jednoduch\u00fd web vs. e\u2011shop s mno\u017estvom pluginov).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Krok B &#8211; n\u00e1jdite strop z\u00e1\u0165a\u017eov\u00fdm testom<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najspo\u013eahlivej\u0161ie zist\u00edte hranicu v\u00fdkonu <strong>z\u00e1\u0165a\u017eov\u00fdm testom<\/strong>. Spustite ho <em>mimo \u0161pi\u010dky<\/em>, ide\u00e1lne proti <strong>staging k\u00f3pii<\/strong> (nie proti \u017eivej produkcii). Postupne zvy\u0161ujte s\u00fabe\u017enos\u0165 a sledujte, kedy prudko st\u00fapne odozva alebo za\u010dn\u00fa chyby (HTTP 502\/503).<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Apache Bench - 1000 po\u017eiadaviek, 50 s\u00fabe\u017en\u00fdch<br>ab -n 1000 -c 50 https:\/\/staging.mojadomena.sk\/<br><br><br># wrk - 30 s test, 8 vl\u00e1kien, 100 spojen\u00ed (modern\u00e1 alternat\u00edva)<br>wrk -t8 -c100 -d30s https:\/\/staging.mojadomena.sk\/<br><br><br># k6 - realistick\u00fd scen\u00e1r s postupn\u00fdm rastom (ramp-up)<br># k6 run zatazovy-test.js<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pr\u00edklad k6 skriptu <code>zatazovy-test.js<\/code>, ktor\u00fd \u201evybud\u00ed\u201c syst\u00e9m rast\u00facou z\u00e1\u0165a\u017eou, aby ste na\u0161li bod zlomu:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import http from 'k6\/http';<br>import { check, sleep } from 'k6';<br><br><br>export const options = {<br>  stages: [<br>    { duration: '1m', target: 20 },   \/\/ rozbeh na 20 VUs<br>    { duration: '2m', target: 100 },  \/\/ rast na 100 VUs<br>    { duration: '2m', target: 200 },  \/\/ h\u013ead\u00e1me strop<br>    { duration: '1m', target: 0 },    \/\/ dobeh<br>  ],<br>  thresholds: {<br>    http_req_duration: ['p(95)&lt;800'], \/\/ 95 % odpoved\u00ed pod 800 ms<br>    http_req_failed: ['rate&lt;0.01'],   \/\/ menej ako 1 % ch\u00fdb<br>  },<br>};<br><br><br>export default function () {<br>  const res = http.get('https:\/\/staging.mojadomena.sk\/');<br>  check(res, { 'status 200': (r) =&gt; r.status === 200 });<br>  sleep(1);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP:<\/strong> Ak testujete st\u00e1le rovnak\u00fa URL, m\u00f4\u017eete mera\u0165 iba cache (Nginx\/CDN\/str\u00e1nkov\u00fd cache plugin), ktor\u00e1 PHP takmer neza\u0165a\u017e\u00ed. Server potom v re\u00e1lnej prev\u00e1dzke na <strong>neke\u0161ovan\u00e9 po\u017eiadavky<\/strong> spadne. Do testu preto zahr\u0148te aj n\u00e1hodn\u00e9\/neke\u0161ovan\u00e9 URL (napr. s parametrom ?nocache=${__ITER}), prihl\u00e1sen\u00e9 rel\u00e1cie a POST po\u017eiadavky, aby ste videli skuto\u010dn\u00e9 za\u0165a\u017eenie PHP a datab\u00e1zy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Po\u010das testu sledujte na cie\u013eovom serveri metriky &#8211; v druhom termin\u00e1li:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">htop                 # CPU jadr\u00e1, RAM, swap, load average<br>free -h              # vyu\u017eitie a swapovanie pam\u00e4te<br>iostat -x 2          # %util diskov (I\/O bottleneck)<br>watch -n1 'ss -s'    # po\u010det spojen\u00ed<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00fdsledkom je <strong>strop<\/strong>: napr. \u201edo ~80 s\u00fabe\u017en\u00fdch je odozva do 300 ms, nad ~150 prudko rastie a objavuj\u00fa sa 503\u201c. Zap\u00ed\u0161te si, ktor\u00fd zdroj sa vy\u010derpal ako prv\u00fd (CPU na 100 %, RAM\/swap,<code> pm.max_children<\/code>, disk %util). To ur\u010d\u00ed, ktor\u00fd parameter navy\u0161ova\u0165.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.3 Krok C &#8211; prepo\u010det na X\u2011n\u00e1sobok s rezervou<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz preve\u010fte nameran\u00e9 hodnoty na cie\u013eov\u00fa konfigur\u00e1ciu. V\u017edy po\u010d\u00edtajte s <strong>rezervou 20-30 %<\/strong> &#8211; server nem\u00e1 dlhodobo be\u017ea\u0165 na 100 % CPU ani plnej RAM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>RAM &#8211; zvy\u010dajne limituj\u00faci zdroj<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RAM sa del\u00ed medzi PHP\u2011FPM, datab\u00e1zu a opera\u010dn\u00fd syst\u00e9m. Postup:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># 1) Pam\u00e4\u0165 pre PHP-FPM RAM_PHP = cie\u013eov\u00e1 s\u00fabe\u017enos\u0165 workerov \u00d7 priemern\u00e1 pam\u00e4\u0165 1 procesu (priemer procesu zmeriate na VPS pr\u00edkazom ni\u017e\u0161ie; typicky 30-120 MB) # 2) Pam\u00e4\u0165 pre datab\u00e1zu (InnoDB buffer pool \u2248 working set, max ~ve\u013ekos\u0165 DB) RAM_DB = innodb_buffer_pool_size + ~20-30 % r\u00e9\u017eia DB servera # 3) Opera\u010dn\u00fd syst\u00e9m a d\u00e9moni RAM_OS = 1-2 GB # 4) Spolu + rezerva RAM_VPS = (RAM_PHP + RAM_DB + RAM_OS) \u00d7 1,25 # 25 % rezerva<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Priemern\u00fa pam\u00e4\u0165 jedn\u00e9ho PHP procesu zmeriate priamo na be\u017eiacom serveri:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Priemern\u00e1 RSS pam\u00e4\u0165 PHP-FPM procesov (\u010d\u00edslo verzie prisp\u00f4sobte)<br>ps --no-headers -o \"rss,cmd\" -C php-fpm8.6 \\<br>  | awk '{ sum+=$1 } END { printf (\"%d MB\\n\", sum\/NR\/1024) }'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>vCPU<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ak bol pri strope <strong>CPU\u2011bound<\/strong> (jadr\u00e1 na 100 %), \u0161k\u00e1luje po\u010det jadier pribli\u017ene line\u00e1rne s cie\u013eov\u00fdm X\u2011n\u00e1sobkom (+ rezerva).<\/li>\n\n\n\n<li>V\u00e4\u010d\u0161ina PHP webov je v\u0161ak <strong>I\/O\u2011bound<\/strong> (procesy \u010dakaj\u00fa na DB, disk, sie\u0165) &#8211; potom rozhoduje po\u010det workerov a RAM, nie \u010dist\u00fd CPU. Napriek tomu dajte datab\u00e1ze aj PHP dos\u0165 jadier na paralelizmus.<\/li>\n\n\n\n<li>Praktick\u00fd \u0161tart: <strong>4 vCPU<\/strong> (odpor\u00fa\u010dan\u00e9 minimum WS). Pri e\u2011shopoch a vy\u0161\u0161ej s\u00fabe\u017enosti <strong>6-8 vCPU<\/strong>. Priemern\u00e9 VPS na infra\u0161trukt\u00fare Websupportu m\u00e1 okolo <strong>4 vCPU \/ 8 GB RAM<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Disk a IOPS<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ve\u013ekos\u0165 = <strong>s\u00fabory webu + datab\u00e1za + logy + z\u00e1lohy + rezerva<\/strong>. Dr\u017ete aspo\u0148 <strong>20-30 % vo\u013en\u00e9ho miesta<\/strong>.<\/li>\n\n\n\n<li>Websupport VPS be\u017eia na r\u00fdchlom SSD\/NVMe \u00falo\u017eisku, tak\u017ee IOPS zvy\u010dajne nie s\u00fa \u00fazkym miestom be\u017en\u00fdch PHP webov.<\/li>\n\n\n\n<li>Disk sa d\u00e1 <strong>dodato\u010dne nav\u00fd\u0161i\u0165<\/strong> (roz\u0161\u00edrenie volume). Zaplnen\u00fd disk je naj\u010dastej\u0161\u00ed d\u00f4vod, pre\u010do VPS spadne &#8211; preto ho monitorujte.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP:<\/strong> Predt\u00fdm, ne\u017e k\u00fapite 2\u00d7 v\u00e4\u010d\u0161\u00ed VPS, over\u00adte, \u010di probl\u00e9m nevyrie\u0161i <strong>ladenie a caching<\/strong>. Zapnut\u00fd OPcache, spr\u00e1vne pm.max_children, v\u00e4\u010d\u0161\u00ed InnoDB buffer pool, jeden ch\u00fdbaj\u00faci index alebo str\u00e1nkov\u00fd cache dok\u00e1\u017eu zdvihn\u00fa\u0165 priepustnos\u0165 <strong>n\u00e1sobne<\/strong> bez zmeny hardv\u00e9ru. Sizing a optimaliz\u00e1cia id\u00fa ruka v ruke &#8211; po vyladen\u00ed spravte z\u00e1\u0165a\u017eov\u00fd test znova a uvid\u00edte re\u00e1lnu kapacitu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.4 Kompletn\u00fd pr\u00edklad v\u00fdpo\u010dtu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Web m\u00e1 v \u0161pi\u010dke ~30 req\/s, priemern\u00fa odozvu PHP 0,2 s, datab\u00e1zu 2 GB a chceme zvl\u00e1dnu\u0165 <strong>5\u00d7 vy\u0161\u0161iu n\u00e1v\u0161tevnos\u0165<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Krok<\/strong><\/td><td><strong>V\u00fdpo\u010det<\/strong><\/td><td><strong>V\u00fdsledok<\/strong><\/td><\/tr><tr><td>S\u00fabe\u017enos\u0165 teraz<\/td><td>30 req\/s \u00d7 0,2 s<\/td><td>~6 workerov (priemer)<\/td><\/tr><tr><td>Cie\u013e 5\u00d7<\/td><td>6 \u00d7 5, +rezerva na \u0161pi\u010dku<\/td><td>~30-40 workerov<\/td><\/tr><tr><td>RAM pre PHP<\/td><td>35 workerov \u00d7 ~50 MB<\/td><td>~1,8 GB<\/td><\/tr><tr><td>RAM pre DB<\/td><td>buffer pool ~3 GB (DB 2 GB + rast) + r\u00e9\u017eia<\/td><td>~3,5 GB<\/td><\/tr><tr><td>RAM pre OS<\/td><td>\u2014<\/td><td>~1,5 GB<\/td><\/tr><tr><td><strong>RAM spolu + 25 %<\/strong><\/td><td>(1,8 + 3,5 + 1,5) \u00d7 1,25<\/td><td><strong>~8,5 GB \u2192 vol\u00edme 8-12 GB<\/strong><\/td><\/tr><tr><td>vCPU<\/td><td>web preva\u017ene I\/O\u2011bound, 5\u00d7 s\u00fabe\u017enos\u0165 + DB<\/td><td><strong>4-6 vCPU<\/strong><\/td><\/tr><tr><td>Disk<\/td><td>s\u00fabory + DB + logy + z\u00e1lohy + rezerva<\/td><td><strong>50-80 GB SSD<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00fdsledok: napr. VPS s <strong>6 vCPU \/ 12 GB RAM \/ 80 GB SSD<\/strong> s pohodlnou rezervou na 5\u00d7 rast. Keby ste chceli 10\u00d7 a viac, oplat\u00ed sa u\u017e uva\u017eova\u0165 o <strong>oddelen\u00ed datab\u00e1zy na samostatn\u00fd VPS<\/strong> a horizont\u00e1lnom \u0161k\u00e1lovan\u00ed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.5 Kedy rozdeli\u0165 z\u00e1\u0165a\u017e (horizont\u00e1lne \u0161k\u00e1lovanie)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pri produk\u010dn\u00fdch nasadeniach odpor\u00fa\u010dame <strong>umiestni\u0165 ka\u017ed\u00fa s\u00fa\u010das\u0165 aplik\u00e1cie na samostatn\u00fd server<\/strong> &#8211; typicky oddeli\u0165 aplik\u00e1ciu a datab\u00e1zu. Z\u00edskate lep\u0161iu izol\u00e1ciu a ka\u017ed\u00fd komponent \u0161k\u00e1lujete zvl\u00e1\u0161\u0165. Pri vy\u0161\u0161om X\u2011n\u00e1sobku zv\u00e1\u017ete:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Datab\u00e1zu na vlastn\u00fd VPS<\/strong> &#8211; uvo\u013en\u00ed RAM pre PHP a naopak; DB dostane cel\u00fd buffer pool.<\/li>\n\n\n\n<li><strong>Viac web serverov za Load Balancer<\/strong> vo <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/load-balancer-vo-vdc\/\">Virtu\u00e1lnom d\u00e1tovom centre (VDC)<\/a> &#8211; horizont\u00e1lne prid\u00e1vanie kapacity.<\/li>\n\n\n\n<li><strong>Redis\/Memcached<\/strong> pre session a object cache, aby web servery zdie\u013eali stav.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pre jednoduchos\u0165 ale v tomto n\u00e1vode staviame <strong>jeden VPS<\/strong> so v\u0161etk\u00fdmi slu\u017ebami; rozdelenie je logick\u00fdm \u010fal\u0161\u00edm krokom, ke\u010f naraz\u00edte na strop jedn\u00e9ho stroja.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Objednanie a z\u00e1kladn\u00e1 pr\u00edprava VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pri objedn\u00e1vke VPS zvol\u00edte opera\u010dn\u00fd syst\u00e9m. N\u00e1vod predpoklad\u00e1 <strong>\u010dist\u00fd Ubuntu Server 24.04 LTS<\/strong> (najnov\u0161ia LTS), aby sme pre\u0161li v\u0161etky kroky. Aplik\u00e1cie in\u0161talujeme priamo do syst\u00e9mu v konkr\u00e9tnych verzi\u00e1ch &#8211; <strong>nie do kontajnerov<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP:<\/strong> Websupport pri objedn\u00e1vke pon\u00faka aj 1\u2011klik obrazy s predin\u0161talovan\u00fdm <strong>LAMP<\/strong> (Apache) alebo <strong>LEMP<\/strong> (Nginx) stackom. U\u0161etria \u010das, no my vol\u00edme <strong>minimal Ubuntu<\/strong>, aby ste mali pln\u00fa kontrolu nad verziami a konfigur\u00e1ciou. Ak si zvol\u00edte predpripraven\u00fd obraz, \u010dasti in\u0161tal\u00e1cie presko\u010d\u00edte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Prv\u00e9 prihl\u00e1senie a bezpe\u010dn\u00e9 z\u00e1klady<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Po zriaden\u00ed VPS dostanete IP adresu (resp. hostname v tvare nazov.vps.wbsprt.com) a prihlasovacie \u00fadaje. Pripojte sa cez SSH:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ssh root@IP_ADRESA           # prv\u00e9 prihl\u00e1senie (alebo neprivilegovan\u00fd \u00fa\u010det)<br>passwd                       # zmena predvolen\u00e9ho hesla na siln\u00e9<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Odpor\u00fa\u010dame prejs\u0165 na prihlasovanie cez <strong>SSH k\u013e\u00fa\u010d<\/strong> a vytvori\u0165 neprivilegovan\u00e9ho pou\u017e\u00edvate\u013ea so <code>sudo<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># na svojom po\u010d\u00edta\u010di vygenerujte k\u013e\u00fa\u010d (ak e\u0161te nem\u00e1te)<br>ssh-keygen -t ed25519 -C \"vas@email.sk\"<br><br><br># na serveri vytvorte pou\u017e\u00edvate\u013ea a pridajte ho do sudo<br>adduser web<br>usermod -aG sudo web<br><br><br># skop\u00edrujte verejn\u00fd k\u013e\u00fa\u010d pou\u017e\u00edvate\u013eovi (z v\u00e1\u0161ho po\u010d\u00edta\u010da)<br>ssh-copy-id web@IP_ADRESA<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-alert\"><strong>TIP:<\/strong> Zabezpe\u010denie pr\u00edstupu bolo na hostingu vecou Websupportu. Na VPS je na v\u00e1s. Po overen\u00ed k\u013e\u00fa\u010da odpor\u00fa\u010dame v <code>\/etc\/ssh\/sshd_config<\/code> zak\u00e1za\u0165 prihl\u00e1senie heslom (<code>PasswordAuthentication no<\/code>) a priame prihl\u00e1senie roota (<code>PermitRootLogin prohibit-password<\/code>), potom <code>sudo systemctl restart ssh<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Aktualiz\u00e1cia syst\u00e9mu, \u010das a swap<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"># na\u010d\u00edtanie metad\u00e1t a aktualiz\u00e1cia bal\u00edkov<br>sudo apt update<br>apt list --upgradable<br>sudo apt upgrade -y<br># ak sa aktualizovalo jadro (kernel), re\u0161tartujte<br>sudo reboot<br><br># spr\u00e1vna \u010dasov\u00e1 z\u00f3na (d\u00f4le\u017eit\u00e9 pre logy a cron)<br>sudo timedatectl set-timezone Europe\/Bratislava<br>date<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Synchroniz\u00e1ciu \u010dasu zabezpe\u010duje systemd-timesyncd (NTP), na Ubuntu je akt\u00edvna. Ak m\u00e1 VPS menej RAM, vytvorte si poistn\u00fd <strong>swap<\/strong> (br\u00e1ni p\u00e1du procesov pri prudkej \u0161pi\u010dke &#8211; nesmie v\u0161ak sl\u00fa\u017ei\u0165 ako n\u00e1hrada RAM):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo fallocate -l 2G \/swapfile<br>sudo chmod 600 \/swapfile<br>sudo mkswap \/swapfile<br>sudo swapon \/swapfile<br>echo '\/swapfile none swap sw 0 0' | sudo tee -a \/etc\/fstab<br># datab\u00e1zov\u00fd server nech rad\u0161ej swapuje \u010do najmenej<br>echo 'vm.swappiness=10' | sudo tee \/etc\/sysctl.d\/99-swappiness.conf<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.3 Fireewall (UFW) a ochrana pred brute\u2011force<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo ufw allow OpenSSH\nsudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw enable\nsudo ufw status verbose<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Port <strong>3306<\/strong> (MariaDB) <strong>neotv\u00e1rajte<\/strong> &#8211; datab\u00e1za m\u00e1 po\u010d\u00fava\u0165 len na localhost. Nain\u0161talujte <strong>Fail2Ban<\/strong>, ktor\u00fd po opakovan\u00fdch ne\u00faspe\u0161n\u00fdch prihl\u00e1seniach automaticky blokuje IP \u00fato\u010dn\u00edka:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install fail2ban -y<br>sudo systemctl enable --now fail2ban<br>sudo fail2ban-client status sshd<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-alert\"><strong>TIP:<\/strong> Sie\u0165 Websupport VPS je na \u00farovni d\u00e1tacentra chr\u00e1nen\u00e1 proti z\u00e1kladn\u00fdm (volumetrick\u00fdm) DDoS \u00fatokom. To v\u00e1s v\u0161ak nezbavuje potreby chr\u00e1ni\u0165 <strong>aplika\u010dn\u00fa vrstvu<\/strong> (firewall, rate\u2011limit, Fail2Ban).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.4 Automatick\u00e9 bezpe\u010dnostn\u00e9 aktualiz\u00e1cie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ke\u010f\u017ee OS udr\u017eiavate vy, zapnite automatick\u00e9 in\u0161talovanie bezpe\u010dnostn\u00fdch z\u00e1plat:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install unattended-upgrades -y<br>sudo dpkg-reconfigure --priority=low unattended-upgrades<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP:<\/strong> <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/prve-kroky-s-linux-vps\/\">Prv\u00e9 kroky s Linux VPS (aktualiz\u00e1cie, \u010das, SSH, z\u00e1klad)<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. In\u0161tal\u00e1cia stacku v presn\u00fdch verzi\u00e1ch<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Postav\u00edme presne definovan\u00e9 prostredie: <strong>MariaDB<\/strong> ako datab\u00e1za, <strong>PHP\u2011FPM 8.5<\/strong> v konkr\u00e9tnej verzii z overen\u00e9ho PPA, <strong>Apache<\/strong> ako backend (kv\u00f4li <code>.htaccess)<\/code> a <strong>Nginx<\/strong> vpredu ako reverzn\u00e9 proxy. V\u0161etko nat\u00edvne v syst\u00e9me, nie v kontajneroch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cie\u013eov\u00e1 architekt\u00fara<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Tok po\u017eiadavky Internet \u2500\u2500\u25b6 Nginx :80\/:443 \u2500\u2500\u25b6 Apache :8080 \u2500\u2500\u25b6 PHP-FPM (socket) \u2500\u2500\u25b6 MariaDB (localhost) (TLS, statika, (.htaccess, (spracovanie (d\u00e1ta) rate-limit, cache) mod_rewrite) PHP skriptov)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pre\u010do takto: <strong>Nginx<\/strong> vpredu je extr\u00e9mne r\u00fdchly na statiku, TLS a obmedzovanie z\u00e1\u0165a\u017ee; <strong>Apache<\/strong> vzadu bez \u00faprav zvl\u00e1dne va\u0161e p\u00f4vodn\u00e9<code> .htaccess <\/code>pravidl\u00e1; <strong>PHP\u2011FPM<\/strong> je modern\u00fd a efekt\u00edvny sp\u00f4sob behu PHP (v\u00fdkonnej\u0161\u00ed a flexibilnej\u0161\u00ed ne\u017e star\u00fd <code>mod_php<\/code>). Ak <code>.htaccess<\/code> nepou\u017e\u00edvate, Apache m\u00f4\u017eete vynecha\u0165 a Nginx pripoji\u0165 priamo na PHP\u2011FPM (LEMP) &#8211; vtedy presko\u010dte \u010dasti s Apache.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Datab\u00e1zov\u00fd server &#8211; MariaDB<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install mariadb-server -y<br>mariadb --version               # overte verziu (napr. 10.11 LTS \/ 11.x)<br>sudo systemctl enable --now mariadb<br>sudo mysql_secure_installation  # nastav\u00ed root heslo, odstr\u00e1ni test DB a anon. \u00fa\u010dty<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">MariaDB \u0161tandardne po\u010d\u00fava len na <code>127.0.0.1:3306<\/code> &#8211; presne to chceme. Vytvorte datab\u00e1zu a samostatn\u00e9ho pou\u017e\u00edvate\u013ea pre aplik\u00e1ciu (znakov\u00e1 sada <code>utf8mb4<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo mariadb<br><br>CREATE DATABASE nazov_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;<br>CREATE USER 'uzivatel_db'@'localhost' IDENTIFIED BY 'SilneHeslo123!';<br>GRANT ALL PRIVILEGES ON nazov_db.* TO 'uzivatel_db'@'localhost';<br>FLUSH PRIVILEGES;<br>EXIT;<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP:<\/strong> Pou\u017eite rovnak\u00e9 n\u00e1zvy DB a pou\u017e\u00edvate\u013ea ako na hostingu &#8211; u\u0161etr\u00edte \u00fapravy v konfigur\u00e1cii aplik\u00e1cie. Heslo si bezpe\u010dne ulo\u017ete (spr\u00e1vca hesiel), budete ho potrebova\u0165.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 PHP\u2011FPM v konkr\u00e9tnej verzii (PPA ondrej\/php)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu v z\u00e1kladn\u00fdch repozit\u00e1roch pon\u00faka len jednu verziu PHP. Pre konkr\u00e9tnu verziu a mo\u017enos\u0165 s\u00fabe\u017ene dr\u017ea\u0165 viac verzi\u00ed pou\u017eite overen\u00fd repozit\u00e1r <strong>ondrej\/php<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install software-properties-common -y<br>sudo add-apt-repository ppa:ondrej\/php -y<br>sudo apt update<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nain\u0161talujte PHP\u2011FPM a roz\u0161\u00edrenia, ktor\u00e9 ste si vyp\u00edsali z info.php na za\u010diatku tohoto n\u00e1vodu.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install -y \\<br>  php8.5-fpm php8.5-cli php8.5-mysql php8.5-xml php8.5-mbstring \\<br>  php8.5-curl php8.5-gd php8.5-intl php8.5-zip php8.5-bcmath php8.5-opcache<br><br>php8.5 -v<br>sudo systemctl enable --now php8.5-fpm<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zos\u00fala\u010fte k\u013e\u00fa\u010dov\u00e9 hodnoty <code>php.ini<\/code> s p\u00f4vodn\u00fdm hostingom (s\u00fabor <code>\/etc\/php\/8.5\/fpm\/php.ini<\/code>):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">memory_limit = 256M<br>upload_max_filesize = 64M<br>post_max_size = 64M<br>max_execution_time = 60<br>date.timezone = Europe\/Bratislava<br><br>; OPcache - z\u00e1sadn\u00e9 zr\u00fdchlenie behu PHP (ke\u0161uje skompilovan\u00fd bytecode)<br>opcache.enable = 1<br>opcache.memory_consumption = 256<br>opcache.interned_strings_buffer = 16<br>opcache.max_accelerated_files = 20000<br>opcache.validate_timestamps = 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Re\u0161tartnite php-fpm:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl restart php8.5-fpm<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">TIP: OPcache eliminuje opakovan\u00fa kompil\u00e1ciu PHP skriptov &#8211; v testoch zni\u017euje \u010das spracovania aj o desiatky percent. Na produkcii ho majte <strong>v\u017edy zapnut\u00fd<\/strong> a s dostato\u010dnou pam\u00e4\u0165ou. JIT naopak vo webov\u00fdch aplik\u00e1ci\u00e1ch zvy\u010dajne neprin\u00e1\u0161a zisk a prid\u00e1va pam\u00e4\u0165ov\u00fa r\u00e9\u017eiu &#8211; ponechajte ho vypnut\u00fd, ak nem\u00e1te konkr\u00e9tny CPU\u2011n\u00e1ro\u010dn\u00fd d\u00f4vod.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 Apache ako backend + PHP\u2011FPM,<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Apache nain\u0161talujeme tak, aby po\u010d\u00faval na internom porte <strong>8080<\/strong> (Nginx bude vpredu na 80\/443) a PHP posielal do PHP\u2011FPM cez FastCGI:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install apache2 -y<br># moduly pre PHP-FPM cez FastCGI a pre .htaccess<br>sudo a2enmod proxy_fcgi setenvif rewrite headers<br>sudo a2enconf php8.5-fpm<br># Apache nech po\u010d\u00fava len lok\u00e1lne na 8080 (Nginx je vpredu)<br>sudo sed -i 's\/^Listen 80$\/Listen 127.0.0.1:8080\/' \/etc\/apache2\/ports.conf<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vytvorte VirtualHost pre dom\u00e9nu (kore\u0148 webu <code>\/var\/www\/<a href=\"http:\/\/mojadomena.sk\">mojadomena.sk<\/a><\/code>) v s\u00fabore <code>\/etc\/apache2\/sites-available\/mojadomena.sk.conf<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;VirtualHost 127.0.0.1:8080&gt;<br>    ServerName mojadomena.sk<br>    ServerAlias www.mojadomena.sk<br>    DocumentRoot \/var\/www\/mojadomena.sk<br><br>    &lt;Directory \/var\/www\/mojadomena.sk&gt;<br>        AllowOverride All          # aby fungovali va\u0161e .htaccess pravidl\u00e1<br>        Require all granted<br>    &lt;\/Directory&gt;<br><br>    # zachovaj re\u00e1lnu IP n\u00e1v\u0161tevn\u00edka predan\u00fa Nginxom<br>    RemoteIPHeader X-Forwarded-For<br><br>    ErrorLog  ${APACHE_LOG_DIR}\/mojadomena_error.log<br>    CustomLog ${APACHE_LOG_DIR}\/mojadomena_access.log combined<br>&lt;\/VirtualHost&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e1sledne spustite:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo a2enmod remoteip<br>sudo a2ensite mojadomena.sk.conf<br>sudo a2dissite 000-default.conf<br>sudo mkdir -p \/var\/www\/mojadomena.sk<br>sudo apache2ctl configtest &amp;&amp; sudo systemctl reload apache2<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4.4 Nginx ako reverzn\u00e9 proxy vpredu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nginx prevezme porty 80\/443, obsl\u00fa\u017ei statiku a TLS a dynamiku po\u0161le na Apache (8080). Nginx aj Apache tak be\u017eia na jednom serveri bez potreby druhej IP.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install nginx -y<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Upravte <code>\/etc\/nginx\/sites-available\/mojadomena.sk<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">server {<br>    listen 80;<br>    listen [::]:80;<br>    server_name mojadomena.sk www.mojadomena.sk;<br>    root \/var\/www\/mojadomena.sk;<br><br>    # obmedzenie tempa po\u017eiadaviek (z\u00e1kladn\u00e1 ochrana, vi\u010f z\u00f3na ni\u017e\u0161ie)<br>    limit_req zone=perip burst=20 nodelay;<br><br>    # statiku obsl\u00fa\u017ei priamo Nginx (r\u00fdchlej\u0161ie, od\u013eah\u010d\u00ed Apache\/PHP)<br>    location ~* \\.(?:css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2?|ttf|mp4)$ {<br>        expires 30d;<br>        access_log off;<br>        add_header Cache-Control \"public\";<br>        try_files $uri @backend;<br>    }<br><br>    location \/ {<br>        proxy_pass http:\/\/127.0.0.1:8080;<br>        proxy_set_header Host              $host;<br>        proxy_set_header X-Real-IP         $remote_addr;<br>        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>    }<br>    location @backend {<br>        proxy_pass http:\/\/127.0.0.1:8080;<br>        proxy_set_header Host $host;<br>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>    }<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Definujte rate\u2011limit z\u00f3nu v hlavnej konfigur\u00e1cii (v bloku <code>http { }<\/code>):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00fabor <code>\/etc\/nginx\/conf.d\/ratelimit.conf<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">limit_req_zone $binary_remote_addr zone=perip:10m rate=10r\/s;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e1sledne:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo ln -s \/etc\/nginx\/sites-available\/mojadomena.sk \/etc\/nginx\/sites-enabled\/<br>sudo rm -f \/etc\/nginx\/sites-enabled\/default<br>sudo nginx -t &amp;&amp; sudo systemctl reload nginx<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Otestujte beh PHP &#8211; do\u010dasne vytvorte info skript, na\u010d\u00edtajte v prehliada\u010di a hne\u010f zma\u017ete:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">echo '&lt;?php phpinfo();' | sudo tee \/var\/www\/mojadomena.sk\/info.php<br># otvorte http:\/\/IP_ADRESA\/info.php - SAPI mus\u00ed by\u0165 FPM\/FastCGI<br>sudo rm \/var\/www\/mojadomena.sk\/info.php   # ihne\u010f zmaza\u0165!<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP:<\/strong> <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/nginx-apache-na-jednom-ubuntu-18-04-lts-serveri\/\">Nginx ako reverzn\u00e9 proxy pred Apache na jednom Ubuntu serveri<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Pr\u00edstup k s\u00faborom (FTP\/SFTP) a spr\u00e1va datab\u00e1zy cez GUI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Na hostingu ste mali FTP \u00fa\u010dty a phpMyAdmin \u201ehotov\u00e9\u201c. Na VPS si pr\u00edstup priprav\u00edte sami &#8211; bezpe\u010dne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 SFTP namiesto FTP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017ed\u00fd VPS s be\u017eiacim SSH automaticky podporuje <strong>SFTP<\/strong> &#8211; \u0161ifrovan\u00fd prenos s\u00faborov cez rovnak\u00e9 prihlasovacie \u00fadaje. Nepotrebujete in\u0161talova\u0165 \u017eiadny FTP server. Vo FileZilla zadajte:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Pole<\/strong><\/td><td><strong>Hodnota<\/strong><\/td><\/tr><tr><td>Hostite\u013e<\/td><td>sftp:\/\/IP_ADRESA<\/td><\/tr><tr><td>Port<\/td><td>22<\/td><\/tr><tr><td>Pou\u017e\u00edvate\u013e \/ k\u013e\u00fa\u010d<\/td><td>v\u00e1\u0161 SSH \u00fa\u010det (web) a SSH k\u013e\u00fa\u010d<\/td><\/tr><tr><td>Cie\u013eov\u00fd prie\u010dinok<\/td><td>\/var\/www\/mojadomena.sk<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP:<\/strong> Ak potrebujete klasick\u00e9 FTP \u00fa\u010dty (napr. pre klienta s obmedzen\u00edm do jedn\u00e9ho prie\u010dinka), d\u00e1 sa doin\u0161talova\u0165 <strong>vsftpd<\/strong> alebo <strong>ProFTPD<\/strong>. Bezpe\u010dnej\u0161\u00ed a bez \u010fal\u0161ej konfigur\u00e1cie je v\u0161ak SFTP &#8211; uprednostnite ho, k\u00fdm nem\u00e1te konkr\u00e9tny d\u00f4vod pre FTP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 phpMyAdmin alebo Adminer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na spr\u00e1vu datab\u00e1zy cez webov\u00e9 rozhranie m\u00e1te dve praktick\u00e9 mo\u017enosti:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>phpMyAdmin<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Plnohodnotn\u00e9 rozhranie. In\u0161tal\u00e1cia: sudo apt install phpmyadmin. Je to \u010dast\u00fd ter\u010d \u00fatokov &#8211; <strong>v\u017edy zabezpe\u010dte<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Adminer<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jedin\u00fd PHP s\u00fabor, \u013eahk\u00e9 nasadenie a men\u0161\u00ed \u00fato\u010dn\u00fd povrch. Sta\u010d\u00ed ho stiahnu\u0165 do prie\u010dinka mimo hlavn\u00e9ho webu a otvori\u0165 v prehliada\u010di.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Adminer do samostatn\u00e9ho, chr\u00e1nen\u00e9ho prie\u010dinka<br>sudo mkdir -p \/var\/www\/dbadmin<br>sudo curl -L https:\/\/www.adminer.org\/latest.php -o \/var\/www\/dbadmin\/index.php<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-alert\"><strong>TIP: <\/strong>phpMyAdmin\/Adminer nikdy nenech\u00e1vajte verejne pr\u00edstupn\u00e9 bez ochrany. Minim\u00e1lne: (1) siln\u00e9 DB hesl\u00e1, (2) <strong>HTTP autentifik\u00e1cia<\/strong> pred rozhran\u00edm (htpasswd + Nginx auth_basic), (3) obmedzenie na va\u0161e IP (allow\/deny), ide\u00e1lne (4) pr\u00edstup len cez <strong>SSH tunel<\/strong> na localhost. Vzdialen\u00e9 otvorenie portu 3306 na internet <strong>neodpor\u00fa\u010dame<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Prenos s\u00faborov webu a datab\u00e1zy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Presun obsahu m\u00e1 dve \u010dasti &#8211; s\u00fabory a datab\u00e1zu. K\u013e\u00fa\u010dov\u00e9 je zachova\u0165 \u0161trukt\u00faru, k\u00f3dovanie a pr\u00e1va.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 Prenos s\u00faborov<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zo star\u00e9ho hostingu stiahnite <strong>v\u0161etky s\u00fabory vr\u00e1tane skryt\u00fdch<\/strong> (napr.<code> .htaccess, .env<\/code>). Najefekt\u00edvnej\u0161ie je <code>rsync <\/code>(ak m\u00e1te SSH na oboch stran\u00e1ch), inak FTP stiahnutie a SFTP nahratie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Priamy prenos medzi servermi (spusten\u00e9 na VPS), ak je SSH Shell na starom hostingu:<br>rsync -avz --progress user@stary-hosting:\/cesta\/k\/webu\/ \/var\/www\/mojadomena.sk\/<br><br># Alternat\u00edva: arch\u00edv na starom serveri, prenos, rozbalenie na VPS<br># (na starom serveri) tar czf web.tar.gz -C \/cesta\/k\/webu .<br># (na VPS)            scp user@stary-hosting:~\/web.tar.gz .<br># (na VPS)            tar xzf web.tar.gz -C \/var\/www\/mojadomena.sk<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6.2 Export datab\u00e1zy zo star\u00e9ho hostingu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vo WebAdmine pou\u017eite <strong>Export datab\u00e1zy<\/strong> (vygeneruje .sql), alebo <code>mysqldump<\/code>. Pre InnoDB pou\u017eite <code>--single-transaction<\/code>, aby ste dostali konzistentn\u00fd dump bez zamykania tabuliek:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mysqldump -h mariadbXX.r.wbsprt.com -u uzivatel -p \\<br>  --single-transaction --quick --default-character-set=utf8mb4 \\<br>  --routines --triggers --events \\<br>  nazov_db &gt; zaloha.sql<br><br># r\u00fdchlej\u0161ie pri ve\u013ek\u00fdch DB - komprimovan\u00fd dump<br>mysqldump -h HOST -u USER -p --single-transaction nazov_db | gzip &gt; zaloha.sql.gz<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00dadaje o DB serveri hostingu (hostname, pou\u017e\u00edvate\u013e) n\u00e1jdete vo WebAdmine v sekcii datab\u00e1z.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.3 Import datab\u00e1zy na VPS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Preneste <code>.sql<\/code> na VPS (SFTP) a naimportujte do datab\u00e1zy vy\u0161\u0161ie vytvorenej:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># komprimovan\u00fd dump rozba\u013ete za behu\nzcat zaloha.sql.gz | mysql -u uzivatel_db -p nazov_db\n# alebo nekomprimovan\u00fd\nmysql -u uzivatel_db -p nazov_db &lt; zaloha.sql<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017en\u00e9 probl\u00e9my pri importe<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u201eMySQL server has gone away\u201c \/ ve\u013ek\u00fd dump:<\/strong> zv\u00fd\u0161te max_allowed_packet na oboch stran\u00e1ch. V \/etc\/mysql\/mariadb.conf.d\/50-server.cnf nastavte napr. max_allowed_packet = 256M a re\u0161tartujte MariaDB.<\/li>\n\n\n\n<li><strong>Zl\u00e9 k\u00f3dovanie (ot\u00e1zniky, \u201e\u00c5\u00be\u0102\u02c7\u201c):<\/strong> dump aj import robte s &#8211;default-character-set=utf8mb4. Ak p\u00f4vodn\u00e1 DB bola v latin1 ulo\u017een\u00e1 ako \u201edouble\u2011encoded\u201c UTF\u20118, rie\u0161te cielenou konverziou, nie len zmenou charsetu.<\/li>\n\n\n\n<li><strong>Nekompatibiln\u00e9 defin\u00edcie (star\u00e9 verzie):<\/strong> pri prechode z ve\u013emi star\u00fdch MySQL pou\u017eite pri exporte &#8211;compatible alebo postupn\u00fd upgrade.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.4 Pr\u00e1va a vlastn\u00edctvo s\u00faborov<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Webserver (Apache\/PHP\u2011FPM) be\u017e\u00ed ako pou\u017e\u00edvate\u013e <code>www-data<\/code>. Nastavte vlastn\u00edctvo tak, aby mal pr\u00edstup a z\u00e1pisov\u00e9 prie\u010dinky boli zapisovate\u013en\u00e9 &#8211; <strong>nikdy nepou\u017e\u00edvajte <\/strong><code>chmod 777<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo chown -R www-data:www-data \/var\/www\/mojadomena.sk<br># adres\u00e1re 755, s\u00fabory 644<br>sudo find \/var\/www\/mojadomena.sk -type d -exec chmod 755 {} \\;<br>sudo find \/var\/www\/mojadomena.sk -type f -exec chmod 644 {} \\;<br># aby ste vedeli s\u00fabory spravova\u0165 aj vy, pridajte sa do skupiny www-data<br>sudo usermod -aG www-data web<br><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">7. Konfigur\u00e1cia aplik\u00e1cie na novom serveri<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Po prenose d\u00e1t treba aplik\u00e1ciu \u201enapoji\u0165\u201c na nov\u00e9 prostredie &#8211; hlavne na lok\u00e1lnu datab\u00e1zu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.1 Datab\u00e1zov\u00e9 pr\u00edstupy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na hostingu bola datab\u00e1za na vzdialenom serveri (napr. <code>mariadbXX.r.wbsprt.com<\/code>). Teraz be\u017e\u00ed <strong>lok\u00e1lne<\/strong>, tak\u017ee host bude <code>localhost <\/code>(resp. <code>127.0.0.1<\/code>). Upravte konfigura\u010dn\u00fd s\u00fabor aplik\u00e1cie:<br><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Syst\u00e9m<\/strong><\/td><td><strong>S\u00fabor<\/strong><\/td><td><strong>K\u013e\u00fa\u010d<\/strong><\/td><\/tr><tr><td>WordPress<\/td><td>wp-config.php<\/td><td>DB_HOST, DB_NAME, DB_USER, DB_PASSWORD<\/td><\/tr><tr><td>Joomla<\/td><td>configuration.php<\/td><td>$host, $db, $user, $password<\/td><\/tr><tr><td>Laravel\/Symfony<\/td><td>.env<\/td><td>DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD<\/td><\/tr><tr><td>PrestaShop<\/td><td>app\/config\/parameters.php<\/td><td>database_host, database_name\u2026<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">wp-config.php (pr\u00edklad):<br>define( 'DB_HOST', 'localhost' );      \/\/ predt\u00fdm mariadbXX.r.wbsprt.com<br>define( 'DB_NAME', 'nazov_db' );<br>define( 'DB_USER', 'uzivatel_db' );<br>define( 'DB_PASSWORD', 'SilneHeslo123!' );<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7.2 URL a cesty<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dom\u00e9na sa nemen\u00ed<\/strong> \u2192 aplik\u00e1cia pou\u017e\u00edva rovnak\u00e9 URL, netreba z\u00e1sah (testovanie cez <code>hosts<\/code>, vi\u010f sekcia 9).<\/li>\n\n\n\n<li><strong>Absol\u00fatne cesty v konfigu<\/strong> (napr. <code>\/data\/...\/web\/uploads<\/code>) prep\u00ed\u0161te na nov\u00e9 (<code>\/var\/www\/mojadomena.sk\/uploads<\/code>). V\u00e4\u010d\u0161ina modern\u00fdch aplik\u00e1ci\u00ed pou\u017e\u00edva relat\u00edvne cesty \/ <code>__DIR__<\/code>, tak\u017ee z\u00e1sah \u010dasto netreba.<\/li>\n\n\n\n<li><strong>WordPress:<\/strong> URL s\u00fa v datab\u00e1ze &#8211; neme\u0148te ich ru\u010dne, na test pou\u017eite <code>hosts<\/code>. Pr\u00edpadn\u00fa zmenu dom\u00e9ny rie\u0161te cez WP\u2011CLI <code>search-replace<\/code> (serializovan\u00e9 d\u00e1ta).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7.3 Odosielanie e\u2011mailov<\/h3>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP: <\/strong>Na hostingu fungovala funkcia mail() a doru\u010dite\u013enos\u0165 rie\u0161il Websupport. Na \u010distom VPS <strong>\u017eiadny mail server nie je<\/strong>. Najspo\u013eahlivej\u0161ie je posiela\u0165 cez <strong>extern\u00fa SMTP slu\u017ebu<\/strong> (napr. transak\u010dn\u00fd SMTP \u00fa\u010det) priamo z aplik\u00e1cie. Pre doru\u010dite\u013enos\u0165 z vlastnej dom\u00e9ny nastavte DNS z\u00e1znamy <strong>SPF, DKIM a DMARC<\/strong>, inak spr\u00e1vy skon\u010dia v spame. Lok\u00e1lny Postfix v \u201esend\u2011only\u201c re\u017eime je mo\u017en\u00fd, ale bez korektn\u00fdch DNS z\u00e1znamov nespo\u013eahliv\u00fd.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7.4 Debug a chybov\u00e9 logy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Po\u010das o\u017eivovania do\u010dasne zapnite chyby a sledujte logy &#8211; naj\u010dastej\u0161ie probl\u00e9my s\u00fa ch\u00fdbaj\u00face PHP roz\u0161\u00edrenie, zl\u00e1 cesta k uploadu, zle vyplnen\u00e9 DB \u00fadaje \u010di pr\u00e1va na z\u00e1pis:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo tail -f \/var\/log\/apache2\/mojadomena_error.log<br>sudo tail -f \/var\/log\/nginx\/error.log<br>sudo tail -f \/var\/log\/php8.5-fpm.log<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">V <code>php.ini<\/code> (len do\u010dasne, na produkcii vypn\u00fa\u0165): <code>display_errors = On, error_reporting = E_ALL<\/code>. Cron \u00falohy z hostingu nastavte cez <code>crontab -e<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8. Nasadenie HTTPS certifik\u00e1tu (Let&#8217;s Encrypt)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na hostingu ste mali Let&#8217;s Encrypt certifik\u00e1t automaticky. Na VPS si ho nastav\u00edte pomocou <strong>Certbota<\/strong>. Ke\u010f\u017ee vpredu be\u017e\u00ed Nginx, pou\u017eijeme Nginx plugin.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-alert\"><strong>TIP: <\/strong>Certifik\u00e1t aj jeho automatick\u00fa obnovu za v\u00e1s doteraz rie\u0161il hosting. Na VPS ho vyd\u00e1te, nasad\u00edte a obnovu over\u00edte vy (Certbot to v\u0161ak zautomatizuje).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8.1 Podmienka: dom\u00e9na mus\u00ed smerova\u0165 na VPS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s Encrypt overuje vlastn\u00edctvo dom\u00e9ny cez HTTP v\u00fdzvu na porte 80. Dom\u00e9na preto mus\u00ed smerova\u0165 na VPS &#8211; bu\u010f u\u017e prepnut\u00fdm DNS A z\u00e1znamom, alebo <strong>do\u010dasne cez <\/strong><code>hosts<\/code>. Nginx mus\u00ed obsluhova\u0165 dom\u00e9nu na porte 80.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8.2 In\u0161tal\u00e1cia a vydanie certifik\u00e1tu<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install certbot python3-certbot-nginx -y<br>sudo certbot --nginx -d mojadomena.sk -d www.mojadomena.sk<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Certbot automaticky: over\u00ed dom\u00e9nu (cez <code>\/.well-known\/acme-challenge\/<\/code>), vystav\u00ed certifik\u00e1t, uprav\u00ed konfigur\u00e1ciu Nginx a op\u00fdta sa na <strong>presmerovanie HTTP \u2192 HTTPS<\/strong> &#8211; zvo\u013ete \u00e1no (mo\u017enos\u0165 \u201eRedirect\u201c), nech s\u00fa n\u00e1v\u0161tevn\u00edci v\u017edy na HTTPS. Certifik\u00e1ty sa ulo\u017eia do <code>\/etc\/letsencrypt\/live\/mojadomena.sk\/<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Apache je za Nginxom<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">TLS ukon\u010duje <strong>Nginx<\/strong>; Apache vzadu ost\u00e1va na HTTP (127.0.0.1:8080). Aby aplik\u00e1cia vedela, \u017ee po\u017eiadavka pri\u0161la cez HTTPS, Nginx posiela hlavi\u010dku <code>X-Forwarded-Proto<\/code> (nastaven\u00e9 v 4.4). V aplik\u00e1cii pr\u00edpadne nastavte, aby tejto hlavi\u010dke d\u00f4verovala (trusted proxy).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8.3 Automatick\u00e1 obnova<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Certifik\u00e1ty platia 90 dn\u00ed; Certbot prid\u00e1 \u010dasov\u00fa \u00falohu, ktor\u00e1 ich obnov\u00ed automaticky. Overte \u201enane\u010disto\u201c:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo certbot renew --dry-run<br>systemctl list-timers | grep certbot<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8.4 Spr\u00edsnenie TLS a HSTS (volite\u013en\u00e9, odpor\u00fa\u010dan\u00e9)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Do server bloku (HTTPS) v Nginx pridajte hlavi\u010dku HSTS a modern\u00e9 TLS nastavenia:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains\" always;<br>ssl_protocols TLSv1.2 TLSv1.3;<br>ssl_prefer_server_ciphers off;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kvalitu nasadenia si overte na <strong>SSL Labs<\/strong> <code>(ssllabs.com\/ssltest) <\/code>alebo otvoren\u00edm <code>https:\/\/mojadomena.sk\/ <\/code>a kontrolou z\u00e1mku v prehliada\u010di.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Fin\u00e1lne testovanie a prepnutie DNS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Web na VPS otestujte <strong>e\u0161te pred<\/strong> zmenou DNS. Chyby sa ladia ove\u013ea pokojnej\u0161ie, ke\u010f ich nevidia n\u00e1v\u0161tevn\u00edci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.1 Testovanie cez s\u00fabor hosts<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na svojom po\u010d\u00edta\u010di do\u010dasne nasmerujte dom\u00e9nu na IP VPS pridan\u00edm riadka do <code>hosts <\/code>(<code>C:\\Windows\\System32\\drivers\\etc\\hosts<\/code> na Windows, <code>\/etc\/hosts<\/code> na Linux\/macOS):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00fabor <code>hosts<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">123.45.67.89 \u00a0 mojadomena.sk www.mojadomena.sk<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9.2 Kontroln\u00fd zoznam pred prepnut\u00edm<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Logy (Nginx, Apache, PHP\u2011FPM, aplik\u00e1cia) nehl\u00e1sia chyby.<\/li>\n\n\n\n<li>Funguje upload s\u00faborov, odoslanie formul\u00e1ra\/e\u2011mailu, prihl\u00e1senie, k\u013e\u00fa\u010dov\u00e9 funkcie.<\/li>\n\n\n\n<li>HTTPS be\u017e\u00ed bez varovan\u00ed, presmerovanie z HTTP funguje.<\/li>\n\n\n\n<li>Str\u00e1nky sa generuj\u00fa svi\u017ene.<\/li>\n\n\n\n<li>Z\u00e1lohovanie a monitoring s\u00fa pripraven\u00e9.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP: 1-2 dni pred<\/strong> migr\u00e1ciou zn\u00ed\u017ete TTL DNS A z\u00e1znamu (napr. na 300 s). Prepnutie sa potom prejav\u00ed r\u00fdchlo a m\u00e1te mo\u017enos\u0165 sa v pr\u00edpade probl\u00e9mu r\u00fdchlo vr\u00e1ti\u0165. Po \u00faspe\u0161nom prepnut\u00ed TTL zase zdvihnite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.3 Fin\u00e1lna synchroniz\u00e1cia d\u00e1t<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ak od exportu DB pribudli na starom webe nov\u00e9 d\u00e1ta (pr\u00edspevky, objedn\u00e1vky), spravte <strong>tesne pred prepnut\u00edm<\/strong> nov\u00fd export a import, aby ste nepri\u0161li o \u010derstv\u00fd obsah. Na starom webe ide\u00e1lne po tomto momente \u201ezmrazte\u201c z\u00e1pisy (\u00fadr\u017ebov\u00fd re\u017eim).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.4 Prepnutie DNS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">V DNS spr\u00e1ve dom\u00e9ny (u Websupportu vo <strong>WebAdmin \u2192 Dom\u00e9ny \u2192 DNS z\u00e1znamy<\/strong>) upravte <strong>A z\u00e1znam<\/strong> (pr\u00edpadne <strong>AAAA<\/strong> pre IPv6) na IP adresu VPS a ulo\u017ete. Propag\u00e1cia zvy\u010dajne trv\u00e1 min\u00faty a\u017e (v\u00fdnimo\u010dne) hodiny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Po\u010das propag\u00e1cie<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u010cas\u0165 n\u00e1v\u0161tevn\u00edkov e\u0161te m\u00f4\u017ee trafi\u0165 star\u00fd server &#8211; <strong>nechajte star\u00fd hosting 1-2 dni akt\u00edvny<\/strong> ako poistku.<\/li>\n\n\n\n<li>Overte \u0161\u00edrenie cez whatsmydns.net a na\u010d\u00edtanie na viacer\u00fdch sie\u0165ach (mobil, in\u00fd ISP).<\/li>\n\n\n\n<li>Skontrolujte, \u010di sa v\u0161etky prvky (obr\u00e1zky, skripty) na\u010d\u00edtavaj\u00fa cez spr\u00e1vne URL a ni\u010d neodkazuje na star\u00fd server.<\/li>\n\n\n\n<li>A\u017e ke\u010f v logoch VPS vid\u00edte v\u0161etku prev\u00e1dzku a v\u0161etko funguje, m\u00f4\u017eete star\u00fd hosting deaktivova\u0165.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">10. Optimaliz\u00e1cia v\u00fdkonu na VPS (PHP + datab\u00e1za)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najv\u00e4\u010d\u0161ia v\u00fdhoda VPS: konfigur\u00e1ciu vylad\u00edte <strong>na mieru<\/strong> va\u0161ej aplik\u00e1cii. Predvolen\u00e9 hodnoty s\u00fa konzervat\u00edvne a nevyu\u017e\u00edvaj\u00fa v\u00fdkon, ktor\u00fd m\u00e1te k dispoz\u00edcii. Cie\u013eom je <strong>vyu\u017ei\u0165 dostupn\u00fa RAM efekt\u00edvne, ale nikdy ju nepresiahnu\u0165<\/strong> &#8211; inak server za\u010dne swapova\u0165 a dramaticky spomal\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP: <\/strong>Optimaliz\u00e1cia je iterat\u00edvny proces. Zme\u0148te <strong>jednu vec<\/strong>, spustite z\u00e1\u0165a\u017eov\u00fd test z sekcie 2, zmerajte dopad, a\u017e potom pokra\u010dujte. Nepreberajte slepo hodnoty z internetu &#8211; ria\u010fte sa t\u00fdm, \u010do ukazuj\u00fa <strong>re\u00e1lne metriky v\u00e1\u0161ho servera<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10.1 Rozdelenie pam\u00e4te medzi PHP a datab\u00e1zu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ke\u010f na jednom VPS be\u017e\u00ed web aj datab\u00e1za, RAM si musia rozdeli\u0165. Hrub\u00e9 rozdelenie pre orient\u00e1ciu (upravte pod\u013ea toho, \u010di je aplik\u00e1cia viac PHP\u2011n\u00e1ro\u010dn\u00e1 alebo DB\u2011n\u00e1ro\u010dn\u00e1):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Pr\u00edklad rozpo\u010dtu RAM na VPS s 8 GB Opera\u010dn\u00fd syst\u00e9m a d\u00e9moni ....... ~1,5 GB InnoDB buffer pool (MariaDB) ... ~3,0 GB # nech pokryje working set PHP-FPM (workery) .............. ~2,5 GB Rezerva \/ cache OS ............. ~1,0 GB<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10.2 Ladenie PHP\u2011FPM (po\u010det procesov)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">K\u013e\u00fa\u010dov\u00fd parameter je <code>pm.max_children<\/code> v <code>\/etc\/php\/8.5\/fpm\/pool.d\/www.conf<\/code> &#8211; maxim\u00e1lny po\u010det paraleln\u00fdch PHP procesov. Prive\u013ea procesov zapln\u00ed RAM (swap \u2192 OOM killer), prim\u00e1lo zbyto\u010dne obmedz\u00ed s\u00fabe\u017enos\u0165.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ako vypo\u010d\u00edta\u0165 <\/strong><code>pm.max_children<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pm.max_children = RAM vyhraden\u00e1 pre PHP \u00f7 priemern\u00e1 pam\u00e4\u0165 1 procesu # Pr\u00edklad: 2,5 GB pre PHP, 1 proces ~60 MB 2560 MB \u00f7 60 MB \u2248 42 \u2192 s rezervou ~20 % nastav\u00edme pm.max_children = 34<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Priemern\u00fa pam\u00e4\u0165 procesu ste zmerali v druhej sekcii tohto n\u00e1vodu. Odpor\u00fa\u010dan\u00e1 konfigur\u00e1cia pool\u2011u:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00fabor<code> \/etc\/php\/8.5\/fpm\/pool.d\/<a href=\"http:\/\/www.conf\">www.conf<\/a><\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">pm = dynamic<br>pm.max_children = 34<br>pm.start_servers = 8<br>pm.min_spare_servers = 6<br>pm.max_spare_servers = 12<br>pm.max_requests = 500          ; poistka proti memory leakom - proces sa po 500 req obnov\u00ed<br><br>; stavov\u00e1 str\u00e1nka pre monitoring PHP-FPM<br>pm.status_path = \/fpm-status<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>pm = dynamic<\/code> &#8211; udr\u017eiava pool pripraven\u00fdch procesov (bezpe\u010dn\u00e1 vo\u013eba pre premenliv\u00fa z\u00e1\u0165a\u017e). ondemand \u0161etr\u00ed RAM pri ve\u013emi n\u00edzkej n\u00e1v\u0161tevnosti.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>pm.max_requests<\/code> pravidelne recykluje procesy &#8211; br\u00e1ni postupn\u00e9mu n\u00e1rastu pam\u00e4te kv\u00f4li \u00fanikom.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl restart php8.5-fpm<\/pre>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP: <\/strong>Ak sa v logu PHP\u2011FPM objavuje hl\u00e1\u0161ka o dosiahnut\u00ed pm.max_children, vytv\u00e1ra sa fronta a odozva rastie &#8211; ak to RAM dovol\u00ed, hodnotu zv\u00fd\u0161te. Ak RAM nie je ani pri \u0161pi\u010dke vyu\u017eit\u00e1, m\u00f4\u017eete prida\u0165 procesy. Rozhodujte pod\u013ea merania, nie odhadu.<br>Zdroj: <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/ladenie-vykonu-php-s-php-fpm-pre-systemovych-administratorov\/\">Ladenie v\u00fdkonu PHP s PHP\u2011FPM<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10.3 Ladenie MariaDB<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najv\u00e4\u010d\u0161\u00ed dopad na v\u00fdkon m\u00e1 ve\u013ekos\u0165 <strong>InnoDB buffer poolu<\/strong> &#8211; RAM, ktor\u00fa DB pou\u017eije na cache d\u00e1t a indexov. \u010c\u00edm viac d\u00e1t sa zmest\u00ed do RAM, t\u00fdm menej sa \u010d\u00edta z disku. Konfigur\u00e1cia je v <code>\/etc\/mysql\/mariadb.conf.d\/50-server.cnf<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[mysqld]<br># Najd\u00f4le\u017eitej\u0161ie: nech pokryje akt\u00edvne d\u00e1ta + indexy (working set).<br># Ak DB be\u017e\u00ed samostatne, dajte 60-70 % RAM; ak zdie\u013ea server s PHP, menej.<br>innodb_buffer_pool_size = 3G<br><br><br># Redo log - v\u00e4\u010d\u0161\u00ed = menej flushov pri z\u00e1pisoch (MariaDB 10.11+)<br>innodb_log_file_size = 512M<br><br><br># Bezpe\u010dn\u00e9 vs. r\u00fdchle: 1 = pln\u00e1 ACID odolnos\u0165 (default), 2 = r\u00fdchlej\u0161ie z\u00e1pisy<br>innodb_flush_log_at_trx_commit = 1<br><br><br># Priamy z\u00e1pis na disk, obch\u00e1dza cache OS (vhodn\u00e9, ke\u010f m\u00e1 buffer pool RAM)<br>innodb_flush_method = O_DIRECT<br><br><br># Prisp\u00f4sobenie r\u00fdchlemu SSD\/NVMe \u00falo\u017eisku Websupportu<br>innodb_io_capacity = 2000<br>innodb_io_capacity_max = 4000<br><br><br># Log pomal\u00fdch dotazov - n\u00e1jde neindexovan\u00e9\/\u0165a\u017ek\u00e9 dotazy<br>slow_query_log = 1<br>slow_query_log_file = \/var\/log\/mysql\/slow.log<br>long_query_time = 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e1sledne:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl restart mariadb<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u010eal\u0161ie body:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Query cache vypnite<\/strong> (query_cache_type = 0). Pri z\u00e1pisovej z\u00e1\u0165a\u017ei sk\u00f4r \u0161kod\u00ed zamykan\u00edm; modern\u00e9 verzie ju u\u017e neodpor\u00fa\u010daj\u00fa.<\/li>\n\n\n\n<li><code>max_connections<\/code> dr\u017ete len tak vysoko, ko\u013eko re\u00e1lne treba (ka\u017ed\u00e9 spojenie stoj\u00ed pam\u00e4\u0165). Orienta\u010dne o nie\u010do viac ne\u017e <code>pm.max_children<\/code>.<\/li>\n\n\n\n<li>Po p\u00e1r d\u0148och analyzujte <code>slow.log <\/code>&#8211; opakovan\u00e9 pomal\u00e9 dotazy zvy\u010dajne vyrie\u0161i <strong>ch\u00fdbaj\u00faci index<\/strong>, nie v\u00e4\u010d\u0161\u00ed hardv\u00e9r.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP: <\/strong>Skript <strong>MySQLTuner<\/strong> (<code>sudo apt install mysqltuner<\/code>) po dni prev\u00e1dzky vyp\u00ed\u0161e odpor\u00fa\u010dania na z\u00e1klade re\u00e1lnej \u0161tatistiky (napr. \u010di je buffer pool pln\u00fd a \u010d\u00edta sa z disku, ko\u013eko do\u010dasn\u00fdch tabuliek pad\u00e1 na disk). Berte ho ako in\u0161pir\u00e1ciu, me\u0148te parametre postupne.<br>Zdroj: <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/ladenie-vykonu-mysql-mariadb-a-percona-servera-pre-systemovych-administratorov\/\">Ladenie v\u00fdkonu MySQL\/MariaDB\/Percona<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10.4 Caching na \u00farovni aplik\u00e1cie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OPcache<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">U\u017e je zapnut\u00fd. Uistite sa, \u017ee opcache.memory_consumption sta\u010d\u00ed na v\u0161etky skripty (skontrolujte cez OPcache status).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Redis \/ Memcached<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">sudo apt install redis-server php8.5-redis. Ide\u00e1lne na <strong>object cache<\/strong> a <strong>session<\/strong> &#8211; v\u00fdrazne od\u013eah\u010d\u00ed datab\u00e1zu (obzvl\u00e1\u0161\u0165 WordPress\/WooCommerce).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nginx microcache<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kr\u00e1tky (1-10 s) cache odpoved\u00ed pre neprihl\u00e1sen\u00fdch n\u00e1v\u0161tevn\u00edkov n\u00e1razovo zn\u00e1sob\u00ed priepustnos\u0165 pri \u0161pi\u010dk\u00e1ch a n\u00e1poroch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CDN<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare \/ BunnyCDN od\u013eah\u010dia statiku a absorbuj\u00fa \u010das\u0165 \u00fatokov. Bonus: skryj\u00fa p\u00f4vodn\u00fa IP servera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10.5 Priebe\u017en\u00e9 sledovanie a doladenie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pod re\u00e1lnou z\u00e1\u0165a\u017eou sledujte, \u010di niektor\u00fd zdroj nedoch\u00e1dza. N\u00e1stroje:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">htop                 # CPU, RAM, load average<br>free -h              # swap used m\u00e1 by\u0165 ~0<br>iostat -x 2          # %util disku (I\/O bottleneck)<br>vmstat 2             # si\/so st\u013apce = swapovanie (nesmie by\u0165 trval\u00e9)<\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Sympt\u00f3m<\/strong><\/td><td><strong>Pravdepodobn\u00e1 pr\u00ed\u010dina<\/strong><\/td><td><strong>Rie\u0161enie<\/strong><\/td><\/tr><tr><td>Doch\u00e1dza RAM \/ swapuje<\/td><td>prive\u013ea PHP procesov alebo ve\u013ek\u00fd buffer pool<\/td><td>zn\u00ed\u017ei\u0165 <code>pm.max_children\/buffer_pool<\/code>, alebo prida\u0165 RAM<\/td><\/tr><tr><td>CPU trvalo na 100 %<\/td><td>CPU\u2011n\u00e1ro\u010dn\u00fd k\u00f3d\/plugin, m\u00e1lo jadier<\/td><td>profilova\u0165 aplik\u00e1ciu, prida\u0165 vCPU<\/td><\/tr><tr><td>Disk %util vysok\u00e9<\/td><td>mal\u00fd buffer pool \u2192 ve\u013ea \u010d\u00edtan\u00ed z disku<\/td><td>zv\u00e4\u010d\u0161i\u0165 buffer pool, doplni\u0165 indexy<\/td><\/tr><tr><td>Odozva rastie, 503<\/td><td>dosiahnut\u00fd <code>pm.max_children<\/code><\/td><td>zv\u00fd\u0161i\u0165 (ak RAM dovol\u00ed), zapn\u00fa\u0165 cache<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Po vyladen\u00ed <strong>zopakujte z\u00e1\u0165a\u017eov\u00fd test<\/strong> &#8211; uvid\u00edte re\u00e1lnu nov\u00fa kapacitu a \u010di pre \u010fal\u0161\u00ed rast posta\u010d\u00ed ladenie, alebo bude treba upgrade (viac RAM\/jadier), pr\u00edpadne rozdelenie z\u00e1\u0165a\u017ee (DB na samostatn\u00fd VPS, viac web serverov za Load Balancer).<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP: <\/strong>V na\u0161ej b\u00e1ze znalost\u00ed n\u00e1jdete aj <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/htop-manual\/\">htop manu\u00e1l.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11.Prev\u00e1dzka nespravovavn\u00e9ho (unmanaged) VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Toto je jadro prechodu <strong>managed \u2192 unmanaged<\/strong>. Na zdie\u013eanom hostingu sa o opera\u010dn\u00fd syst\u00e9m, aktualiz\u00e1cie, z\u00e1lohy a bezpe\u010dnos\u0165 staral Websupport. Na vlastnom VPS je <strong>server v\u00e1\u0161<\/strong> &#8211; aj zodpovednos\u0165 za\u0148. Nasleduj\u00face oblasti nie s\u00fa jednorazov\u00e9, tvoria <strong>trval\u00fa rutinu prev\u00e1dzky<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u010co bolo predt\u00fdm samozrejm\u00e9 a teraz je na v\u00e1s<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bezpe\u010dnostn\u00e9 z\u00e1platy OS, aktualiz\u00e1cie PHP\/DB, z\u00e1lohovanie a jeho testovanie, monitoring dostupnosti, obrana proti \u00fatokom, sledovanie expir\u00e1ci\u00ed. Ni\u010d z toho sa nedeje automaticky \u201esamo\u201c &#8211; mus\u00edte to <strong>nastavi\u0165 a udr\u017eiava\u0165<\/strong>. Dobrou spr\u00e1vou je, \u017ee v\u00e4\u010d\u0161ina sa d\u00e1 zautomatizova\u0165 a Websupport pon\u00faka pomocn\u00e9 slu\u017eby (snapshoty, monitoring, platen\u00e1 spr\u00e1va servera).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11.1 Aktualiz\u00e1cie syst\u00e9mu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bezpe\u010dnostn\u00e9 aktualiz\u00e1cie rie\u0161te automaticky (nastaven cez <code>unattended-upgrades<\/code>). V\u00e4\u010d\u0161ie z\u00e1sahy robte ru\u010dne a s rozvahou:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt upgrade      # pravidelne (napr. t\u00fd\u017edenne)<br>sudo apt autoremove                       # upratanie star\u00fdch bal\u00edkov<br>cat \/var\/run\/reboot-required 2&gt;\/dev\/null  # treba re\u0161tart po update jadra?<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">11.2 Z\u00e1lohovanie (3\u20112\u20111)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zlat\u00e9 pravidlo: <strong>3 k\u00f3pie d\u00e1t, na 2 r\u00f4znych m\u00e9di\u00e1ch, 1 mimo servera<\/strong>. Z\u00e1loha, ktor\u00fa ste nikdy neobnovili, nie je z\u00e1loha.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Automatick\u00fd dump datab\u00e1zy<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00fabor <code>\/usr\/local\/bin\/db-backup.sh<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#!\/bin\/bash<br>STAMP=$(date +%F)<br>DEST=\/var\/backups\/db<br>mkdir -p \"$DEST\"<br>mysqldump --single-transaction --quick --routines --triggers \\<br>  mojadomena_db | gzip &gt; \"$DEST\/mojadomena_$STAMP.sql.gz\"<br># zma\u017e z\u00e1lohy star\u0161ie ako 14 dn\u00ed<br>find \"$DEST\" -name '*.sql.gz' -mtime +14 -delete<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e1sledne:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo chmod +x \/usr\/local\/bin\/db-backup.sh<br>sudo crontab -e<br># denne o 3:15:<br>15 3 * * * \/usr\/local\/bin\/db-backup.sh<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00fabory aplik\u00e1cie z\u00e1lohujte podobne (<code>tar <\/code>prie\u010dinka \/var\/www) a <strong>k\u00f3pie pren\u00e1\u0161ajte mimo servera<\/strong> (in\u00fd VPS, objektov\u00e9 \u00falo\u017eisko, lok\u00e1lny disk cez <code>rsync\/scp<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\"><strong>TIP: <\/strong>Websupport umo\u017e\u0148uje robi\u0165 <strong>snapshoty cel\u00e9ho virtu\u00e1lneho servera<\/strong> &#8211; r\u00fdchle obnovenie cel\u00e9ho stroja po zlom update. Snapshot je skvel\u00fd doplnok, ale <strong>nenahr\u00e1dza<\/strong> dump datab\u00e1zy mimo servera. Kombinujte oboje. Viac na <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/zalohovanie-virtualneho-servera\/\">Z\u00e1lohovanie virtu\u00e1lneho servera<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Otestujte obnovu<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aspo\u0148 raz sk\u00fa\u0161obne obnovte datab\u00e1zu aj s\u00fabory na testovacom serveri. A\u017e \u00faspe\u0161n\u00e1 obnova potvrd\u00ed, \u017ee z\u00e1lohy s\u00fa pou\u017eite\u013en\u00e9. Najhor\u0161\u00ed \u010das na zistenie, \u017ee z\u00e1loha je po\u0161koden\u00e1, je po\u010das re\u00e1lneho v\u00fdpadku.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11.3 Monitoring<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Na zdie\u013eanom hostingu dostupnos\u0165 str\u00e1\u017eil Websupport. Teraz mus\u00edte vy vedie\u0165 o probl\u00e9me <strong>sk\u00f4r ne\u017e n\u00e1v\u0161tevn\u00edci<\/strong>. Sledujte minim\u00e1lne: dostupnos\u0165 webu (HTTP), CPU, RAM, <strong>vo\u013en\u00e9 miesto na disku<\/strong> (pln\u00fd disk = p\u00e1d DB aj webu), beh slu\u017eieb (nginx, apache2, php8.5\u2011fpm, mariadb) a platnos\u0165 SSL certifik\u00e1tu.<br><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>N\u00e1stroj<\/strong><\/td><td><strong>Na \u010do<\/strong><\/td><\/tr><tr><td><strong>Websupport Monitoring<\/strong><\/td><td>Dostupnos\u0165 a z\u00e1kladn\u00e9 metriky priamo od poskytovate\u013ea, s notifik\u00e1ciami<\/td><\/tr><tr><td><strong>Netdata<\/strong><\/td><td>Detailn\u00fd real\u2011time dashboard servera, in\u0161tal\u00e1cia na p\u00e1r min\u00fat<\/td><\/tr><tr><td><strong>Zabbix \/ Grafana + Prometheus<\/strong><\/td><td>Robustn\u00fd monitoring a hist\u00f3ria metr\u00edk pre n\u00e1ro\u010dnej\u0161ie nasadenia<\/td><\/tr><tr><td><strong>UptimeRobot<\/strong><\/td><td>Extern\u00e9 sledovanie dostupnosti zvonku + alerty (e\u2011mail\/SMS)<br><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-success\"><strong>TIP:<\/strong> Viac o slu\u017ebe <a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/monitoring-prihlasenie-a-prehlad\/\">Websupport Monitoring<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11.4 Bezpe\u010dnos\u0165 a hardening<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Aktualizujte aplik\u00e1ciu<\/strong> (jadro CMS, pluginy, kni\u017enice cez composer update). Neaktualizovan\u00fd plugin je naj\u010dastej\u0161ia vstupn\u00e1 br\u00e1na \u00fatoku.<\/li>\n\n\n\n<li><strong>Firewall a Fail2Ban<\/strong> u\u017e be\u017eia. Zv\u00e1\u017ete pridanie Fail2Ban filtra na webov\u00e9 logy (opakovan\u00e9 401\/404, pokusy o login).<\/li>\n\n\n\n<li><strong>SSH len cez k\u013e\u00fa\u010d<\/strong>, root login zak\u00e1zan\u00fd, siln\u00e9 hesl\u00e1 do DB a administr\u00e1cie.<\/li>\n\n\n\n<li><strong>phpMyAdmin\/Adminer<\/strong> chr\u00e1nen\u00fd a neverejn\u00fd; port 3306 nikdy von.<\/li>\n\n\n\n<li>Pravidelne kontrolujte logy (\/var\/log\/auth.log, logy web servera) na neobvykl\u00fa aktivitu.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">11.5 Ochrana proti DDoS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Obrana funguje vo vrstv\u00e1ch:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Infra\u0161trukt\u00fara<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Websupport poskytuje ochranu proti objemov\u00fdm (L3\/L4) \u00fatokom na \u00farovni siete. To je z\u00e1klad, ktor\u00fd sami nezaist\u00edte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aplika\u010dn\u00e1 vrstva<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rate\u2011limiting v Nginxe (<code>limit_req<\/code>), <code>mod_evasive<\/code> pre Apache, ochrana prihlasovac\u00edch formul\u00e1rov.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CDN \/ proxy<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare a pod. absorbuj\u00fa \u00fatok pred serverom, filtruj\u00fa L7 a skryj\u00fa p\u00f4vodn\u00fa IP. \u00da\u010dinn\u00e1 prv\u00e1 l\u00ednia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11.6 Pravideln\u00e1 \u00fadr\u017eba a upratovanie<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rot\u00e1cia logov<\/strong> (<code>logrotate<\/code>) &#8211; aby logy nezaplnili disk. V\u00e4\u010d\u0161ina bal\u00edkov ju nastav\u00ed, ob\u010das skontrolujte.<\/li>\n\n\n\n<li><strong>\u010cistenie<\/strong> star\u00fdch cache, do\u010dasn\u00fdch s\u00faborov, neaktu\u00e1lnych z\u00e1loh.<\/li>\n\n\n\n<li><strong>Sledovanie expir\u00e1ci\u00ed<\/strong>: dom\u00e9na, SSL certifik\u00e1t (auto\u2011obnova be\u017e\u00ed, ale kontrolujte), platen\u00e9 API k\u013e\u00fa\u010de. Zap\u00ed\u0161te si term\u00edny.<\/li>\n\n\n\n<li><strong>Dokumentujte<\/strong> si konfigur\u00e1ciu a z\u00e1sahy &#8211; bud\u00face \u201eja\u201c (alebo kolega) po\u010fakuje.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nechcete to rie\u0161i\u0165 sami?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ak na spr\u00e1vu servera nem\u00e1te kapacity, Websupport pon\u00faka slu\u017ebu <a href=\"https:\/\/www.websupport.sk\/servery\/sprava\/\">Spr\u00e1vu servera<\/a> &#8211; prev\u00e1dzku, aktualiz\u00e1cie a doh\u013ead prevezmeme za v\u00e1s. Kompromis medzi plnou kontrolou unmanaged VPS a bezstarostnos\u0165ou mana\u017eovan\u00e9ho rie\u0161enia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Zhrnutie<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Presunuli sme aplik\u00e1ciu zo zdie\u013ean\u00e9ho hostingu na vlastn\u00fd VPS: zmerali sme re\u00e1lnu z\u00e1\u0165a\u017e a nadimenzovali server na X\u2011n\u00e1sobok, postavili identick\u00e9 (a nov\u0161ie) prostredie na \u010distom Ubuntu, preniesli d\u00e1ta, zabezpe\u010dili HTTPS, vyladili v\u00fdkon a prevzali prev\u00e1dzku vr\u00e1tane z\u00e1loh, monitoringu a bezpe\u010dnosti. M\u00e1te pln\u00fa kontrolu aj pln\u00fa zodpovednos\u0165 nad VPS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>U\u017eito\u010dn\u00e9 zdroje<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/zalohovanie-virtualneho-servera\/\">Z\u00e1lohovanie virtu\u00e1lneho servera<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/prve-kroky-s-linux-vps\/\">Prv\u00e9 kroky s Linux VPS<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/odporucane-minimalne-parametre-produkcneho-vps\/\">Odpor\u00fa\u010dan\u00e9 minim\u00e1lne parametre produk\u010dn\u00e9ho VPS<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/ubuntu-server-kompletny-prehlad-informacii-o-systeme-pre-administratora-po-prvom-prihlaseni\/\">Ubuntu Server \u2013 kompletn\u00fd preh\u013ead inform\u00e1ci\u00ed o syst\u00e9me<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/nginx-apache-na-jednom-ubuntu-18-04-lts-serveri\/\">Nginx a Apache na jednom Ubuntu serveri<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/sprava-sluzieb-na-virtualnom-serveri-s-ubuntu\/\">Spr\u00e1va slu\u017eieb na virtu\u00e1lnom serveri s Ubuntu<\/a><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.websupport.sk\/podpora\/kb\/ladenie-vykonu-php-s-php-fpm-pre-systemovych-administratorov\/\">Ladenie v\u00fdkonu MySQL \/ MariaDB \/ Percona<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server. Tento n\u00e1vod pokr\u00fdva inform\u00e1cie od zistenia verzi\u00ed (PHP, datab\u00e1za, webserver) cez spr\u00e1vne dimenzovanie a identick\u00e9 nasadenie prostredia a\u017e po prenos d\u00e1t, HTTPS certifik\u00e1t, ladenie v\u00fdkonu a prev\u00e1dzku nemana\u017eovan\u00e9ho servera. Cie\u013eov\u00e1 platforma: Ubuntu Server&#8230;<\/p>\n","protected":false},"author":57,"template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[52,53,33],"ht-kb-tag":[330,381,198],"class_list":["post-37361","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-vps","ht_kb_category-dedikovane-servery","ht_kb_category-servery","ht_kb_tag-linux","ht_kb_tag-server","ht_kb_tag-ubuntu"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS - Websupport centrum podpory<\/title>\n<meta name=\"description\" content=\"Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/\" \/>\n<meta property=\"og:locale\" content=\"sk_SK\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS - Websupport centrum podpory\" \/>\n<meta property=\"og:description\" content=\"Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/\" \/>\n<meta property=\"og:site_name\" content=\"Websupport centrum podpory\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-28T10:42:55+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Predpokladan\u00fd \u010das \u010d\u00edtania\" \/>\n\t<meta name=\"twitter:data1\" content=\"25 min\u00fat\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/kb\\\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\\\/\",\"url\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/kb\\\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\\\/\",\"name\":\"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS - Websupport centrum podpory\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/#website\"},\"datePublished\":\"2026-09-28T10:42:54+00:00\",\"dateModified\":\"2026-09-28T10:42:55+00:00\",\"description\":\"Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/kb\\\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\\\/#breadcrumb\"},\"inLanguage\":\"sk-SK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/kb\\\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/kb\\\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/#website\",\"url\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/\",\"name\":\"Websupport centrum podpory\",\"description\":\"Radi v\u00e1m pom\u00f4\u017eeme s va\u0161im probl\u00e9mom\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.websupport.sk\\\/podpora\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sk-SK\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS - Websupport centrum podpory","description":"Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/","og_locale":"sk_SK","og_type":"article","og_title":"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS - Websupport centrum podpory","og_description":"Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server.","og_url":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/","og_site_name":"Websupport centrum podpory","article_modified_time":"2026-09-28T10:42:55+00:00","twitter_card":"summary_large_image","twitter_misc":{"Predpokladan\u00fd \u010das \u010d\u00edtania":"25 min\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/","url":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/","name":"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS - Websupport centrum podpory","isPartOf":{"@id":"https:\/\/www.websupport.sk\/podpora\/#website"},"datePublished":"2026-09-28T10:42:54+00:00","dateModified":"2026-09-28T10:42:55+00:00","description":"Kompletn\u00fd technick\u00fd sprievodca presunom PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu Websupport na vlastn\u00fd VPS s distribuciu Ubuntu Server.","breadcrumb":{"@id":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/#breadcrumb"},"inLanguage":"sk-SK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.websupport.sk\/podpora\/kb\/migracia-php-aplikacie-zo-zdielaneho-hostingu-na-vps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.websupport.sk\/podpora\/"},{"@type":"ListItem","position":2,"name":"Migr\u00e1cia PHP aplik\u00e1cie zo zdie\u013ean\u00e9ho hostingu na VPS"}]},{"@type":"WebSite","@id":"https:\/\/www.websupport.sk\/podpora\/#website","url":"https:\/\/www.websupport.sk\/podpora\/","name":"Websupport centrum podpory","description":"Radi v\u00e1m pom\u00f4\u017eeme s va\u0161im probl\u00e9mom","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.websupport.sk\/podpora\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sk-SK"}]}},"_links":{"self":[{"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/ht-kb\/37361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/users\/57"}],"version-history":[{"count":4,"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/ht-kb\/37361\/revisions"}],"predecessor-version":[{"id":37437,"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/ht-kb\/37361\/revisions\/37437"}],"wp:attachment":[{"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/media?parent=37361"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/ht-kb-category?post=37361"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.websupport.sk\/podpora\/wp-json\/wp\/v2\/ht-kb-tag?post=37361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}