Blog

Ako na vlastný Virtuálny privátny server - časť 1.

Lubomir Herko - 21.01.2021 - Vzdělávání

Každý týždeň jeden blog. Také som si dal predsavzatie do nového roka. Hneď prvý týždeň sa to nepodarilo, ale čo už 🤦🏻‍♂️ .

V tomto texte (alebo seriáli?) budeme riešiť tvoj vlastný Virtuálny privátny server (VPS). Konkrétne:

  • zistíme čo to VPS vlastne je a aké sú výhody a prípadné nevýhody,
  • skúsime analyzovať naše potreby a vybrať vhodné parametre nášho servera,
  • VPS kúpime, nastavíme, zabezpečíme a pripravíme pre našu aplikáciu,
  • z GitHub repozitára nasadíme našu aplikáciu do produkcie pomocou GithubActions (CI),
  • kúpime doménu a nasadíme SSL certifikát pomocou letsencrypt.

Je to veľa práce, pome na to.

Načo mi je vlastný server?

Hneď na začiatku si to vyjasnime: VPS je pre väčšinu projektov zbytočný. Pri dnešných možnostiach, ako svoju aplikáciu vieme nasadiť do produkcie a sprístupniť ju používateľom na pár klikov je často zbytočné riešiť komplikované nastavovanie vlastného servera. Hlavne údržba a riešenie prípadných problémov nám môže pripomenúť, ako zle sme sa rozhodli.

Napriek tomu VPS má svoje miesto a niekedy sa naozaj môže hodiť, napríklad:

  • ak máš linux v malíčku, alebo svoj VPS už máš (si skúsený/á),
  • ak výkon zdieľaného hostingu viditeľne nestačí a už nevieš svoju aplikáciu ďalej optimalizovať,
  • ak nepostačujú dostupné technológie zdieľaného hostingu (potrebuješ doinštalovať vlastné knižnice, tooly),
  • ak má aplikácia extrémne nároky na výkon procesora, veľkosť pamäte, alebo potrebuješ ukladať gigabajty/terabajty dát,
  • ak sú dáta, s ktorými pracuješ príliž senzitívne na to, aby boli uložené na jednom mieste spolu s dátami iných používateľov zdieľaného hostingu.

Asi by sme našli aj dalšie prípady, špecifiká, kedy sa hodí VPS, tieto nám však nateraz postačia. Ak teda spadáš do niektorého z kritérií, čítaj ďalej.

Aký výkon servera potrebujem?

Brzdi. Predtým, ako pristúpime ku kúpe servera by sme mali vedieť, aké sú naše požiadavky. Aspoň približne. Potrebujeme veľa jadier procesora? Alebo si vystačíme s jedným, prípadne dvoma jadrami? Potrebujeme veľa operačnej pamäte, alebo terabajty dát na disku? To sú ťažké otázky, ale poradím ti:

  • Ak aplikácia neexistuje a chceš VPS len vyskúšať, zvoľ najlacnejší server aký je v ponuke. Či máš 1 procesor, alebo 32 procesorov - terminál reaguje vždy rovnako rýchlo.
  • Ak je aplikácia nová a nepoznáš jej nároky, začni radšej s menej výkonným a lacnejším serverom. Napríklad CPU s jedným, alebo dvoma jadrami a 2G RAM. Väčšina providerov disponuje jednoduchým škálovacím nástrojom. Ak sa zvýšia nároky, pohneš v administračnom rozhraní nejakým sliderom a šup, máš o dve jadrá viac, prípadne dvojnásobok RAM - do pár sekúnd.
  • Ak si narazil na limity zdieľaného hostingu, pravdepodobne poznáš dôvod, prečo chceš vyskúšať VPS. Najlepšie ak si komunikoval s podporou svojho providera a potvrdili, že si narazil na limit ich CPU, alebo RAM.

Kde kúpiť server?

Takže, ak vieme aspoň približne čo chceme, urobme prieskum. Osobne mám vyskúšaných týchto predajcov VPS:

  • Linode, DigitalOcean, Hetzner, WebSupport

Ubuntu Server a terminál bude u každého predajcu rovnaký. Riadiť sa teda môžeme podľa nasledovných kritérií:

  1. cena
  2. ešte raz cena
  3. možnosti administračného rozhrania a prípadného navyšovania výkonu do budúcnosti
  4. lokalita dátového centra (čo najbližšie k používateľom)

Moja skúsenosť

V poslednej dobe to u mňa osobne vyhráva Hetzner (hetzner.de). Frajeri majú vynikajúce ceny (vlastný server v čase písania tohoto textu vieš získať už za 3E/mesiac) a navyšovanie počtu CPU a RAM je riešené jednoduchým sliderom v administračnom rozhraní. Super vec 🎉. Dátové centrum môžeš zvoliť relatívne blízko - Falkenstein, Nemecko.

