nehakeris.lt Blogas apie iOS, Swift, programavimą, etc.

Raspberry Pi, Jekyll ir internetinės svetainės talpinimas namuose

Pirmasis straipsnis bus ne apie iOS, ne apie programavimą ir net ne apie #blockchain. Šiame straipsnyje papasakosiu kaip buvo sukurtas šis blogas - nuo reikiamų resursų iki techninių detalių. Paminėsiu kokias kitas platformas svarsčiau, kodėl pasirinkau Jekyll, bei aptarsiu kelias svetainės talpinimo (hostinimo) alternatyvas. Tai bus lyg Step-by-Step aprašymas kaip galima pačiam susikurti panašią internetinę svetainę ir ją hostinti namuose LABAI PIGIAI. Pamiršau paminėti - į labai pigiai įeina nemokamas HTTPS, baby!

Ko reikia norint sukurti panašią svetainę?

Dalykas Kaina
Nuolat namuose veikiančio interneto ryšio ¯\(ツ)
Raspberry Pi kompiuterio ~ 50€ visam rinkiniui
Statinio IP adreso Gaunate kartu su internetu namuose. Jeigu IP yra dinaminis - reikės Dynamic DNS
Domeno Straipsnio rašymo metu galioja nuolaida Lietuvos valstybės atkūrimo šimtmečio proga: 8.99€ 2.5€ pirmiems metams.

Kokią bloginimo platformą pasirinkti?

Iš pradžių buvau tvirtai apsisprendęs išbandyti medium.com. Viliojo ten dažnai randamas kokybiškas turinys, paprastumas, patogi iOS aplikacija bei skaitytojų srautas. Vienintelis minusas - turinys nepriklausys man. Gundė mintis turėti savo internetinę svetainę, kurią galėčiau pats administruoti. Kadangi turiu patirties iš anksčiau dirbant su WordPress, tai buvo antras galimas pasirinkimas. Kaip minusą WordPress’e laikiau papildomą funkcionalumą, kuris ne tik kad lėtina svetainę (nereikalingos duombazės ir pan.), bet ir atima daug laiko kol pasigamini idealią svetainę su idealiausiais pluginais (neįmanoma sustoti tobulinti, tikrai). O pasekoje to nukentėtų fokusavimasis į turinio rašymą. Reikėjo priimti sprendimą. Kaip?

alt text

Google to the rescue! “Medium vs wordpress for programmer blog”

Reddit komentaruose pradėjau skaityt nuomonių išsiskyrimus. Visiškai ne keista, kad ne nuomonių išsiskyrimas mane nustebino, o pavieniai komentarai, kuriuose vienas ar kitas geek’as pasigiria naudojantis Jekyll. WTF is dat?

Jekyll

Pasiskaitęs daugiau, susidariau pirmą įspūdį kas tai yra ir ką Jekyll daro. Jekyll yra įrankis transformuojantis paprastą tekstą į statinius internetinius puslapius ar blogus. Turinys rašomas Markdown sintakse, kuri beje naudojama ir GitHub’e aprašant projektus. Pasiekus norimą rezultatą, viskas sugeneruojama į statinį internetinį puslapį. Simple as that! alt text

Pažiūrėjau pavyzdžius blogų ir svetainių sukurtų su Jekyll - patiko. Patiko, kad galima rinktis iš skirtingų temų siūlančių visiškai minimalistinius dizainus. Patiko koncentravimasis į turinį ir svarbiausia - greitis. Kadangi tai yra statinis puslapis, naršyklėje jis atvaizduojamas per html failus. Jokių bendravimų su duombazėmis, php ir pan. Ok, gana apie Jekyll, jeigu sudomins - visa informacija Jekyll svetainėje.

Taigi, apsispresta dėl platformos - we have a winner! alt text

Svetainės talpinimas (hostinimas)

Sekantis žingsnis blogo kūrime - nutarti kur talpinti svetainę. Respect’as GitHub ir jų siūlomam Github Pages.

GitHub Pages

GitHub Pages leidžia ne tik talpinti svetaines nemokamai. Nusprendus patikėti savo tūrinį GitHub Pages, nereikia įsirašyti Jekyll, jis jau yra naudojamas GitHub’o, tai reiškia, kad galima pamiršti apie svetainės talpinimą, šį klausimą išspendžia GitHub’as. Tačiau talpindamas turinį GitHub’e, grįžčiau prie to pačio minuso dėl ko atmečiau blogo rašymo medium.com platformoje galimybę - turinys nepriklausytų man.

Svetainės hostinimas Raspberry Pi

Žvilgsnis nukrypo į po spintele gulintį Raspberry Pi 3 kompiuteriuką ir supratau, kad nenoriu niekam mokėti pinigų už tokio lengvo blog’o talpinimo paslaugą. Nesitikiu, kad šis blogas sulauks srauto, kaip “Verslas nuo nulio” savo žydėjimo metu. O jeigu ir sulauktų - statinės internetinės svetainės talpinimas turėtų būti gana lengva užduotis šiam kreditinės kortelės dydžio serveriui eržilui.

Kas neturite Raspberry Pi - trečios kartos kompiuteriukas kainuoja apie 35 €, tačiau su maitinimo blokeliu, atminties kortele ir dėžute kaina gali šiek tiek išaugti. Šį mažą žvėriuką, kuris vaikystėję būtų buvęs labai labai galingas asmeninis kompiuteris, galima nusipirkti Amazon'e.

