Izgradnja sajta baze znanja pomoću docsify+Git+GitHub+Gitee+Alibaba Cloud servera
Izgradnja sajta baze znanja pomoću docsify+Git+GitHub+Gitee+Alibaba Cloud servera
- januara 2022. godine, sajt „Ergeov put ka naprednom Javi“ konačno je pokrenut! Prošlo je 10 dana, a sajt je, bez ikakve SEO podrške, prešao 1000 PU (poseta korisnika), što je mali prekretni trenutak.
Ako nastaviš da čitaš, uvidećeš da ovaj sajt izgleda zaista sjajno — ni najmanje ne zaostaje za devojkama iz plesne sekcije na Bilibiliju, hhh — a pored toga naučićeš i kako od nule do jedan izgraditi sopstveni sajt za učenje.
Drugovi koji često posećuju GitHub su verovatno već primetili da je „Put ka naprednom Javi“ poslednjih dana stalno na vrhu lista, i danas se i dalje nalazi na GitHub-ovoj nedeljnoj listi.

Ovo je bio i poslednji mali prijatan iznenađenje koje je Erge dobio u periodu 2021-2022.
Prvobitno je sajt „Put ka naprednom Javi“ bio hostovan na Gitee Pages, ali Gitee Pages ne dozvoljava definisanje prilagođenog domena (custom domain), što otežava drugovima da mu pristupe direktno preko adrese.
Gitee Pages: https://itwanger.gitee.io/tobebetterjavaer

Kako rešiti ovaj problem?
……
Dozvoli mi da ti prvo objasnim kako Gitee Pages pruža uslugu; kada razumeš situaciju, biće nam lako da smislimo rešenje.
Prvo, izvor kolone „Put ka naprednom Javi“ jeste open source repozitorijum na GitHub-u.
GitHub adresa: https://github.com/itwanger/toBeBetterJavaer
Pored md dokumenata i slika, unutra se nalaze i primeri koda, kao i osnovni fajlovi okruženja za docsify.

- index.html — ulazni fajl
- README.md — renderuje se kao sadržaj početne stranice
- .nojekyll — sprečava GitHub Pages da ignoriše fajlove koji počinju donom crtom
- _sidebar.md — renderuje se kao sadržaj bočne trake
- _coverpage.md — renderuje se kao naslovna stranica
docsify je čudesan generator sajtova za dokumentaciju; za razliku od GitBook-a i Hexo-a, on ne generiše statičke .html fajlove — sav rad na konverziji se dešava tokom izvršavanja (runtime). Dovoljan je jedan index.html fajl i nekoliko osnovnih konfiguracionih fajlova da bi počeo da pišeš dokumentaciju, koju zatim možeš direktno hostovati na GitHub Pages-u (štediš novac za server).
Međutim, zbog ograničenja u mrežnom pristupu GitHub-u, sinhronizovao sam kolonu „Put ka naprednom Javi“ sa Gitee-om, koristeći Gitee Pages umesto GitHub Pages-a, čime je brzina pristupa znatno veća.
Gitee adresa: https://gitee.com/itwanger/toBeBetterJavaer

Ujedno, Gitee Pages podržava i usluživanje statičkih sajtova izgrađenih pomoću Jekyll, Hugo, Hexo ili docsify. Kada se GitHub repozitorijum ažurira, dovoljno je kliknuti na ikonicu za osvežavanje na Pages-u i sinhronizacija usluživanja sajta se odmah završava.

Preko adrese koju pruža Gitee Pages može se pristupiti sajtu „Put ka naprednom Javi“.
Ali iz različitih razloga, Gitee Pages ne nudi uslugu prilagođenog domena + HTTPS; Pro verzija to podržava, ali je usled promene u poslovanju zatvorena mogućnost kupovine za individualne korisnike.

Ovo je zaista nezgodno.
Rešenje jedan
Ovo je rešenje koje prvo pada na pamet, ali i najgrublje: otpakuj lokalni repozitorijum na cloud server i postavi statički sajt pomoću Nginx-a.
Pre otpremanja na server, hajde da proverimo da li je lokalni docsify direktorijum kompletan. Zato moramo lokalno da pokrenemo docsify servis.
Uđi u lokalni direktorijum repozitorijuma „Put ka naprednom Javi“ i izvrši docsify serve da pokreneš servis.

U adresnu traku pregledača unesi http://localhost:3000:

Možeš potvrditi da sve radi kako treba.
Zatim otpremi lokalne fajlove na cloud server i postavi statički sajt pomoću Nginx-a — i to je to.
Međutim, ovakav pristup stvara jedan ozbiljan problem: između cloud servera, lokalnog okruženja i GitHub repozitorijuma ne postoji način za sinhronizaciju.

Rešenje dva
Ovo je nešto potpunije rešenje: na serveru podigni Git repozitorijum, povuci sadržaj sa GitHub-a, a zatim postavi statički sajt pomoću Nginx-a.
Na ovaj način se lako rešava problem nesinhronizovanih repozitorijuma, jer se na GitHub repo uvek šalje zvanična verzija, koja je ujedno i najnovija, pa je povlačenje sa nje najpogodnije i najpouzdanije. Lokalno okruženje služi za testiranje, recimo za dotereivanje docsify konfiguracije i slično, pa nije pogodno kao izvor sa kog cloud server povlači sadržaj.
O podešavanju Git okruženja detaljno sam pisao u poglavlju „Git“ unutar kolone „Put ka naprednom Javi“.