TIP: V ľavom hornom rohu zmeníš jazyk webu z nemeckého na anglický. 😎

Vytvorenie konta Hetzner

Ako sa už konečne teda dostaneme k vlastnému serveru? Takto:

  1. Vytvor si konto na hetzner.de (klik)
  2. Klikni na linku, ktorú ti Hetzner poslal na email zadaný pri registrácii
  3. V sérii formulárov vyplň svoje iniciály (posledný formulár vyžaduje údaje o platbe, žiadna platba vopred však nie je potrebná)
  4. Po vyplnení a odoslaní formulárov sa implicitne zobrazí formulár - nastavenia tvojich iniciál. Vpravo hore klikaj na štvorčeky a vyber z ponuky možnosť "Cloud":

Ak máš po absolvovaní predchádzajúcich krokov pred sebou takúto obrazovku:

Konzola cloudu Hetzner.de.
Konzola cloudu Hetzner.de.

je všetko v poriadku.

Môj server!

Už sme blízko. V zozname projektov (predchádzajúci obrázok) klikni na "Default" (tento názov vieš zmeniť cez ikonu troch bodiek v pravom hornom rohu karty produktu) a následne "Add server".

Vytvorenie VPS
Vytvorenie nového VPS.


Parametre servera

Teraz zvolíme parametre servera. V tomto prípade zvolíme najlacnejší variant, ale niektoré možnosti popíšeme bližšie. Parametre servera teda nastavíme nasledovne:

  1. Location (umiestnenie dátového centra): Falkenstein, pretože je najbližšie k Slovensku.
  2. Image (operačný systém): Ubuntu 20.04, pretože s ním viem pracovať a tiež existuje obrovská komunita používateľov Ubuntu servera, čo uľahčí vyhľadanie návodov a riešení prípadných problémov. So serverom Ubuntu bude ďalej pokračovať aj tento tutoriál.
  3. Type (typ servera): Štandardný, pretože nám nevadí, že spolu s našim VPS budú na fyzickom serveri bežať aj iné virutálne servery. Dedikovaný typ servera je vhodný len vtedy, ak potrebujeme naozaj veľký výpočtový výkon pre naše použitie. Z ďalších možností typu servera vyberme hneď prvý s označením CX11 a teda 1x VCPU, 2GB RAM, 20GB SSD v cene €2.99 za mesiac.
  4. Volume (externý disk): Nevytvárame externý disk.
    • TIP: Ak vytvoríme VPS s veľkosťou SSD 20GB a potrebujeme viac dát, nemusíme hneď meniť veľkosť SSD na serveri, ale môžeme pripojiť k serveru externý disk. Má to jednu veľkú výhodu a jednu menšiu. Veľkou výhodou je, že v prípade zvyšovania výkonu (napr. z 1CPU a 2GB RAM na 4CPU 8GB RAM) môžeme zvoliť možnosť, že nechceme navyšovať aj veľkosť SSD - teda SSD ostane na hodnote 20GB. Takéto rozhodnute nám v budúcnosti umožní aj krok späť a teda zníženie počtu VCPU a RAM. Takto môžeme ušetriť nemálo finančných prostriedkov, ak potrebujeme zvýšiť výkon VPS len dočasne, nie natrvalo (napr. ak je aplikácia preťažená len v období Vianoc).
  5. Network (sieť): Nevytvárame sieť, pretože nevytvárame skupinu serverov, ktoré potrebujeme mať na jednej sieti (napr. ak by sme potrebovali zvlášť VPS pre webserver a databázový server).
  6. Additional features (ďalšie možnosti): V prípade možnosti User data nešpekulujeme (zatiaľ). To sa nám môže hodiť vtedy, ak chceme niektoré činnosti automatizovať, napríklad automaticky pridať používateľov do systému, spustiť rôzne skripty po inštalácii a podobne. Backups sú pravidelné zálohy, čo je nutnosť na produkčnom serveri, kde beží ostrá aplikácia. Táto služba je však spoplatnená - 20% z ceny nášho servera. Ak teda vytváraš produkčný server, nafurt, tak odporúčam aj so zálohami. Ak len testuješ, tak je to na tebe 😉 .
  7. SSH Key (SSH kľúč): Ak máš skúsenosti s *nix systémami, možno máš vytvorený svoj id_rsa.pub kľúč. Ak áno, tu ho môžeš použiť a tak sa autentifikovať pri pripájaní k serveru. V opačnom prípade (a to je náš prípad) ti bude zaslané heslo k root použivateľovi na tvoj email. Tu teda nešpekulujeme a zatiaľ nezaškrtneme túto možnosť.
    • TIP: Povoliť vzdialený prístup pre root používateľa nie je bezpečné a používa sa len pre prvotné nastavenie servera (prvé prihlásenie do nového VPS). Jedným z prvých krokov po prihlásení sa do nového VPS by malo byť vytvorenie vlastného používateľa, ktorý sa bude prihlasovať pomocou kľúča (nie hesla) a zakázanie vzdialeného prístupu pre root používateľa. To bude aj náš postup.
  8. Name (Názov): Toto je názov servera, ktorý je zobrazený v administračnom paneli hetzner, ale aj v konzole po pripojení k serveru cez SSH protokol.
    • TIP: Spomeň si na nejaké názvy svetov, postáv z tvojich obľúbených počítačových hier, komixov alebo filmov 😎 .

