Kompletný technický sprievodca presunom PHP aplikácie zo zdieľaného hostingu Websupport na vlastný VPS s distribuciu Ubuntu Server. Tento návod pokrýva informácie od zistenia verzií (PHP, databáza, webserver) cez správne dimenzovanie a identické nasadenie prostredia až po prenos dát, HTTPS certifikát, ladenie výkonu a prevádzku nemanažovaného servera.
Cieľová platforma: Ubuntu Server 24.04 LTS
Stack: Nginx + Apache + PHP-FPM + MariaDB
Náročnosť: pokročilá
Predpokladaný čas: pol dňa – 1 deň
Zo zdieľaného hostingu na VPS: čo sa mení
Predtým, než sa pustíte do príkazov, je dôležité chápať povahu tejto zmeny. Neprechádzate len na výkonnejší „balík“ – prechádzate z plne manažovaného prostredia na nemanažované. To je najväčší rozdiel celej migrácie.
Na zdieľanom hostingu Websupport za vás poskytovateľ riešil takmer všetko „pod kapotou“: aktualizácie operačného systému a webového stacku, bezpečnostné záplaty, ochranu pred útokmi, monitoring dostupnosti, zálohovanie aj základné ladenie výkonu. Vy ste sa starali len o svoju aplikáciu.
Na nemanažovanom VPS dostávate dedikované zdroje a plnú kontrolu (root prístup, ľubovoľné verzie softvéru, vlastná konfigurácia), ale zároveň preberáte plnú zodpovednosť za celý server – od jadra systému po zálohy. Nie je to nič, čo by sa nedalo zvládnuť, no treba s tým počítať od začiatku, nie až keď niečo prestane fungovať.
Čo získavate
- Vyhradené vCPU, RAM a NVMe disk len pre vašu aplikáciu.
- Ľubovoľné verzie PHP, databázy a webservera; vlastné rozšírenia a moduly.
- Väčšie limity (pamäť skriptu, počet procesov, veľkosť uploadu, cache).
- Možnosť škálovať vertikálne (viac zdrojov) aj horizontálne (viac serverov).
- Nástroje ako Redis, Varnish, vlastný cron, systemd služby, CI/CD.
Čo preberáte na seba
- Aktualizácie OS a všetkých balíkov (vrátane bezpečnostných).
- Zálohovanie dát a overovanie obnovy.
- Monitoring dostupnosti a vyťaženia (CPU, RAM, disk).
- Bezpečnosť: firewall, ochrana pred útokmi, hardening.
- Ladenie výkonu a riešenie incidentov.
1. Analýza súčasného prostredia a príprava
Cieľom migrácie je postaviť na VPS prostredie, ktoré je s pôvodným identické alebo lepšie. To sa dá len vtedy, keď presne viete, čo dnes beží. Najprv teda zistíte verzie a konfiguráciu, až potom staviate.
1.1 Zistenie verzie PHP
Verziu PHP na zdieľanom hostingu zistíte vo WebAdmine (sekcia hostingu → nastavenia PHP), alebo priamo z aplikácie krátkym skriptom. Vytvorte súbor info.php v koreni webu:
<?php
phpinfo();
Otvorte https://mojadomena.sk/info.php. Z výstupu si zapíšte: verziu PHP, zapnuté rozšírenia (Loaded Extensions), SAPI (FPM/CGI/Apache module), a hodnoty ako memory_limit, upload_max_filesize, post_max_size, max_execution_time, date.timezone. Tie budete na VPS replikovať.
Ak máte SSH/shell prístup, funguje aj:
# verzia CLI PHP a zoznam modulov
php -v
php -m
# hodnoty konfigurácie, ktoré chcete preniesť
php -i | grep -Ei 'memory_limit|upload_max|post_max|max_execution|timezone|opcache
TIP: PHP 8.1 je EOL a beží bez bezpečnostných záplat. Skok na 8.5 je väčší ako minor upgrade – medzi verziami pribudli deprecations a zmeny správania. Než prostredie ostro nasadíte, preverte kompatibilitu:
- Aktualizujte CMS/framework a všetky pluginy, témy a knižnice na verzie, ktoré deklarujú podporu cieľového PHP (napr. WordPress, Joomla, Laravel, Symfony majú maticu podporovaných verzií).
- Ak používate Composer, spustite
composer why-not php 8.5acomposer updatena testovacej kópii. - Skontrolujte migračné príručky PHP (Migration Guide) pre 8.2, 8.3, 8.4, 8.5 – zmeny sú kumulatívne.
- Otestujte na staging kópii so zapnutým
display_errorsalog_errorsešte pred prepnutím produkcie.
1.2 Zistenie databázy a jej verzie
Zdieľaný hosting Websupport používa relačné databázy MariaDB/MySQL. Verziu a znakovú sadu zistíte cez phpMyAdmin (úvodná stránka zobrazuje verziu servera), alebo SQL dotazom:
SELECT VERSION();
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
-- veľkosť databázy (MB) podľa schém - dôležité pre sizing bufferov
SELECT table_schema AS db,
ROUND(SUM(data_length + index_length)/1024/1024, 1) AS size_mb
FROM information_schema.tables
GROUP BY table_schema
ORDER BY size_mb DESC;
1.3 Webserver, .htaccess a cron
Zdieľaný hosting beží na Apache s podporou .htaccess. Zistite, či ho aplikácia využíva (SEO/pekné URL, presmerovania, hlavičky, ochrana priečinkov). To ovplyvní architektúru na VPS:
- Apache na VPS zachová
.htaccessbez úprav (potrebnémod_rewriteaAllowOverride All). - Nginx
.htaccessnepozná – pravidlá treba prepísať do konfigurácie servera. - V tomto návode použijeme kombináciu oboch: Nginx vpredu (rýchly, statika, TLS, rate‑limit) a Apache s
mod_php-fpmvzadu (spracuje.htaccess).
Nezabudnite na plánované úlohy (cron). Na hostingu ich spravoval WebAdmin; na VPS si ich nastavíte sami cez crontab -e. Vypíšte si všetky existujúce cron úlohy a ich časovanie.
1.4 Ďalšie závislosti aplikácie
- Odosielanie e‑mailov: ako aplikácia posiela poštu? (funkcia mail(), lokálne SMTP, externá služba). Na VPS to budete musieť vyriešiť.
- Rozšírenia PHP: zo zoznamu z info.php si pripravte, čo doinštalovať (mysqli/pdo_mysql, gd/imagick, curl, mbstring, intl, zip, bcmath, xml…).
- Externé služby a API kľúče: platobné brány, CDN, SMTP, reCAPTCHA – overte IP whitelisty (mení sa vám IP servera!).
- Veľkosť dát: celkový objem súborov (du -sh) a databázy – vstup pre sizing disku.
2. Zmeranie súčasnej záťaže a sizing na X‑násobok
Najčastejšia otázka pri VPS znie: „akú konfiguráciu si mám vybrať?“ Odpoveď nie je odhad, ale meranie. V tejto sekcii najprv zistíte, koľko toho web zvláda teraz, a potom to prepočítate na cieľový X‑násobok s rozumnou rezervou.
2.1 Krok A – zmerajte, čo web zvláda teraz
Zbierajte tieto štyri skupiny údajov. Časť nájdete v štatistikách WebAdmin (návštevnosť, prenos dát, počet DB dotazov), zvyšok dopočítate z logov a databázy.
Návštevnosť a špičkové zaťaženie z access logu
Ak máte prístup k access logu (na hostingu cez WebAdmin/FTP, na akejkoľvek kópii lokálne), zistíte reálny počet požiadaviek za sekundu v špičke. To je kľúčové číslo – priemer klame, dimenzujete na špičku.
# Počet požiadaviek za jednotlivé sekundy - nájde najsilnejšiu špičku (req/s)
awk '{print $4}' access.log | cut -d: -f2-4 | sort | uniq -c | sort -rn | head
# Počet požiadaviek za minútu (prehľadnejšie pre menšie weby)
awk '{print $4}' access.log | cut -d: -f2-3 | sort | uniq -c | sort -rn | head
# Podiel dynamických (PHP) vs. statických požiadaviek - dôležité pre sizing PHP-FPM
grep -c '\.php' access.log
wc -l < access.log
Pre pohodlnejšiu analýzu odporúčame nástroj GoAccess (sudo apt install goaccess), ktorý z logu vygeneruje interaktívny report vrátane špičiek, top URL a stavových kódov.
Odhad súbežnosti (concurrency)
Počet naozaj súčasne bežiacich požiadaviek odhadnete z priepustnosti a doby odozvy podľa Little’s law:
# Little's law - priemerná súbežnosť súbežné požiadavky ≈ špička (req/s) × priemerná doba odozvy (s) # Príklad: 30 req/s v špičke, priemerná odozva PHP 0,2 s 30 × 0,2 = 6 súbežných PHP workerov v priemere (špičkovo viac → rátajte 2-3×)
Databázová záťaž a veľkosť
Z už poznáme veľkosť databázy. Doplňte informáciu o „ťažkých“ dotazoch – tie určujú, koľko RAM sa oplatí dať databáze (buffer pool by mal ideálne pokryť tzv. working set, teda aktívne používané dáta a indexy).
Aktuálne systémové metriky
Ak beží aplikácia už na nejakom serveri, kde máte prístup, sledujte htop, free -h, iostat. Na zdieľanom hostingu tento pohľad nemáte – tam sa oprite o návštevnosť a typ aplikácie (jednoduchý web vs. e‑shop s množstvom pluginov).
2.2 Krok B – nájdite strop záťažovým testom
Najspoľahlivejšie zistíte hranicu výkonu záťažovým testom. Spustite ho mimo špičky, ideálne proti staging kópii (nie proti živej produkcii). Postupne zvyšujte súbežnosť a sledujte, kedy prudko stúpne odozva alebo začnú chyby (HTTP 502/503).
# Apache Bench - 1000 požiadaviek, 50 súbežných
ab -n 1000 -c 50 https://staging.mojadomena.sk/
# wrk - 30 s test, 8 vlákien, 100 spojení (moderná alternatíva)
wrk -t8 -c100 -d30s https://staging.mojadomena.sk/
# k6 - realistický scenár s postupným rastom (ramp-up)
# k6 run zatazovy-test.js
Príklad k6 skriptu zatazovy-test.js, ktorý „vybudí“ systém rastúcou záťažou, aby ste našli bod zlomu:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '1m', target: 20 }, // rozbeh na 20 VUs
{ duration: '2m', target: 100 }, // rast na 100 VUs
{ duration: '2m', target: 200 }, // hľadáme strop
{ duration: '1m', target: 0 }, // dobeh
],
thresholds: {
http_req_duration: ['p(95)<800'], // 95 % odpovedí pod 800 ms
http_req_failed: ['rate<0.01'], // menej ako 1 % chýb
},
};
export default function () {
const res = http.get('https://staging.mojadomena.sk/');
check(res, { 'status 200': (r) => r.status === 200 });
sleep(1);
}
Počas testu sledujte na cieľovom serveri metriky – v druhom termináli:
htop # CPU jadrá, RAM, swap, load average
free -h # využitie a swapovanie pamäte
iostat -x 2 # %util diskov (I/O bottleneck)
watch -n1 'ss -s' # počet spojení
Výsledkom je strop: napr. „do ~80 súbežných je odozva do 300 ms, nad ~150 prudko rastie a objavujú sa 503“. Zapíšte si, ktorý zdroj sa vyčerpal ako prvý (CPU na 100 %, RAM/swap, pm.max_children, disk %util). To určí, ktorý parameter navyšovať.
2.3 Krok C – prepočet na X‑násobok s rezervou
Teraz preveďte namerané hodnoty na cieľovú konfiguráciu. Vždy počítajte s rezervou 20-30 % – server nemá dlhodobo bežať na 100 % CPU ani plnej RAM.
RAM – zvyčajne limitujúci zdroj
RAM sa delí medzi PHP‑FPM, databázu a operačný systém. Postup:
# 1) Pamäť pre PHP-FPM RAM_PHP = cieľová súbežnosť workerov × priemerná pamäť 1 procesu (priemer procesu zmeriate na VPS príkazom nižšie; typicky 30-120 MB) # 2) Pamäť pre databázu (InnoDB buffer pool ≈ working set, max ~veľkosť DB) RAM_DB = innodb_buffer_pool_size + ~20-30 % réžia DB servera # 3) Operačný systém a démoni RAM_OS = 1-2 GB # 4) Spolu + rezerva RAM_VPS = (RAM_PHP + RAM_DB + RAM_OS) × 1,25 # 25 % rezerva
Priemernú pamäť jedného PHP procesu zmeriate priamo na bežiacom serveri:
# Priemerná RSS pamäť PHP-FPM procesov (číslo verzie prispôsobte)
ps --no-headers -o "rss,cmd" -C php-fpm8.6 \
| awk '{ sum+=$1 } END { printf ("%d MB\n", sum/NR/1024) }'
vCPU
- Ak bol pri strope CPU‑bound (jadrá na 100 %), škáluje počet jadier približne lineárne s cieľovým X‑násobkom (+ rezerva).
- Väčšina PHP webov je však I/O‑bound (procesy čakajú na DB, disk, sieť) – potom rozhoduje počet workerov a RAM, nie čistý CPU. Napriek tomu dajte databáze aj PHP dosť jadier na paralelizmus.
- Praktický štart: 4 vCPU (odporúčané minimum WS). Pri e‑shopoch a vyššej súbežnosti 6-8 vCPU. Priemerné VPS na infraštruktúre Websupportu má okolo 4 vCPU / 8 GB RAM.
Disk a IOPS
- Veľkosť = súbory webu + databáza + logy + zálohy + rezerva. Držte aspoň 20-30 % voľného miesta.
- Websupport VPS bežia na rýchlom SSD/NVMe úložisku, takže IOPS zvyčajne nie sú úzkym miestom bežných PHP webov.
- Disk sa dá dodatočne navýšiť (rozšírenie volume). Zaplnený disk je najčastejší dôvod, prečo VPS spadne – preto ho monitorujte.
2.4 Kompletný príklad výpočtu
Web má v špičke ~30 req/s, priemernú odozvu PHP 0,2 s, databázu 2 GB a chceme zvládnuť 5× vyššiu návštevnosť.
| Krok | Výpočet | Výsledok |
| Súbežnosť teraz | 30 req/s × 0,2 s | ~6 workerov (priemer) |
| Cieľ 5× | 6 × 5, +rezerva na špičku | ~30-40 workerov |
| RAM pre PHP | 35 workerov × ~50 MB | ~1,8 GB |
| RAM pre DB | buffer pool ~3 GB (DB 2 GB + rast) + réžia | ~3,5 GB |
| RAM pre OS | — | ~1,5 GB |
| RAM spolu + 25 % | (1,8 + 3,5 + 1,5) × 1,25 | ~8,5 GB → volíme 8-12 GB |
| vCPU | web prevažne I/O‑bound, 5× súbežnosť + DB | 4-6 vCPU |
| Disk | súbory + DB + logy + zálohy + rezerva | 50-80 GB SSD |
Výsledok: napr. VPS s 6 vCPU / 12 GB RAM / 80 GB SSD s pohodlnou rezervou na 5× rast. Keby ste chceli 10× a viac, oplatí sa už uvažovať o oddelení databázy na samostatný VPS a horizontálnom škálovaní.
2.5 Kedy rozdeliť záťaž (horizontálne škálovanie)
Pri produkčných nasadeniach odporúčame umiestniť každú súčasť aplikácie na samostatný server – typicky oddeliť aplikáciu a databázu. Získate lepšiu izoláciu a každý komponent škálujete zvlášť. Pri vyššom X‑násobku zvážte:
- Databázu na vlastný VPS – uvoľní RAM pre PHP a naopak; DB dostane celý buffer pool.
- Viac web serverov za Load Balancer vo Virtuálnom dátovom centre (VDC) – horizontálne pridávanie kapacity.
- Redis/Memcached pre session a object cache, aby web servery zdieľali stav.
Pre jednoduchosť ale v tomto návode staviame jeden VPS so všetkými službami; rozdelenie je logickým ďalším krokom, keď narazíte na strop jedného stroja.
3. Objednanie a základná príprava VPS
Pri objednávke VPS zvolíte operačný systém. Návod predpokladá čistý Ubuntu Server 24.04 LTS (najnovšia LTS), aby sme prešli všetky kroky. Aplikácie inštalujeme priamo do systému v konkrétnych verziách – nie do kontajnerov.
3.1 Prvé prihlásenie a bezpečné základy
Po zriadení VPS dostanete IP adresu (resp. hostname v tvare nazov.vps.wbsprt.com) a prihlasovacie údaje. Pripojte sa cez SSH:
ssh root@IP_ADRESA # prvé prihlásenie (alebo neprivilegovaný účet)
passwd # zmena predvoleného hesla na silné
Odporúčame prejsť na prihlasovanie cez SSH kľúč a vytvoriť neprivilegovaného používateľa so sudo:
# na svojom počítači vygenerujte kľúč (ak ešte nemáte)
ssh-keygen -t ed25519 -C "vas@email.sk"
# na serveri vytvorte používateľa a pridajte ho do sudo
adduser web
usermod -aG sudo web
# skopírujte verejný kľúč používateľovi (z vášho počítača)
ssh-copy-id web@IP_ADRESA
3.2 Aktualizácia systému, čas a swap
# načítanie metadát a aktualizácia balíkov
sudo apt update
apt list --upgradable
sudo apt upgrade -y
# ak sa aktualizovalo jadro (kernel), reštartujte
sudo reboot
# správna časová zóna (dôležité pre logy a cron)
sudo timedatectl set-timezone Europe/Bratislava
date
Synchronizáciu času zabezpečuje systemd-timesyncd (NTP), na Ubuntu je aktívna. Ak má VPS menej RAM, vytvorte si poistný swap (bráni pádu procesov pri prudkej špičke – nesmie však slúžiť ako náhrada RAM):
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# databázový server nech radšej swapuje čo najmenej
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
3.3 Fireewall (UFW) a ochrana pred brute‑force
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status verbose
Port 3306 (MariaDB) neotvárajte – databáza má počúvať len na localhost. Nainštalujte Fail2Ban, ktorý po opakovaných neúspešných prihláseniach automaticky blokuje IP útočníka:
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
3.4 Automatické bezpečnostné aktualizácie
Keďže OS udržiavate vy, zapnite automatické inštalovanie bezpečnostných záplat:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
4. Inštalácia stacku v presných verziách
Postavíme presne definované prostredie: MariaDB ako databáza, PHP‑FPM 8.5 v konkrétnej verzii z overeného PPA, Apache ako backend (kvôli .htaccess) a Nginx vpredu ako reverzné proxy. Všetko natívne v systéme, nie v kontajneroch.
Cieľová architektúra
# Tok požiadavky Internet ──▶ Nginx :80/:443 ──▶ Apache :8080 ──▶ PHP-FPM (socket) ──▶ MariaDB (localhost) (TLS, statika, (.htaccess, (spracovanie (dáta) rate-limit, cache) mod_rewrite) PHP skriptov)
Prečo takto: Nginx vpredu je extrémne rýchly na statiku, TLS a obmedzovanie záťaže; Apache vzadu bez úprav zvládne vaše pôvodné .htaccess pravidlá; PHP‑FPM je moderný a efektívny spôsob behu PHP (výkonnejší a flexibilnejší než starý mod_php). Ak .htaccess nepoužívate, Apache môžete vynechať a Nginx pripojiť priamo na PHP‑FPM (LEMP) – vtedy preskočte časti s Apache.
4.1 Databázový server – MariaDB
sudo apt install mariadb-server -y
mariadb --version # overte verziu (napr. 10.11 LTS / 11.x)
sudo systemctl enable --now mariadb
sudo mysql_secure_installation # nastaví root heslo, odstráni test DB a anon. účty
MariaDB štandardne počúva len na 127.0.0.1:3306 – presne to chceme. Vytvorte databázu a samostatného používateľa pre aplikáciu (znaková sada utf8mb4):
sudo mariadb
CREATE DATABASE nazov_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'uzivatel_db'@'localhost' IDENTIFIED BY 'SilneHeslo123!';
GRANT ALL PRIVILEGES ON nazov_db.* TO 'uzivatel_db'@'localhost';
FLUSH PRIVILEGES;
EXIT;
4.2 PHP‑FPM v konkrétnej verzii (PPA ondrej/php)
Ubuntu v základných repozitároch ponúka len jednu verziu PHP. Pre konkrétnu verziu a možnosť súbežne držať viac verzií použite overený repozitár ondrej/php:
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
Nainštalujte PHP‑FPM a rozšírenia, ktoré ste si vypísali z info.php na začiatku tohoto návodu.
sudo apt install -y \
php8.5-fpm php8.5-cli php8.5-mysql php8.5-xml php8.5-mbstring \
php8.5-curl php8.5-gd php8.5-intl php8.5-zip php8.5-bcmath php8.5-opcache
php8.5 -v
sudo systemctl enable --now php8.5-fpm
Zosúlaďte kľúčové hodnoty php.ini s pôvodným hostingom (súbor /etc/php/8.5/fpm/php.ini):
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 60
date.timezone = Europe/Bratislava
; OPcache - zásadné zrýchlenie behu PHP (kešuje skompilovaný bytecode)
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
Reštartnite php-fpm:
sudo systemctl restart php8.5-fpm
4.3 Apache ako backend + PHP‑FPM,
Apache nainštalujeme tak, aby počúval na internom porte 8080 (Nginx bude vpredu na 80/443) a PHP posielal do PHP‑FPM cez FastCGI:
sudo apt install apache2 -y
# moduly pre PHP-FPM cez FastCGI a pre .htaccess
sudo a2enmod proxy_fcgi setenvif rewrite headers
sudo a2enconf php8.5-fpm
# Apache nech počúva len lokálne na 8080 (Nginx je vpredu)
sudo sed -i 's/^Listen 80$/Listen 127.0.0.1:8080/' /etc/apache2/ports.conf
Vytvorte VirtualHost pre doménu (koreň webu /var/www/mojadomena.sk) v súbore /etc/apache2/sites-available/mojadomena.sk.conf
<VirtualHost 127.0.0.1:8080>
ServerName mojadomena.sk
ServerAlias www.mojadomena.sk
DocumentRoot /var/www/mojadomena.sk
<Directory /var/www/mojadomena.sk>
AllowOverride All # aby fungovali vaše .htaccess pravidlá
Require all granted
</Directory>
# zachovaj reálnu IP návštevníka predanú Nginxom
RemoteIPHeader X-Forwarded-For
ErrorLog ${APACHE_LOG_DIR}/mojadomena_error.log
CustomLog ${APACHE_LOG_DIR}/mojadomena_access.log combined
</VirtualHost>
Následne spustite:
sudo a2enmod remoteip
sudo a2ensite mojadomena.sk.conf
sudo a2dissite 000-default.conf
sudo mkdir -p /var/www/mojadomena.sk
sudo apache2ctl configtest && sudo systemctl reload apache2
4.4 Nginx ako reverzné proxy vpredu
Nginx prevezme porty 80/443, obslúži statiku a TLS a dynamiku pošle na Apache (8080). Nginx aj Apache tak bežia na jednom serveri bez potreby druhej IP.
sudo apt install nginx -y
Upravte /etc/nginx/sites-available/mojadomena.sk
server {
listen 80;
listen [::]:80;
server_name mojadomena.sk www.mojadomena.sk;
root /var/www/mojadomena.sk;
# obmedzenie tempa požiadaviek (základná ochrana, viď zóna nižšie)
limit_req zone=perip burst=20 nodelay;
# statiku obslúži priamo Nginx (rýchlejšie, odľahčí Apache/PHP)
location ~* \.(?:css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2?|ttf|mp4)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
try_files $uri @backend;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location @backend {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Definujte rate‑limit zónu v hlavnej konfigurácii (v bloku http { }):
Súbor /etc/nginx/conf.d/ratelimit.conf
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
Následne:
sudo ln -s /etc/nginx/sites-available/mojadomena.sk /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
Otestujte beh PHP – dočasne vytvorte info skript, načítajte v prehliadači a hneď zmažte:
echo '<?php phpinfo();' | sudo tee /var/www/mojadomena.sk/info.php
# otvorte http://IP_ADRESA/info.php - SAPI musí byť FPM/FastCGI
sudo rm /var/www/mojadomena.sk/info.php # ihneď zmazať!
5. Prístup k súborom (FTP/SFTP) a správa databázy cez GUI
Na hostingu ste mali FTP účty a phpMyAdmin „hotové“. Na VPS si prístup pripravíte sami – bezpečne.
5.1 SFTP namiesto FTP
Každý VPS s bežiacim SSH automaticky podporuje SFTP – šifrovaný prenos súborov cez rovnaké prihlasovacie údaje. Nepotrebujete inštalovať žiadny FTP server. Vo FileZilla zadajte:
| Pole | Hodnota |
| Hostiteľ | sftp://IP_ADRESA |
| Port | 22 |
| Používateľ / kľúč | váš SSH účet (web) a SSH kľúč |
| Cieľový priečinok | /var/www/mojadomena.sk |
5.2 phpMyAdmin alebo Adminer
Na správu databázy cez webové rozhranie máte dve praktické možnosti:
phpMyAdmin
Plnohodnotné rozhranie. Inštalácia: sudo apt install phpmyadmin. Je to častý terč útokov – vždy zabezpečte.
Adminer
Jediný PHP súbor, ľahké nasadenie a menší útočný povrch. Stačí ho stiahnuť do priečinka mimo hlavného webu a otvoriť v prehliadači.
# Adminer do samostatného, chráneného priečinka
sudo mkdir -p /var/www/dbadmin
sudo curl -L https://www.adminer.org/latest.php -o /var/www/dbadmin/index.php
6. Prenos súborov webu a databázy
Presun obsahu má dve časti – súbory a databázu. Kľúčové je zachovať štruktúru, kódovanie a práva.
6.1 Prenos súborov
Zo starého hostingu stiahnite všetky súbory vrátane skrytých (napr. .htaccess, .env). Najefektívnejšie je rsync (ak máte SSH na oboch stranách), inak FTP stiahnutie a SFTP nahratie:
# Priamy prenos medzi servermi (spustené na VPS), ak je SSH Shell na starom hostingu:
rsync -avz --progress user@stary-hosting:/cesta/k/webu/ /var/www/mojadomena.sk/
# Alternatíva: archív na starom serveri, prenos, rozbalenie na VPS
# (na starom serveri) tar czf web.tar.gz -C /cesta/k/webu .
# (na VPS) scp user@stary-hosting:~/web.tar.gz .
# (na VPS) tar xzf web.tar.gz -C /var/www/mojadomena.sk
6.2 Export databázy zo starého hostingu
Vo WebAdmine použite Export databázy (vygeneruje .sql), alebo mysqldump. Pre InnoDB použite --single-transaction, aby ste dostali konzistentný dump bez zamykania tabuliek:
mysqldump -h mariadbXX.r.wbsprt.com -u uzivatel -p \
--single-transaction --quick --default-character-set=utf8mb4 \
--routines --triggers --events \
nazov_db > zaloha.sql
# rýchlejšie pri veľkých DB - komprimovaný dump
mysqldump -h HOST -u USER -p --single-transaction nazov_db | gzip > zaloha.sql.gz
Údaje o DB serveri hostingu (hostname, používateľ) nájdete vo WebAdmine v sekcii databáz.
6.3 Import databázy na VPS
Preneste .sql na VPS (SFTP) a naimportujte do databázy vyššie vytvorenej:
# komprimovaný dump rozbaľte za behu zcat zaloha.sql.gz | mysql -u uzivatel_db -p nazov_db # alebo nekomprimovaný mysql -u uzivatel_db -p nazov_db < zaloha.sql
Možné problémy pri importe
- „MySQL server has gone away“ / veľký dump: zvýšte max_allowed_packet na oboch stranách. V /etc/mysql/mariadb.conf.d/50-server.cnf nastavte napr. max_allowed_packet = 256M a reštartujte MariaDB.
- Zlé kódovanie (otázniky, „Å¾Ăˇ“): dump aj import robte s –default-character-set=utf8mb4. Ak pôvodná DB bola v latin1 uložená ako „double‑encoded“ UTF‑8, riešte cielenou konverziou, nie len zmenou charsetu.
- Nekompatibilné definície (staré verzie): pri prechode z veľmi starých MySQL použite pri exporte –compatible alebo postupný upgrade.
6.4 Práva a vlastníctvo súborov
Webserver (Apache/PHP‑FPM) beží ako používateľ www-data. Nastavte vlastníctvo tak, aby mal prístup a zápisové priečinky boli zapisovateľné – nikdy nepoužívajte chmod 777:
sudo chown -R www-data:www-data /var/www/mojadomena.sk
# adresáre 755, súbory 644
sudo find /var/www/mojadomena.sk -type d -exec chmod 755 {} \;
sudo find /var/www/mojadomena.sk -type f -exec chmod 644 {} \;
# aby ste vedeli súbory spravovať aj vy, pridajte sa do skupiny www-data
sudo usermod -aG www-data web
7. Konfigurácia aplikácie na novom serveri
Po prenose dát treba aplikáciu „napojiť“ na nové prostredie – hlavne na lokálnu databázu.
7.1 Databázové prístupy
Na hostingu bola databáza na vzdialenom serveri (napr. mariadbXX.r.wbsprt.com). Teraz beží lokálne, takže host bude localhost (resp. 127.0.0.1). Upravte konfiguračný súbor aplikácie:
| Systém | Súbor | Kľúč |
| WordPress | wp-config.php | DB_HOST, DB_NAME, DB_USER, DB_PASSWORD |
| Joomla | configuration.php | $host, $db, $user, $password |
| Laravel/Symfony | .env | DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD |
| PrestaShop | app/config/parameters.php | database_host, database_name… |
wp-config.php (príklad):
define( 'DB_HOST', 'localhost' ); // predtým mariadbXX.r.wbsprt.com
define( 'DB_NAME', 'nazov_db' );
define( 'DB_USER', 'uzivatel_db' );
define( 'DB_PASSWORD', 'SilneHeslo123!' );
7.2 URL a cesty
- Doména sa nemení → aplikácia používa rovnaké URL, netreba zásah (testovanie cez
hosts, viď sekcia 9). - Absolútne cesty v konfigu (napr.
/data/.../web/uploads) prepíšte na nové (/var/www/mojadomena.sk/uploads). Väčšina moderných aplikácií používa relatívne cesty /__DIR__, takže zásah často netreba. - WordPress: URL sú v databáze – nemeňte ich ručne, na test použite
hosts. Prípadnú zmenu domény riešte cez WP‑CLIsearch-replace(serializované dáta).
7.3 Odosielanie e‑mailov
7.4 Debug a chybové logy
Počas oživovania dočasne zapnite chyby a sledujte logy – najčastejšie problémy sú chýbajúce PHP rozšírenie, zlá cesta k uploadu, zle vyplnené DB údaje či práva na zápis:
sudo tail -f /var/log/apache2/mojadomena_error.log
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php8.5-fpm.log
V php.ini (len dočasne, na produkcii vypnúť): display_errors = On, error_reporting = E_ALL. Cron úlohy z hostingu nastavte cez crontab -e.
8. Nasadenie HTTPS certifikátu (Let’s Encrypt)
Na hostingu ste mali Let’s Encrypt certifikát automaticky. Na VPS si ho nastavíte pomocou Certbota. Keďže vpredu beží Nginx, použijeme Nginx plugin.
8.1 Podmienka: doména musí smerovať na VPS
Let’s Encrypt overuje vlastníctvo domény cez HTTP výzvu na porte 80. Doména preto musí smerovať na VPS – buď už prepnutým DNS A záznamom, alebo dočasne cez hosts. Nginx musí obsluhovať doménu na porte 80.
8.2 Inštalácia a vydanie certifikátu
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d mojadomena.sk -d www.mojadomena.sk
Certbot automaticky: overí doménu (cez /.well-known/acme-challenge/), vystaví certifikát, upraví konfiguráciu Nginx a opýta sa na presmerovanie HTTP → HTTPS – zvoľte áno (možnosť „Redirect“), nech sú návštevníci vždy na HTTPS. Certifikáty sa uložia do /etc/letsencrypt/live/mojadomena.sk/.
Apache je za Nginxom
TLS ukončuje Nginx; Apache vzadu ostáva na HTTP (127.0.0.1:8080). Aby aplikácia vedela, že požiadavka prišla cez HTTPS, Nginx posiela hlavičku X-Forwarded-Proto (nastavené v 4.4). V aplikácii prípadne nastavte, aby tejto hlavičke dôverovala (trusted proxy).
8.3 Automatická obnova
Certifikáty platia 90 dní; Certbot pridá časovú úlohu, ktorá ich obnoví automaticky. Overte „nanečisto“:
sudo certbot renew --dry-run
systemctl list-timers | grep certbot
8.4 Sprísnenie TLS a HSTS (voliteľné, odporúčané)
Do server bloku (HTTPS) v Nginx pridajte hlavičku HSTS a moderné TLS nastavenia:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
Kvalitu nasadenia si overte na SSL Labs (ssllabs.com/ssltest) alebo otvorením https://mojadomena.sk/ a kontrolou zámku v prehliadači.
9. Finálne testovanie a prepnutie DNS
Web na VPS otestujte ešte pred zmenou DNS. Chyby sa ladia oveľa pokojnejšie, keď ich nevidia návštevníci.
9.1 Testovanie cez súbor hosts
Na svojom počítači dočasne nasmerujte doménu na IP VPS pridaním riadka do hosts (C:\Windows\System32\drivers\etc\hosts na Windows, /etc/hosts na Linux/macOS):
Súbor hosts:
123.45.67.89 mojadomena.sk www.mojadomena.sk
9.2 Kontrolný zoznam pred prepnutím
- Logy (Nginx, Apache, PHP‑FPM, aplikácia) nehlásia chyby.
- Funguje upload súborov, odoslanie formulára/e‑mailu, prihlásenie, kľúčové funkcie.
- HTTPS beží bez varovaní, presmerovanie z HTTP funguje.
- Stránky sa generujú svižne.
- Zálohovanie a monitoring sú pripravené.
9.3 Finálna synchronizácia dát
Ak od exportu DB pribudli na starom webe nové dáta (príspevky, objednávky), spravte tesne pred prepnutím nový export a import, aby ste neprišli o čerstvý obsah. Na starom webe ideálne po tomto momente „zmrazte“ zápisy (údržbový režim).
9.4 Prepnutie DNS
V DNS správe domény (u Websupportu vo WebAdmin → Domény → DNS záznamy) upravte A záznam (prípadne AAAA pre IPv6) na IP adresu VPS a uložte. Propagácia zvyčajne trvá minúty až (výnimočne) hodiny.
Počas propagácie
- Časť návštevníkov ešte môže trafiť starý server – nechajte starý hosting 1-2 dni aktívny ako poistku.
- Overte šírenie cez whatsmydns.net a načítanie na viacerých sieťach (mobil, iný ISP).
- Skontrolujte, či sa všetky prvky (obrázky, skripty) načítavajú cez správne URL a nič neodkazuje na starý server.
- Až keď v logoch VPS vidíte všetku prevádzku a všetko funguje, môžete starý hosting deaktivovať.
10. Optimalizácia výkonu na VPS (PHP + databáza)
Najväčšia výhoda VPS: konfiguráciu vyladíte na mieru vašej aplikácii. Predvolené hodnoty sú konzervatívne a nevyužívajú výkon, ktorý máte k dispozícii. Cieľom je využiť dostupnú RAM efektívne, ale nikdy ju nepresiahnuť – inak server začne swapovať a dramaticky spomalí.
10.1 Rozdelenie pamäte medzi PHP a databázu
Keď na jednom VPS beží web aj databáza, RAM si musia rozdeliť. Hrubé rozdelenie pre orientáciu (upravte podľa toho, či je aplikácia viac PHP‑náročná alebo DB‑náročná):
# Príklad rozpočtu RAM na VPS s 8 GB Operačný systém a démoni ....... ~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
10.2 Ladenie PHP‑FPM (počet procesov)
Kľúčový parameter je pm.max_children v /etc/php/8.5/fpm/pool.d/www.conf – maximálny počet paralelných PHP procesov. Priveľa procesov zaplní RAM (swap → OOM killer), primálo zbytočne obmedzí súbežnosť.
Ako vypočítať pm.max_children
pm.max_children = RAM vyhradená pre PHP ÷ priemerná pamäť 1 procesu # Príklad: 2,5 GB pre PHP, 1 proces ~60 MB 2560 MB ÷ 60 MB ≈ 42 → s rezervou ~20 % nastavíme pm.max_children = 34
Priemernú pamäť procesu ste zmerali v druhej sekcii tohto návodu. Odporúčaná konfigurácia pool‑u:
Súbor /etc/php/8.5/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 34
pm.start_servers = 8
pm.min_spare_servers = 6
pm.max_spare_servers = 12
pm.max_requests = 500 ; poistka proti memory leakom - proces sa po 500 req obnoví
; stavová stránka pre monitoring PHP-FPM
pm.status_path = /fpm-status
pm = dynamic– udržiava pool pripravených procesov (bezpečná voľba pre premenlivú záťaž). ondemand šetrí RAM pri veľmi nízkej návštevnosti.
pm.max_requestspravidelne recykluje procesy – bráni postupnému nárastu pamäte kvôli únikom.
sudo systemctl restart php8.5-fpm
10.3 Ladenie MariaDB
Najväčší dopad na výkon má veľkosť InnoDB buffer poolu – RAM, ktorú DB použije na cache dát a indexov. Čím viac dát sa zmestí do RAM, tým menej sa číta z disku. Konfigurácia je v /etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
# Najdôležitejšie: nech pokryje aktívne dáta + indexy (working set).
# Ak DB beží samostatne, dajte 60-70 % RAM; ak zdieľa server s PHP, menej.
innodb_buffer_pool_size = 3G
# Redo log - väčší = menej flushov pri zápisoch (MariaDB 10.11+)
innodb_log_file_size = 512M
# Bezpečné vs. rýchle: 1 = plná ACID odolnosť (default), 2 = rýchlejšie zápisy
innodb_flush_log_at_trx_commit = 1
# Priamy zápis na disk, obchádza cache OS (vhodné, keď má buffer pool RAM)
innodb_flush_method = O_DIRECT
# Prispôsobenie rýchlemu SSD/NVMe úložisku Websupportu
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
# Log pomalých dotazov - nájde neindexované/ťažké dotazy
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
Následne:
sudo systemctl restart mariadb
Ďalšie body:
- Query cache vypnite (query_cache_type = 0). Pri zápisovej záťaži skôr škodí zamykaním; moderné verzie ju už neodporúčajú.
max_connectionsdržte len tak vysoko, koľko reálne treba (každé spojenie stojí pamäť). Orientačne o niečo viac nežpm.max_children.- Po pár dňoch analyzujte
slow.log– opakované pomalé dotazy zvyčajne vyrieši chýbajúci index, nie väčší hardvér.
10.4 Caching na úrovni aplikácie
OPcache
Už je zapnutý. Uistite sa, že opcache.memory_consumption stačí na všetky skripty (skontrolujte cez OPcache status).
Redis / Memcached
sudo apt install redis-server php8.5-redis. Ideálne na object cache a session – výrazne odľahčí databázu (obzvlášť WordPress/WooCommerce).
Nginx microcache
Krátky (1-10 s) cache odpovedí pre neprihlásených návštevníkov nárazovo znásobí priepustnosť pri špičkách a náporoch.
CDN
Cloudflare / BunnyCDN odľahčia statiku a absorbujú časť útokov. Bonus: skryjú pôvodnú IP servera.
10.5 Priebežné sledovanie a doladenie
Pod reálnou záťažou sledujte, či niektorý zdroj nedochádza. Nástroje:
htop # CPU, RAM, load average
free -h # swap used má byť ~0
iostat -x 2 # %util disku (I/O bottleneck)
vmstat 2 # si/so stĺpce = swapovanie (nesmie byť trvalé)
| Symptóm | Pravdepodobná príčina | Riešenie |
| Dochádza RAM / swapuje | priveľa PHP procesov alebo veľký buffer pool | znížiť pm.max_children/buffer_pool, alebo pridať RAM |
| CPU trvalo na 100 % | CPU‑náročný kód/plugin, málo jadier | profilovať aplikáciu, pridať vCPU |
| Disk %util vysoké | malý buffer pool → veľa čítaní z disku | zväčšiť buffer pool, doplniť indexy |
| Odozva rastie, 503 | dosiahnutý pm.max_children | zvýšiť (ak RAM dovolí), zapnúť cache |
Po vyladení zopakujte záťažový test – uvidíte reálnu novú kapacitu a či pre ďalší rast postačí ladenie, alebo bude treba upgrade (viac RAM/jadier), prípadne rozdelenie záťaže (DB na samostatný VPS, viac web serverov za Load Balancer).
11.Prevádzka nespravovavného (unmanaged) VPS
Toto je jadro prechodu managed → unmanaged. Na zdieľanom hostingu sa o operačný systém, aktualizácie, zálohy a bezpečnosť staral Websupport. Na vlastnom VPS je server váš – aj zodpovednosť zaň. Nasledujúce oblasti nie sú jednorazové, tvoria trvalú rutinu prevádzky.
Čo bolo predtým samozrejmé a teraz je na vás
Bezpečnostné záplaty OS, aktualizácie PHP/DB, zálohovanie a jeho testovanie, monitoring dostupnosti, obrana proti útokom, sledovanie expirácií. Nič z toho sa nedeje automaticky „samo“ – musíte to nastaviť a udržiavať. Dobrou správou je, že väčšina sa dá zautomatizovať a Websupport ponúka pomocné služby (snapshoty, monitoring, platená správa servera).
11.1 Aktualizácie systému
Bezpečnostné aktualizácie riešte automaticky (nastaven cez unattended-upgrades). Väčšie zásahy robte ručne a s rozvahou:
sudo apt update && sudo apt upgrade # pravidelne (napr. týždenne)
sudo apt autoremove # upratanie starých balíkov
cat /var/run/reboot-required 2>/dev/null # treba reštart po update jadra?
11.2 Zálohovanie (3‑2‑1)
Zlaté pravidlo: 3 kópie dát, na 2 rôznych médiách, 1 mimo servera. Záloha, ktorú ste nikdy neobnovili, nie je záloha.
Automatický dump databázy
Súbor /usr/local/bin/db-backup.sh
#!/bin/bash
STAMP=$(date +%F)
DEST=/var/backups/db
mkdir -p "$DEST"
mysqldump --single-transaction --quick --routines --triggers \
mojadomena_db | gzip > "$DEST/mojadomena_$STAMP.sql.gz"
# zmaž zálohy staršie ako 14 dní
find "$DEST" -name '*.sql.gz' -mtime +14 -delete
Následne:
sudo chmod +x /usr/local/bin/db-backup.sh
sudo crontab -e
# denne o 3:15:
15 3 * * * /usr/local/bin/db-backup.sh
Súbory aplikácie zálohujte podobne (tar priečinka /var/www) a kópie prenášajte mimo servera (iný VPS, objektové úložisko, lokálny disk cez rsync/scp).
Otestujte obnovu
Aspoň raz skúšobne obnovte databázu aj súbory na testovacom serveri. Až úspešná obnova potvrdí, že zálohy sú použiteľné. Najhorší čas na zistenie, že záloha je poškodená, je počas reálneho výpadku.
11.3 Monitoring
Na zdieľanom hostingu dostupnosť strážil Websupport. Teraz musíte vy vedieť o probléme skôr než návštevníci. Sledujte minimálne: dostupnosť webu (HTTP), CPU, RAM, voľné miesto na disku (plný disk = pád DB aj webu), beh služieb (nginx, apache2, php8.5‑fpm, mariadb) a platnosť SSL certifikátu.
| Nástroj | Na čo |
| Websupport Monitoring | Dostupnosť a základné metriky priamo od poskytovateľa, s notifikáciami |
| Netdata | Detailný real‑time dashboard servera, inštalácia na pár minút |
| Zabbix / Grafana + Prometheus | Robustný monitoring a história metrík pre náročnejšie nasadenia |
| UptimeRobot | Externé sledovanie dostupnosti zvonku + alerty (e‑mail/SMS) |
11.4 Bezpečnosť a hardening
- Aktualizujte aplikáciu (jadro CMS, pluginy, knižnice cez composer update). Neaktualizovaný plugin je najčastejšia vstupná brána útoku.
- Firewall a Fail2Ban už bežia. Zvážte pridanie Fail2Ban filtra na webové logy (opakované 401/404, pokusy o login).
- SSH len cez kľúč, root login zakázaný, silné heslá do DB a administrácie.
- phpMyAdmin/Adminer chránený a neverejný; port 3306 nikdy von.
- Pravidelne kontrolujte logy (/var/log/auth.log, logy web servera) na neobvyklú aktivitu.
11.5 Ochrana proti DDoS
Obrana funguje vo vrstvách:
Infraštruktúra
Websupport poskytuje ochranu proti objemovým (L3/L4) útokom na úrovni siete. To je základ, ktorý sami nezaistíte.
Aplikačná vrstva
Rate‑limiting v Nginxe (limit_req), mod_evasive pre Apache, ochrana prihlasovacích formulárov.
CDN / proxy
Cloudflare a pod. absorbujú útok pred serverom, filtrujú L7 a skryjú pôvodnú IP. Účinná prvá línia.
11.6 Pravidelná údržba a upratovanie
- Rotácia logov (
logrotate) – aby logy nezaplnili disk. Väčšina balíkov ju nastaví, občas skontrolujte. - Čistenie starých cache, dočasných súborov, neaktuálnych záloh.
- Sledovanie expirácií: doména, SSL certifikát (auto‑obnova beží, ale kontrolujte), platené API kľúče. Zapíšte si termíny.
- Dokumentujte si konfiguráciu a zásahy – budúce „ja“ (alebo kolega) poďakuje.
Nechcete to riešiť sami?
Ak na správu servera nemáte kapacity, Websupport ponúka službu Správu servera – prevádzku, aktualizácie a dohľad prevezmeme za vás. Kompromis medzi plnou kontrolou unmanaged VPS a bezstarostnosťou manažovaného riešenia.
Zhrnutie
Presunuli sme aplikáciu zo zdieľaného hostingu na vlastný VPS: zmerali sme reálnu záťaž a nadimenzovali server na X‑násobok, postavili identické (a novšie) prostredie na čistom Ubuntu, preniesli dáta, zabezpečili HTTPS, vyladili výkon a prevzali prevádzku vrátane záloh, monitoringu a bezpečnosti. Máte plnú kontrolu aj plnú zodpovednosť nad VPS.
Užitočné zdroje