Ovde ću ti ukratko pokazati proces podizanja.
Korak prvi, instalacija Git-a
Na CentOS-u Git okruženje možeš instalirati direktno komandom yum install git.

Korak drugi, inicijalizacija Git-a
Izvrši git init da inicijalizuješ Git direktorijum.

Korak treći, kloniranje GitHub repozitorijuma na cloud server
Da bi GitHub verovao da si sve operacije izveo „ti lično“, pre kloniranja moraš podesiti SSH ključ. konkretne korake možeš pogledati u članku Slom! Pripravnik je haosom potopio repozitorijum tima..., u odeljku „Udaljeni repozitorijum“.
Ovde to neću ponovo demonstrirati.
Na GitHub repozitorijumu klikni na meni „Code“ i kopiraj SSH adresu.

Zatim izvrši komandu git clone i povucićeš najnoviji sadržaj sa udaljenog repozitorijuma.

Korak četvrti, postavljanje statičkog sajta pomoću Nginx-a
Nginx je veoma pogodan za postavljanje statičkih sajtova — dovoljno je da direktorijum za pristup na serveru postaviš na fajl index.html.

OK, sada kada pristupiš domenu https://javasi.dev videćeš sadržaj „Put ka naprednom Javi“.

Sa ovim rešenjem, sinhronizacija između lokalnog okruženja, GitHub-a i cloud servera je potpuno uspostavljena.

Kada na GitHub-u bude ažuriranja, sadržaj se ponovo povuče na cloud server.
Na primer, u GitHub repozitorijumu kolone „Put ka naprednom Javi“ izmenimo fajl _sidebar.md tako što dodamo znak uzvika.

Postoje dva načina za povlačenje.
Prvi: prvo izvrši git fetch, a zatim git merge.

9909f82..7f4b815 master -> origin/master ukazuje na to da je sadržaj izmenjen.
Drugi: direktno izvrši komandu git pull.

Ipak, ovo nije savršeno: kad god se na GitHub-u pojavi ažuriranje, moraš ručno da povučeš izmene na cloud server. Može li to da se automatizuje?
Možeš iskoristiti planirane zadatke BaoTa panela i dodati jedan Shell skript.

Sadržaj skripte je vrlo jednostavan, svega dve linije:
# Prelazak u git direktorijum
cd /home/www/git/toBeBetterJavaer
# Izvršavanje git komande
git pullNakon snimanja, hajde da testiramo.
U GitHub repozitorijumu kolone „Put ka naprednom Javi“ izmenimo fajl _sidebar.md tako što kineski znak uzvika zamenimo engleskim znakom uzvika.

Klikni na dugme „Izvrši“ kod planiranih zadataka.

Proveri da li se fajl na cloud serveru promenio.

Ovim smo završili ceo posao migracije sajta „Put ka naprednom Javi“ sa Gitee Pages na VPS (Virtual Private Server, virtuelni privatni server).

Na kraju, hajde da zajedno iskoristimo busuanzi da sajtu dodamo ukupan broj poseta i ukupan broj posetilaca, pa da vidimo koliko će PV (prikaza stranica) imati „Put ka naprednom Javi“ nakon mesec dana.
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<span id="busuanzi_container_site_pv">Ukupan broj poseta ovog sajta<span id="busuanzi_value_site_pv"></span>puta</span>Dve linije koda: jedna uvodi JS fajl, a druga prikazuje podatke.
Osveži stranicu i vidićeš da već radi — ja sam bio prvi.

Zatim možeš na GitHub-u/Gitee-u promeniti link za pregled sa Gitee Pages na https://javasi.dev.

Kratko sumirano: da bi se izgradio ovaj sajt, zaista se nauči mnogo praktičnih stvari, na primer:
- Nadogradnja HTTP-a na HTTPS
- Konfiguracija statičkih resursa u Nginx-u
- DNS razlaganje domena
- Generisanje SSL sertifikata
- Osnove korišćenja Git-a
- Osnove korišćenja BaoTa panela
- Osnove korišćenja Tabby terminala
- ICP prijava (registracija) domena
- I tako dalje
Ako imaš vremena, toplo preporučujem da i sam pokušaš da izgradiš jedan takav sajt, posebno ako si ranije besplatno dobio Alibaba Cloud server — tek kad sam uradiš, stvarno ćeš steći praktično iskustvo.
U 2022. godini Erge će sigurno nastaviti da marljivo stvara još kvalitetnog originalnog sadržaja i da obogaćuje „Put ka naprednom Javi“, nadajući se da će ova kolona jednog dana postati prvi izbor za sve koji uče Javu!
Ništa me ne zadržava — osim cilja; ma koliko na obali bilo ruža, hladovine i mirnih luka, ja sam čamac bez konopa.
Vidimo se u sledećem izdanju~