Veľa čítania kôli pár klikom. Nastavenie servera teda môže vyzerať aj takto:

Parametre VPS - hetzner
Nastavenie parametrov VPS.


Prvé SSH spojenie

Po potvrdení nastavení chvíľu počkáme na spustenie novej inštancie nášho VPS. Zároveň nám Hetzner doručí email s informáciami o IP adrese, na ktorú sa budeme pripájať a heslom pre root používateľa. Tak skontroluj email a poď sa prihlásiť na server cez SSH.

Aký program použiť na prihlásenie cez SSH? Pre MacOS je to Terminal, alebo iTerm. V prípade linuxu (akéhokoľvek) je to veľmi podobné MacOS - čiže opäť Terminal. Používatelia Windows môžu použiť na SSH pripojenie program Putty, prípadne nainštalovať WSL doplnok a použiť WSL terminal. Napíš do komentára ak sa stretneš s nejakým problémom, poriešime.

Z emailu som sa dozvedel, ze IP môjho servera je 78.47.244.57 a heslo k používateľovi root je ss3PgfWnHwxUhUaKEEr9 (ani neskúšaj, server v dobe čítania tohto textu už nebude existovať).

Prihlasovacie údaje k VPS
Email s autorizáciou do nášho VPS.

Terminal

Príkaz ssh, ktorý použijeme v MacOS, Linux alebo WSL termináli má nasledovný syntax:

ssh pouzivatel@ip_servera

Teda v našom prípade:

ssh root@78.47.244.57

Terminál si vypýta heslo, môžeme ho len skopírovať a prilepiť. Pri zadávaní hesla do terminálu sa nezobrazujú žiadne hviezdičky ani odozva. Preto len potvrdíme príkaz klávesou Enter. Ak sa na server pripájame prvýkrát, SSH sa opýta, či chceme server uložiť do zoznamu SSH serverov. Napíšeme yes a spojenie sa v prípade správneho hesla úspešne nadviaže:

Terminal
Prvé pripojenie k serveru cez SSH.

Pri prvom prihlásení je nutné zmeniť heslo používateľa root. Zadáme staré heslo a vytvoríme nové.

Hotovo. Náš nový VPS server Ubuntu 20.10 je vytvorený.

Čo ďalej?

V ďalšej časti blogu budeme pokračovať s nastavením nášho servera:

  1. vytvoríme si na lokálnom počítači SSH kľúč
  2. vytvoríme na serveri vlastného používateľa a nastavíme prihlasovanie cez SSH kľúč
  3. zabezpečíme server pomocou firewallu, fail2ban a iných nástrojov
  4. nainštalujeme a spustíme webový server (nginx)
  5. nainštalujeme a spustíme databázový server (postgresql, ak budeš potrebovať tak aj MySQL)
  6. nainštalujeme závislosti (git, nodejs, ...)

V tretej časti budeme riešiť deploy našej aplikácie na VPS:

  1. kúpime doménu a nasmerujeme ju na server
  2. naklonujeme našu aplikáciu na server, spustíme ju pod doménou a vytvoríme k nej službu (systemd service aby sa automaticky spustila pri prípadnom reštarte servera)
  3. pomocou certbot nastavíme doméne SSL certifikát a sprístupníme aplikáciu pod HTTPS
  4. pomocou GithubActions nastavime continous integration tak, aby sa po push do main branche spustili automatizovane testy a v pripade bezchybnosti sa aplikacia rovno nasadi do produkcie

Veľa roboty máme. Ale veľa sa aj naučíme.

Štvrtá časť nie je.



Default student

Lubomir Herko

#father #husband
#programming #ruby #javascript
#music #christian

Abstrakcia a zoraďovanie v kolekciách v Jave

Vzdělávání

Poďme sa porozprávať o abstraktných triedach v jave (abstract class in java). Abstrakcia slúži na schovanie zložitosti od používateľa a zobrazuje len...

Funkcie VLOOKUP

Vzdělávání

Funkcia VLOOKUP sa používa vtedy, keď potrebujete nájsť údaje v tabuľke alebo rozsahu podľa riadka. Vyhľadajte napríklad cenu automobilovej časti podľa...

OOP v C++: trieda reprezentujúca valec a niečo viac

Vzdělávání

V úvode tohto blogu by som chcel pozdraviť všetkých nadšencov vyššieho programovacieho jazyka C++. V tomto blogu som si pre vás pripravil tému...