Egy staging VPS alapbeállítása lépésről-lépésre
Régóta kacérkodtam a gondolattal, hogy shared hosting helyett VPS-en hosztoljam a készített weboldalakat. Örömmel jelentem, hogy helyes és eredményes döntés volt, itt pedig összefoglalom, mit kell csinálnod, ha te is váltani szeretnél.
Frissítés, 2019. január 2.: ha production környezethez keresel útmutatót, itt megtalálod: Így használj VPS-t tárhelyként éles környezetben
Melyik szolgáltatót válaszd?
Jelenleg két szolgáltató között ingázok - most éppen a DigitalOcean felé mozdulok, de az oldalaim többsége még Vultr-n fut, ami abból fakad, hogy sokáig a DigitalOcean árazása magasabb volt, de mostanra fordult a kocka: a DO-n valamennyivel jobb az ár/érték arány.
Mit kapunk a pénzünkért és mennyi az annyi?
Kezdjük az árakkal: a legolcsóbb droplet a DigitalOcean-nél havi 5 dollár (ez nagyjából évi 17 ezer Ft), míg a Vultr-nél 2.5 dollár (ha éppen van belőle, de akkor évi 8.500 Ft). Ez utóbbi már bőven versenyképes a hazai osztott tárhelyes árakkal szemben is, így ha megvan a technikai vénád vagy a megfelelő embered, mindenképpen érdemes komolyan fontolóra venni a kérdést - ha pedig fejlesztő vagy, akkor ennél nagyobb szívességet nem is tehetnél magadnak.
A VPS-ek teljesítménye össze sem hasonlítható az osztott tárhelyes megoldásokkal: míg osztott tárhelyen nagyjából 192 MB maximális memóriával kell beérjük, addig a Vultr legkisebb csomagjában 512, a DigitalOcean-ében pedig 1 GB RAM van, mindkettő esetben 1 virtuális processzorral.
A különféle csomagok között szabad az átjárás annyiban, hogy csak olyan csomagra válthatunk, amibe belefér a mostani csomagunk tárhelye. Tehát 25-ről 50-re válthatunk, de lefele nem. Fontos különbség a kettő szolgáltató között, hogy a Vultr-nél minden méretből egy variáció van, így ha bármelyik paraméterben is kinőttük az aktuális csomagot, magasabb (és drágább) csomagba kell lépnünk. Ezzel szemben a DigitalOcean-nél lehetőség van csak CPU és RAM szerint változtatni a droplet méretén, így szabadon kipróbálhatod a 3GB RAM + 1 vCPU, 1 GB RAM + 3 vCPU és a 2GB RAM + 2 vCPU kombinációkat plusz költség nélkül, sőt, magasabb csomagra is válthatsz ideiglenesen, mert a tárhely mérete nem változik. Így könnyedén tudsz plusz kapacitást tenni az oldalad mögé egy nagyobb roham esetén, majd ha az lecsengett, visszaállhatsz az eredeti kapacitásra - mindezt néhány kattintásból.
(Ha a DigitalOcean linkekre kattintva regisztrálsz, kapsz 200 dollárnyi kreditet. A felhasználására 2 hónapod van, de több Dropletre is felhasználhatod párhuzamosan, vagyis akár 20-at is felhúzhatsz a legkisebb dropletből, 2 hónapig ingyen üzemelnek.)
Hozzuk létre a szervert és lépjünk be
Egy új szerver létrehozása mindkettő esetben nagyon gyors, az admin felületek hasonlók - ízlés kérdése, hogy melyik tetszik jobban. Ha megvan a VPS telepítése (ebben az útmutatóban Ubuntut futtató szervert használok), jelentkezz be a megkapott adatokkal (a DigitalOcean e-mailben küldi ki a kezdeti root jelszót, amit meg kell változtatnod az első bejelentkezéskor - a @ utáni rész a szervered IP-címe):
A bejelentkezéshez valamilyen SSH kliensre lesz szükséged:
A bejelentkezés után valószínűleg már látni fogod, hogy van néhány frissítés, ezeket érdemes telepíteni, kezdjük tehát ezzel. Mivel root-ként jelentkeztünk be, ezért nincs szükségünk sudo-ra a parancs előtt (ha sudo-val kezdődik egy parancs, akkor rendszergazdaként adjuk ki az utasítást):
Ez viszonylag gyorsan lemegy, ha végzett, indítsuk újra a szervert:
Adjunk hozzá nem-root felhasználót
Folyamatosan rendszergazdaként használni a VPS-t nagyon nem ajánlott, ezért hozzunk létre egy sima felhasználót, aki rendszergazda módba válthat. Létrehozzuk a felhasználónkat (a felhasználónév ebben az esetben a wbmngr). Kérdezni fog tőlünk a rendszer - ezekre válaszoljunk. A jelszó megadásánál nem látszódnak a karakterek - ez normális.
Ha ezzel megvagyunk, adjuk hozzá a felhasználót a sudoers
csoporthoz: azok a felhasználók tartoznak ide, akiknek joguk van rendszergazda üzemmódba lépniük:
Ha ezzel megvagyunk, jelentkezzünk ki, majd vissza az új felhasználóval (itt már az előbb megadott jelszóra lesz szükséged, nem a root
hoz tartozóra):
Belépés SSH kulccsal
Mivel mostanra már sokadszorra írtad be a jelszavadat, jogos, hogy egy kicsit kezd fárasztó lenni - változtassunk ezen és hozzunk létre SSH-kulcsot a felhasználónkhoz!
Az SSH kulcsot NE a szerveren generáld: oda csak a kulcs publikus felét töltsd fel. Az alábbi paranccsal egy kulcs generálódik az [email protected] e-mail címmel:
Kérdez néhányat a rendszer: hova tegye a kulcsunkat (/home/username/.ssh/vps_wbmngr
) és hogy szeretnénk-e jelszót a kulcshoz (nem feltétlenül). A fentieket értelemszerűen cseréld le a saját e-mail címedre és felhasználónevedre. A kulcsokat érdemes a saját usered .ssh
mappájában tárolni, de nem az alapértelmezetten felkínált (id_rsa) néven - így ha több lesz, meg fogod tudni különböztetni őket.
Ha megvagy a kulcs generálásával, töltsd fel a szerverre a felhasználódhoz:
A feltöltéshez kérni fogja a szerveren levő felhasználód jelszavát - miután megadtad, feltölti a szerverre a kulcsot, melyet a megjelenő Number of key(s) added: 1 szöveg nyugtáz. Ezután próbálj meg bejelentkezni a szerverre a jelszavad használata nélkül:
Ha minden jól ment, a szerver nem kért jelszót (hacsak nem állítottál be a kulcsodhoz, de akkor az ahhoz tartozót kérte a géped), csak simán bejelentkeztetett.
SSH biztonságos beállítása
A rendszer alapértelmezetten nem a legbiztonságosabb beállításokkal érkezik, ezért érdemes ezen változtatnunk. Ehhez - miután bejelentkeztünk a szerverre - az SSH daemon beállításait kell megváltoztatnunk, amihez root jogokra van szükségünk, ugyanis egy rendszerfájlt szerkesztünk:
A következő változtatásokat végezzük el:
- letiltjuk a root belépését
- áttesszük az SSH-t a megszokott 22-es portról egy másikra
- kikapcsoljuk a jelszavas bejelentkezést
Csak akkor állj neki ennek a pontnak, ha gond nélkül be tudsz jelentkezni jelszó nélkül!
Keresd meg az alábbiakat. Ha esetleg #-el ki van kommentezve, töröld ki a sor elejéről a #-et. Figyelj arra, hogy pontosan csináld: ha valamilyen hibát vétesz, az SSH daemon nem fog elindulni, nem fogsz tudni belépni a szerverre, le kell lőnöd a szervert és kezdheted előlről az egészet.
- Port 22: a 22-t írd át valamire, amire szeretnéd. Praktikus valahova 1000 és 65535 közé tenni, nem olyan portra, amit később használni fogunk (tehát a 80-as és a 443-as portot NE válaszd!). Legyen mondjuk 62222.
- PermitRootLogin yes: a yes-t írd át no-ra, tehát PermitRootLogin no lesz
- PasswordAuthentication yes és PermitEmptyPasswords yes sorok: mindkettő esetben írd át a yes-t no-ra, tehát:
Ha ezekkel megvagy, mentsd el a fájlt (Ctrl+O, enter), lépj ki (Ctrl+X), indítsd újra az SSH szolgáltatást:
Ha ezek után kijelentkezel (amit szigorúan csak akkor tégy meg, ha a jelszó nélküli bejelentkezés működött), visszajelentkezni már csak akkor tudsz, ha kézzel megadod a port számát is a parancsban, tehát:
Fontos: ha létrehoztál tűzfal szabályt a droplet elkészítése során, akkor frissítsd az ott levő szabályokat, hogy a 22-es helyett a 62222-es port legyen nyitva - különben a bejelentkezési kérésed el sem jut a szerverig.
Könnyítsük meg egy kicsit az életünket: mentsük el ezeket a beállításokat a profilunkba, hogy a későbbiekben könnyedén tudjunk csatlakozni a szerverhez. Nyissuk meg a kedvenc szövegszerkesztőnkben a ~/.ssh/config
fájl-t, és a végére illesszük be az alábbi részletet (nyilván a saját beállításainkkal):
Ezzel gyakorlatilag beállítottunk egy alias-t az IP-címre, így azt nem kell megjegyeznünk, illetve a portot és a felhasználónevet is elmentettük. A későbbiekben elég ennyit írnunk terminálban:
és a fenti adatokat fogja használni a csatlakozáshoz. További előnye ennek, hogy ha van olyan program, ami a natív SSH-nkat használja, mint pl. a PhpStorm, akkor az is itteni beállításokat fogja használni. (Sőt: ha terminálban elkezded beírni a parancsot, és az y
után TAB-ot nyomsz, ki is egészíti automatikusan - persze csak akkor, ha nincs másik, y-onnal kezdődő Host felvéve).
Fail2ban beállítása
Mivel nem gyakran csinálom, ezért ehhez nekem is mindig tutorial kell, így inkább linkelem azt, amit szoktam használni: ebből az útmutatóból elég lehet az első néhány lépést megcsinálni (a findtime
és a maxretry
-ig). Itt jegyzem meg, hogy a DigitalOcean-nek kiváló útmutatói vannak, érdemes olvasgatni őket.
Itt érdemes újraindítani a szervert, hogy lássuk, sikerül-e visszajutnunk.
Frissítések automatikus telepítése
Érdemes beállítanunk a szerveren a frissítések automatikus telepítését is - így a karbantartásnak ez a része is automatizáltan tud működni. A helyzet hasonló a fentihez, így szintén csak a linket adom: Ubuntu szerver - automatikus frissítések
Naplófájlok automatikus takarítása
Idővel felgyűlnek a naplófájlok az alaprendszeren, ezért érdemes beállítani egy automatikus takarítást ennek megelőzésére. Ehhez nyissuk meg a rendszer crontab-ját az alábbi paranccsal:
Majd adjuk hozzá az alábbi sort a fájl legvégéhez:
Ennek köszönhetően minden nap éjfélkor kitisztulnak a logok és csak az elmúlt 14 nap tartalma marad meg.
Gratulálok! Van egy működő, önjáró VPS-ed, ami ráadásul egész biztonságos is lett. Menjünk tovább a Docker beállítására.
Videó
Időközben készült egy videó is a teljes folyamatról: Buxbaum Barnával beszélgetünk, és az utolsó 45-50 percben meg is mutatom a teljes folyamatot.
Frissítések
Ha production környezethez keresel útmutatót, itt megtalálod: Így használj VPS-t tárhelyként éles környezetben.