Raspberry Pi ir Apache

Kad patalpintį internetinę svetainę - reikia serverio. Nutariau ant Raspberry Pi užsukti Apache 2. Tai gal ir nebūtų privaloma, bet norėjau, kad blogas būtų HTTPS. Kodėl? alt text

Apache įrašymas nėra sudėtingas procesas. Tiesiog terminale reikia įrašyti komandą:
sudo apt-get install apache2 -y
Oficialią Apache dokumentaciją rasite čia.

Raspberry Pi ir Jekyll

Sekantis žingsnis yra Jekyll įrašymas. Techniškai nebūtina turėti Jekyll Raspberry kompiuteryje. Internetinę svetainę galima sugeneruoti ir kitame kompiuteryje ir tik vėliau gautus failus sukelti į Raspberry serveriuką. Tačiau Jekyll oficialiai yra palaikoma tik Linux ar Mac OS. Jeigu nėra galimybės generuoti svetainės su šias operacines sistemas turinčiomis mašinomis - puikiai šią užduotį atliks ir Raspberry Pi.

Detalią informaciją, kaip įrašyti Jekyll rasite čia Tačiau jeigu turite reikiamą Ruby versiją, turėtų užtekti tik paleisti komandą:
gem install jekyll

Jeigu norite kažkokio atramos taško nuo ko greičiau galėtumėte paleisti blogą ar svetainę - patariu susirasti temą. Šis blogas naudoja Lagrance temą.

Kai jau turite temą arba norite naudoti default’inę Jekyll temą - you’re good to go! Žemiau rasite pagrindines komandas su komentarais:

# Install Jekyll and Bundler gems through RubyGems
gem install jekyll bundler

# Create a new Jekyll site at ./myblog
jekyll new myblog

# Change into your new directory
cd myblog

# Build the site on the preview server
bundle exec jekyll serve

# Now browse to http://localhost:4000

Tai yra pagrindai norint paleisti svetainę ant localhost. Tai yra paprasta, tačiau vistiek siūlau pasiskaityti dokumentaciją.

Po komandos jekyll build visi svetainės failai bus sugeneruoti ir atsiras aplanke _site. Jeigu tuos failiukus perkelsite į savo serverio nuorodą, kuri yra /var/www/html/, savo naująją svetainę galėsite atsidaryti namų tinkle. Jums reikia tiesiog suvesti Raspberry IP adresą į naršyklę.

Kaip paleisti internetinę svetainę išoriniame tinkle?

Prieš atveriant Raspberry duris išoriniam pasauliui, pasirūpinkime, kad Raspberry IP adresas nesikeistų kiekvieną kartą perkrovus kompiuteriuką. Čia rasite instrukcijas kaip tai padaryti.

O dabar reikės “permesti portus” kas dar vadinama kaip “Port Forwarding”. Skamba sudėtingiau nei yra iš tikrųjų. Jums reikės prisijungti prie savo modemo per naršyklę ir suradus skiltį “Forwarding” įvesti kelis nustatymus. Pas mane yra daugiau įrašų, kuriuos naudoju kitiems tikslams. Jums reikia permesti tik portus 80 ir 443, kad svetainė veiktų ant HTTP ir HTTPS. IP adreso skiltyje įveskite savo Raspberry serverio IP adresą. alt text

Viskas, jūsų internetinė svetainė pasiekiama iš bet kur, kur yra internetas, į naršyklę suvedus jūsų išorinį IP adresą. Savo išorinį IP adresą pamatysite čia.

Domeno pririšimas

Šiuo metu jūsų svetainės pavadinimas yra švelniai tariant nuobodus. Eikite į https://www.serveriai.lt/ ir nusipirkite savo norimą domeną (jeigu jis dar neužimtas). Šiuo metu kai rašau straipsnį, galioja nuolaida Lietuvos valstybės atkūrimo šimtmečio proga ir domenas pirmus metus kainuoja tik 2.5€. Kai jau turėsite nusipirkę domeną, jį tame pačiame https://www.serveriai.lt/ puslapyje pririšite prie išorinio IP, kuris veda į jūsų svetainę. Viskas, turite veikiančia svetainę. 🚀

Papildomai (because we can)

Jeigu norite būti kieti ir paleisti svetainę ant HTTPS nemokamai, paprastas instrukcijas kaip tai padaryti rasite certbot svetainėje.

Gali būti, kad jūsų IP yra dinaminis ir kas kiek laiko keičiasi. Tokiu atveju reikės naudotis Dynamic DNS paslaugomis. Pas mane yra statinis IP adresas, kuris niekada nesikeičia, todėl nebandžiau Dynamic DNS, bet tai neturėtų būti raketų mokslas.

Conclusion

Tikiuosi šiame netrumpame ir pilname gramatinių klaidų straipsnyje radote įdomios informacijos ir galbūt patys sugalvosite susikurti svetainę bloginimui. Gali būti, kad ne viską parašiau aiškiai, galvodamas, kad tai yra per daug paprasta, o kai kur per daug išsiplėtojau. Jeigu turite kokių klausimų, pasiūlymų, o gal bandote atkartoti aprašytą procesą ir kažkas nesigauna - prašome komentuoti apačioje ar tiesiog susisiekti su manim.
✨👏 Cheers! 👏✨