Shared hosting radi svoj posao dok ne dođe prvi ozbiljniji nalet prometa. Tada isplivaju problemi: sporo vrijeme odgovora, nema SSH pristupa, kontrolna ploča koja server konfiguraciju skriva iza pet izbornika. Za stranicu koja donosi prihod (rezervacije, upiti, prodaja), ta ograničenja koštaju svaki tjedan dok ih ne riješite.
Ovaj vodič dokumentira stvarnu migraciju koju smo odradili za klijenta (u tekstu ga zovemo XYZ). WordPress stranica XYZ preseljena je sa shared hosting plana na Hostinger VPS s CloudPanelom, uz istovremenu promjenu domene. Pokriti ćemo provisioning VPS-a, postavljanje CloudPanela, prijenos datoteka i baze, zamjenu URL-ova, SSL, sigurnosno ojačavanje servera i redirect sa stare domene. Svaka naredba i konfiguracijski blok dolaze iz stvarne migracije.
Ako ste ovaj tip migracije već radili, preskočite na dio koji vam treba. Ako vam je ovo prvi VPS, čitajte od početka do kraja. Redoslijed je bitan.
Zašto uopće shared hosting
Argumenti za migraciju obično se svode na tri bolne točke. Nijedna nije teoretska.
Ograničenja resursa su nevidljiva dok ne udarite u njih. Shared hosting provideri oversellaju hardver, tako im posao funkcionira. Vaša stranica dijeli CPU i memoriju s desecima drugih korisnika na istom fizičkom stroju. Kad susjedu skoči promet, vaše vrijeme odgovora može skočiti sa 400 ms na 3 sekunde. Nećete dobiti nikakvo upozorenje. Na VPS-u, dodijeljeni resursi su isključivo vaši. Čak i skroman KVM 1 plan (1 CPU, 4 GB RAM, 50 GB diska) bez problema nosi srednje veliku WordPress stranicu s uključenim cachingom.
Kontrola na razini servera na shared planovima jednostavno ne postoji. Želite konfigurirati Nginx? Nemoguće. Trebate uključiti Varnish, povećati PHP memory limit ili instalirati sistemski paket? Također nemoguće. Na VPS-u s CloudPanelom, svaki sloj stacka vam je dostupan: OS, web server vhostovi, PHP-FPM poolovi, konfiguracija baze podataka. Vi odlučujete što se vrti i kako.
Cijena skalira bolje nego što većina ljudi očekuje. Sama cPanel licenca košta 15–20 dolara mjesečno. CloudPanel je besplatan. Hostinger VPS KVM 1 plan košta manje od većine premium shared planova, a dolazi s root pristupom.
Postoje opravdani razlozi da ostanete na shared hostingu: imate blog s malo prometa, želite nula održavanja servera ili je stranica privremena. Ali čim stranica zarađuje novac ili služi stvarnim korisnicima, migracija se isplati unutar mjesec dana.
Odabir kontrolne ploče
Kad naručite VPS od Hostingera (ili bilo kojeg drugog providera), prva prava odluka nakon odabira OS-a je koju kontrolnu ploču instalirati. Preskočite ovaj korak i sve ćete raditi kroz command line. Evo što nudi tržište u 2026:
CloudPanel radi na Nginxu, ima moderno sučelje i potpuno je besplatan. Pokriva kreiranje WordPress stranica, provisioning SSL-a, Varnish caching i upravljanje datotekama, sve iz jednog sučelja. Laganih je nogu, osjetno manje žedan resursa od alternativa. To je alat koji smo koristili za XYZ migraciju i koji preporučujemo za većinu WordPress-na-VPS-u setup-a.
Virtualmin/Webmin je ono što Hostinger standardno preporučuje u svojim VPS tutorijalima. Instalira puni LAMP stack (Apache, MySQL, PHP) i uključuje podršku za email server kroz ClamAV i SpamAssassin. Kompromis: zahtjevniji po pitanju resursa, a sučelje djeluje zastarjelo. Odaberite Virtualmin ako vam treba email hosting na istom VPS-u.
cPanel je ploča koju većina ljudi prepoznaje sa shared hostinga. Poznato ne znači optimalno. Mjesečna licenca se nakuplja, a overhead na resurse je zamjetan na manjem VPS-u.
CyberPanel radi na OpenLiteSpeedu i performansama ne zaostaje, ali ekosustav je manji, a dokumentacija slabija.
Za ovu migraciju instalirali smo Ubuntu 24.04 s CloudPanelom kroz Hostingerov ekran za odabir OS-a. Proces obriše VPS do gole kosti (očekivano, jer krećemo od nule) i traje par minuta. Nakon instalacije, login podaci za CloudPanel pojave se u Hostinger panelu pod OS & Panel.
Migracija korak po korak
1. Kreirajte WordPress stranicu u CloudPanelu
Otvorite CloudPanel na https://<ip-vašeg-vps-a>:8443. Kliknite Add Site → Create a WordPress Site i ispunite:
- Domain name:
xyz.com(vaša nova produkcijska domena) - Site title: što god odgovara projektu
- Site user i password: kontrolira SSH i SFTP pristup datotekama stranice
- Admin user i password: login za WordPress administraciju. Ne koristite "admin" kao korisničko ime
- Admin email: stvarna adresa koju aktivno pratite
Kliknite Create. CloudPanel kreira Nginx vhost, MySQL bazu i čistu WordPress instalaciju u jednom potezu.
2. Usmjerite DNS na VPS
Idite na DNS upravljanje kod vašeg registrara domene i ažurirajte (ili kreirajte) dva A zapisa:
| Tip | Host | Vrijednost |
|---|---|---|
| A | @ | <ip-vašeg-vps-a> |
| A | www | <ip-vašeg-vps-a> |
Ako www CNAME zapis već postoji, prvo ga obrišite. A i CNAME zapisi na istoj poddomeni se sukobljavaju. DNS propagacija obično traje od 15 minuta do 2 sata. Provjerite s dig xyz.com +short iz terminala.
3. Napravite backup-e na starom hostu
U kontrolnoj ploči starog hostinga (Hostinger hPanel, cPanel ili ekvivalent), idite na Backups i preuzmite dvije stvari:
- Backup datoteka, cijeli
public_htmldirektorij kao zip arhiva - Backup baze, SQL dump WordPress baze podataka
Za XYZ stranicu, arhiva datoteka bila je otprilike 1,78 GB, a dump baze 133 MB. Velike media biblioteke dižu veličinu backup-a datoteka; to je normalno.
4. Prebacite datoteke na VPS
Prije uploadanja ičega, sačuvajte svježi wp-config.php koji je CloudPanel generirao. Podaci za spajanje na bazu iz te datoteke trebat će vam kasnije.
cp /home/xyzuser/htdocs/xyz.com/wp-config.php /tmp/wp-config-new.php
Uploadajte arhivu datoteka kroz CloudPanel File Manager (Sites → Manage → File Manager) ili putem SFTP-a. Stavite je na privremenu lokaciju i raspakirajte:
cd /home/xyzuser/htdocs/xyz.com/
unzip -o /tmp/public_html.zip
Zastavica -o prepisuje postojeće datoteke bez pitanja. Ovo zamjenjuje standardnu WordPress instalaciju stvarnim datotekama stranice sa starog hosta.
Sad vratite CloudPanel-ov wp-config.php kako bi se stranica spojila na ispravnu lokalnu bazu:
cp /tmp/wp-config-new.php /home/xyzuser/htdocs/xyz.com/wp-config.php
Ispravite vlasništvo nad datotekama kako bi Nginx i PHP-FPM ispravno čitali sve:
chown -R xyzuser:xyzuser /home/xyzuser/htdocs/xyz.com/
5. Importirajte bazu podataka
Uploadajte SQL dump u /tmp/ na VPS-u, zatim ga importirajte kroz MySQL CLI:
mysql -u xyz_dbuser -p xyz_database < /tmp/backup.sql
Na upit za lozinku, upišite podatke iz CloudPanela (Sites → Manage → Databases). Ovo zamjenjuje prazne WordPress tablice punim produkcijskim podacima sa starog hosta.
6. Forsirajte novu domenu u wp-config.php
Importirana baza još uvijek sadrži staru domenu u opcijama siteurl i home. Nadjačajte ih uređivanjem wp-config.php:
nano /home/xyzuser/htdocs/xyz.com/wp-config.php
Dodajte ova dva retka prije komentara /* That's all, stop editing! */:
define('WP_HOME', 'https://xyz.com');
define('WP_SITEURL', 'https://xyz.com');
Spremite i zatvorite. Sad biste trebali moći pristupiti https://xyz.com/wp-admin i prijaviti se s podacima sa stare stranice.
7. Zamijenite stare URL-ove (search and replace)
Instalirajte Better Search Replace plugin iz WordPress repozitorija (Plugins → Add New → pretražite "Better Search Replace"). Ovaj plugin pokreće find-and-replace operacije direktno na bazi. Najsigurniji je način ažuriranja serijaliziranih podataka bez da ih pokvarite.
Idite na Tools → Better Search Replace i pokrenite ove zamjene jednu po jednu, odabirajući sve tablice baze za svaku:
| Traži | Zamijeni s |
|---|---|
https://stara-domena.com | https://xyz.com |
http://stara-domena.com | https://xyz.com |
http://xyz.com | https://xyz.com |
Svaku zamjenu prvo pokrenite kao dry run. Plugin javlja koliko bi polja bilo promijenjeno. Kad brojke izgledaju razumno, odznačite dry run opciju i pokrenite stvarnu zamjenu.
Ako je stara stranica u nekom trenutku koristila staging URL ili localhost putanju, dodajte i te kao zasebne search-and-replace prolaze. Zastarjeli URL-ovi u serijaliziranim podacima widgeta i sadržaju page buildera (Elementor, WPBakery) najčešći su uzrok slomljenog layouta nakon migracije.
Nakon zamjene URL-ova:
- Ako stranica koristi Elementor: idite na Elementor → Tools → Regenerate CSS & Data
- Idite na Settings → Permalinks i kliknite Save Changes bez da išta mijenjate. Ovo resetira rewrite pravila
8. Instalirajte SSL certifikat
U CloudPanelu idite na Sites → Manage → SSL/TLS i kliknite Actions → New Let's Encrypt Certificate. Dodajte i xyz.com i www.xyz.com, zatim kliknite Create and Install.
Let's Encrypt certifikati se automatski obnavljaju kroz CloudPanel-ov ugrađeni cron job. Nakon inicijalnog postavljanja, ručna intervencija nije potrebna.
9. Zaključajte server
Svježi VPS je prema zadanim postavkama izložen. Kao minimum, konfigurirajte firewall i uključite automatska sigurnosna ažuriranja.
Firewall (UFW):
ufw allow 22 # SSH
ufw allow 80 # HTTP
ufw allow 443 # HTTPS
ufw allow 8443 # CloudPanel admin
ufw enable
Automatski sigurnosni patchevi:
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades
Odaberite Yes kad vas sustav upita. Ovo osigurava da se kritični OS patchevi primjenjuju bez čekanja da se vi spojite putem SSH-a.
Napravite snapshot servera. Prije nego što dirate bilo što drugo, idite na Hostinger → VPS → Snapshots & Backups i kreirajte snapshot. Ovo vam daje točku za rollback ako nešto pukne kasnije.
10. Uključite caching
Instalirajte WP-Optimize (ili koji god caching plugin preferirate) i uključite page caching. Već samo to drastično smanjuje vrijeme odgovora servera na VPS-u koji nije iza CDN-a.
CloudPanel nudi Varnish Cache kao opciju. Funkcionira, ali zna se sukobiti s WordPress pluginovima koji postavljaju custom headere ili cookieje (WooCommerce, membership pluginovi, sustavi za rezervacije). Temeljito istestirajte prije nego uključite Varnish na produkciji. Page caching na razini plugina sigurnija je polazišna točka.
11. Redirectirajte staru domenu
Ovo je korak koji ljudi zaborave. Ujedno je i korak koji vam uništi pozicije na tražilicama ako ga preskočite. Ako stara domena još uvijek ima backlinkove, indeksirane stranice ili bookmarkane URL-ove razbacane po internetu, trebate 301 redirect koji sve preusmjerava na novu domenu.
Evo kvake na koju smo se i mi prvi put nasjeli: DNS stare domene još uvijek pokazuje na stari shared hosting server, ne na vaš VPS. To znači da redirect mora živjeti na shared hostingu, ne na VPS-u.
Uredite .htaccess datoteku u root direktoriju starog shared hosting računa i dodajte ovaj redak na sam vrh, prije WordPress rewrite bloka:
Redirect 301 / https://xyz.com/
Puni .htaccess bi trebao izgledati ovako:
Redirect 301 / https://xyz.com/
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Testirajte u pregledniku. Posjet na https://stara-domena.com trebao bi vas odvesti na https://xyz.com/. Ako ste u CloudPanelu kreirali statičnu redirect stranicu za staru domenu, obrišite je. Budući da DNS nikad nije pokazivao na VPS, ta CloudPanel stranica ionako nikad nije primala promet.
Kontrolna lista nakon migracije
Ne otkazujte stari hosting plan odmah. Ozbiljno, držite ga živim barem tjedan dana. Stvari isplivavaju polako.
Prođite ručno kroz cijelu stranicu. Svaki page template. Svaku formu za kontakt. Svaki language toggle ako je stranica višejezična. Ovo je dio koji većina ljudi preskače, a upravo tu se skrivaju slomljeni layouti i mrtvi linkovi. Obratite posebnu pažnju na booking ili e-commerce tokove. Hardkodirani URL-ovi u postavkama pluginova i return URL-ovi payment gatewaya najčešći su krivci.
Promijenite sve lozinke. WordPress admin, database user, SSH/SFTP, CloudPanel admin, sve. Tijekom migracije ste kopirali podatke za pristup između sustava, lijepili ih u terminale i uploadali config datoteke. Rotirati sve lozinke sad nije paranoja. To je osnovna higijena.
Pratite potrošnju resursa servera u CloudPanelu prvih tjedan dana. Ako CPU ili memorija skače pod normalnim prometom, istražite uzrok prije nego dođe sljedeći peak.
Što dolazi nakon
Cijela migracija je posao za jedno popodne kad znate redoslijed. XYZ migraciju smo odradili u otprilike četiri sata, uključujući čekanje na DNS propagaciju. Isplativost (puna kontrola nad serverom, bolje performanse, niži mjesečni trošak) akumulira se svakim mjesecom dok stranica radi.
Ako je vaša stranica prerasla shared hosting i odgađali ste preseljenje jer vam je postupak izgledao nejasno, ovaj vodič bi trebao ukloniti tu nesigurnost. Alati su besplatni, koraci ponovljivi, a najgori mogući scenarij je snapshot restore.












