Danas, za izradu web aplikacije nije dovoljno samo znati je razviti. Važan aspekt je postavljanje alata za implementaciju aplikacije, praćenje, te upravljanje i administracija okruženja u kojem ona radi. Era ručne implementacije odlazi u zaborav, čak i za male projekte, alati za automatizaciju mogu donijeti značajne koristi. Tijekom 'ručne' implementacije, često možemo zaboraviti prenijeti nešto, uzeti u obzir neki detalj, pokrenuti zaborani test; ovaj popis može trajati prilično dugo.
Ovaj članak može pomoći onima koji tek upoznaju osnove izrade web aplikacija i žele malo razjasniti osnovne termine i konvencije.
Dakle, izgradnju aplikacija možemo podijeliti na 2 dijela: ono što se odnosi na kod aplikacije i ono što se odnosi na okruženje u kojem se taj kod izvršava. Kod aplikacije također se dijeli na serverski (onaj koji se izvršava na serveru, često: poslovna logika, autorizacija, pohrana podataka itd.) i na klijentski (onaj koji se izvršava na korisničkom računalu: često sučelje i s njim povezana logika).
Počnimo, dakle, s okruženjem.
Osnova za rad bilo kojeg koda, sustava, softvera je operacijski sustav, stoga ćemo u nastavku razmotriti najpopularnije sustave prisutne na tržištu hosting usluga i dati im kratak opis:
Windows Server – taj poznati Windows, ali u serverskoj verziji. Neki od funkcionalnosti dostupnih u klijentskoj (običnoj) verziji Windows nisu prisutni ovdje, poput nekih usluga za prikupljanje statističkih podataka i sličnog softvera, ali su tu alati za administraciju mreže i osnovni softver za implementaciju poslužitelja (web, ftp, …). U cjelini, Windows Server izgleda kao obični Windows, kreće se kao obični Windows, no košta 2 puta više od svog običnog kolege. Međutim, uzimajući u obzir da ćete implementaciju aplikacije vjerojatno raditi na dedicated/virtualnom serveru, konačna cijena za vas može porasti, ali ne kritično. Budući da platforma Windows zauzima dominantno mjesto na tržištu korisničkih OS-ova, njena serverska verzija bit će najprihvatljivija za većinu korisnika.
Unix-slični sustav. Tradicionalni rad u tim sustavima ne uključuje uobičajeni grafički sučelje, nudeći korisniku samo konzolu kao element za upravljanje. Za neiskusnog korisnika rad u takvom formatu može predstavljati izazov, a samo izlazak iz dovoljno popularnog tekstualnog urednika Vim, pitanje vezano uz to je tijekom 6 godina prikupilo više od 1,8 milijuna pregleda. Glavni distribucijski sustavi (izdanje) ove obitelji su: Debian — popularna distribucija, verzije paketa u njemu su uglavnom usmjerene na LTS (Long Term Support – podrška tijekom dugog vremena), što se očituje u prilično velikoj pouzdanosti i stabilnosti sustava i paketa; Ubuntu – sadrži distribucije svih paketa u njihovim najnovijim verzijama, što može utjecati na stabilnost, međutim omogućuje korištenje funkcionalnosti isporučene s novim verzijama; Red Hat Enterprise Linux – OS, pozicionirana za komercijalnu upotrebu, je plaćena, no uključuje podršku od strane dobavljača softvera, neke proprietarne pakete i pakete upravljačkih programa; CentOS – opensource varijacija Red Hat Enterprise Linux, razlikuje se po nedostatku proprietarnih paketa i podrške.
Za one koji tek uče osnove ovog područja, moja pretpostavka su sustavi Windows Server, ili Ubuntu. Ako gledate Windows, to je prije svega navika sustava, Ubuntu – veća tolerantnost prema ažuriranjima, a s druge strane, na primjer, manje problema prilikom pokretanja projekata na tehnologijama koje zahtijevaju nove verzije.
Dakle, nakon što smo odabrali OS, pređimo na skup alata koji omogućuju implementaciju (instalaciju), ažuriranje i praćenje stanja aplikacije ili njezinih dijelova na poslužitelju.
Sljedeće važno rješenje će biti – smještaj vaše aplikacije, i poslužitelja za nju. Trenutno, najčešće su tri opcije:
- Hosting (držanje) poslužitelja kod sebe, samostalno – najjeftinija opcija, ali ćete morati zatražiti od davatelja statički IP, kako bi vaša adresa ostala nepromijenjena tijekom vremena.
- Iznajmljivanje Dediciranog Poslužitelja (VDS) – i samostalno upravljanje njime i skaliranje opterećenja.
- Platite (često uz mogućnost besplatnog probnog razdoblja funkcionalnosti platforme) pretplatu na nekom oblaku hosting usluga, gdje je model plaćanja za korištene resurse prilično rasprostranjen. Najistaknutiji predstavnici ovog pravca uključuju: Amazon AWS (nude besplatnu godinu dana korištenja usluga, ali s mjesečnim limitom), Google Cloud (nude 300$ na računu, koji se može potrošiti tijekom godine na usluge oblaka hostinga), Yandex.Oblak (nude 4000 kuna za 2 mjeseca), Microsoft Azure (nude besplatan pristup popularnim uslugama na godinu dana, + 12 500 kuna na bilo koje usluge tijekom jednog mjeseca). Tako se može isprobati bilo koji od ovih pružatelja, ne trošeći ni lipu, ali dobivajući okvirno mišljenje o kvaliteti i razini pružanja usluga.
Ovisno o odabranom putu, kasnije će se promijeniti jedino činjenica tko snosi odgovornost za određeno područje administracije. Ako hostate sami, trebate razumjeti da su sve prekide u napajanju, internetu, samom serveru, softveru koji je na njemu instaliran – sve to potpuno na vašim leđima. Međutim, za učenje i testiranje, to je više nego dovoljno.
Ako pak nemate dodatni stroj koji može odigrati ulogu servera, onda ćete htjeti iskoristiti drugi ili treći put. Drugi slučaj je identičan prvom, s tom razlikom što prebacujete odgovornost za dostupnost servera i njegovih resursa na leđa hostera. Administracija servera i softvera još uvijek je pod vašom kontrolom.
I konačno, opcija iznajmljivanja resursa od oblaku pružatelja usluga. Ovdje možete postaviti automatizirano upravljanje praktično bilo čim, ne previše ulazeći u tehničke pojedinosti. Osim toga, umjesto jednog stroja, možete imati nekoliko paralelno pokrenutih instanci koje na primjer mogu odgovarati za različite dijelove aplikacije, a da se pritom ne razlikuju mnogo po cijeni od posjedovanja namjenskog servera. Također, tu su dostupni alati za orkestriranje, kontejnerizaciju, automatsko implementiranje, kontinuiranu integraciju i mnogo drugih! Neke od ovih stvari razmotrit ćemo u nastavku.
U općem smislu, infrastruktura poslužitelja izgleda ovako: imamo takozvani „orkestrator“ („orkestracija“ – proces upravljanja više instanci poslužitelja), koji upravlja promjenama okruženja na instanci poslužitelja, kontejner virtualizacije (opcionalan, ali često korišten), koji omogućava razdvajanje aplikacije na izolirane logičke slojeve, i softver za Kontinuiranu Integraciju – koji omogućava ažuriranje postavljenog koda pomoću „skripti“.
Dakle, orkestracija vam omogućava da vidite statuse poslužitelja, provodite „implementaciju“ ili „povrat“ ažuriranja okruženja poslužitelja i tako dalje. U početku vas taj aspekt vjerojatno neće mnogo zanimati, s obzirom da je za orkestriranje potrebno nekoliko poslužitelja (može i jedan, ali zašto?), a da bi bilo nekoliko poslužitelja, potrebno je imati potrebu za njima. Od alata u ovoj domeni, najpoznatiji je Kubernetes, razvijen Google.
Sljedeći korak – virtualizacija na razini OS-a. Trenutno je široko prihvaćeno poimanje „dockerizacije“, koje je proizašlo iz alata Docker, koji pruža funkcionalnosti izoliranih kontejnera koji se pokreću unutar istog operativnog sustava. Što to znači: unutar svakog od tih kontejnera moguće je pokrenuti aplikaciju ili čak skup aplikacija, koje će vjerovati da su jedine koje postoje u cijelom OS-u, čak ne sumnjajući u postojanje drugih na tom uređaju. Ova funkcija je vrlo korisna za pokretanje istih aplikacija različitih verzija, ili jednostavno sukobljenih aplikacija, kao i za dijeljenje dijelova aplikacije u slojeve. Ova maska slojeva se može snimiti u sliku, koja se može koristiti, na primjer, za implementaciju aplikacije. Drugim riječima, instaliranjem ove slike i raspoređivanjem kontejnera koje ona sadrži, dobivate spremno okruženje za pokretanje vaše aplikacije! U ranim fazama možete koristiti ovaj alat kako u upoznavajuće svrhe, tako i za ostvarivanje stvarne korisnosti, raspoređujući logiku aplikacije u različite slojeve. Međutim, valja napomenuti da dockerizacija nije potrebna svima, i ne uvijek. Dockerizacija je opravdana kada je aplikacija 'fragmentirana', podijeljena na manje dijelove, od kojih svaki odgovara za svoju zadaću, tzv. 'mikroservisna arhitektura'.
Osim toga, osim pružanja okruženja, potrebno je osigurati i pravilnu implementaciju aplikacije, koja uključuje sve moguće transformacije koda, instalacije knjižnica i paketa povezanih s aplikacijom, pokretanje testova, obavijesti o tim operacijama i tako dalje. Ovdje trebamo obratiti pažnju na pojam 'Kontinuirana Integracija' (CI – Kontinuirana Integracija). Glavni alati u ovom području trenutno su Jenkins (CI alat napisan u Javi, može se činiti malo složenim na početku), Travis CI (napisan u Rubyju, subjektivno, nešto jednostavniji od Jenkins-a, ali još uvijek su potrebna neka znanja o postavljanju implementacije), (napisan uRubyju i Golu Gitlab CI . Dakle, nakon govoriti o okruženju u kojem će vaša aplikacija raditi, konačno je došlo vrijeme da pogledamo koje alate nam nudi suvremeni svijet za izradu tih aplikacija. Započnimo s osnovama:).
Dakle, nakon što smo razgovarali o okruženju u kojem će se vaša aplikacija pokretati, konačno je došlo vrijeme da pogledamo koje alate suvremeni svijet nudi za izradu tih aplikacija.
Započnimo s osnovama: Backend smo planirali napraviti na Linuxu. Backend komunicira s bazom podataka, učitava potrebne popise privilegija i zatim, ovisno o privilegijama koje ima autorizirani korisnik, osigurava pristup za potpisivanje financijskih dokumenata i slanje na izvršenje, ili generiranje nekog izvještaja. (backend) – server-side. The choice of language, set of core functions, and predefined structure (framework) is primarily defined by personal preferences, but it is worth mentioning for consideration (the author's opinion on languages is quite subjective, albeit with a claim to an unbiased description):
- Python – a language quite friendly for inexperienced users, forgiving some mistakes, but can also be quite strict with developers to prevent them from making serious errors. It is already a well-established and meaningful programming language that emerged in 1991.
- Go – a language from Google, also quite friendly and convenient, easy to compile and generate an executable file for any platform. Can be simple and pleasant, or complex and serious. Fresh and young, it appeared relatively recently, in 2009.
- Rust – a bit older than its predecessor, released in 2006, still relatively young compared to its peers. Oriented towards more experienced developers, although it still attempts to handle many low-level tasks on behalf of the programmer.
- Java – a veteran of commercial development, appearing in 1995, it is one of the most frequently used languages for developing enterprise applications currently. Its fundamental concepts and complex runtime environment setup can be quite challenging for newcomers.
- ASP.net – a platform for application development, released by Microsoft. The functionality is mainly written in C# (pronounced C Sharp), which emerged in 2000. Its complexity is comparable to a level between Java and Rust.
- PHP – originally used for preprocessing HTML, currently maintains absolute leadership in the language market, although there is a noticeable trend towards a decline in usage. Characterized by a low entry threshold, simplicity in coding, but at the same time, when developing sufficiently large applications, the language's functionality may prove inadequate.
And the final part of our application – the most tangible for the user – Frontend (frontend) – is the face of your application, this is the part that the user interacts with directly.
Ne ulazeći u detalje, moderni frontend se oslanja na tri stuba, okvira (i manje okvira), za izradu korisničkih sučelja. Također, tri najpopularnija su:
- ReactJS – nije okvir, već knjižnica. U suštini, od ponosnog naziva okvir razlikuje se samo po nedostatku nekih funkcija "iz kutije" i potrebom za ručnom instalacijom. Dakle, postoji nekoliko varijacija "pripreme" ove knjižnice, koje formiraju svojevrsne okvire. Za početnike može biti malo teže, zbog nekih osnovnih principa i dovoljno agresivne konfiguracije okruženja za izgradnju. Ipak, za brz početak možete koristiti paket "create-react-app".
- VueJS – okvir za izradu korisničkih sučelja. Od ove trojice s pravom nosi titulu najpristupačnijeg okvira, ulazna barijera za razvoj u Vue-u je niža nego kod ostalih navedenih kolega. Osim toga, među njima je najmlađi.
- Angular – smatra se najtežim od navedenih okvira, jedini zahtijeva prisutnost TypeScript (proširenje jezika Javascript). Često se koristi za izradu velikih korporativnih aplikacija.
Sažimajući prethodno napisano, može se zaključiti da se sada pokretanje aplikacije drastično razlikuje od onoga kako je taj proces izgledao ranije. Ipak, nitko ne sprječava provesti "deploy" na stari način. No, isplati li se malo ušteđenog vremena na početku – ogromna količina zamki na koje će naići programer koji odabere ovaj put? Smatram da je odgovor "ne". Potrošivši malo više vremena na upoznavanje s tim alatima (a više ni ne treba, jer trebate shvatiti jesu li vam potrebni u trenutnom projektu ili ne), moći ćete to nadoknaditi, znatno smanjujući, na primjer, slučajeve fantomske greške ovisne o okruženju koje se manifestiraju samo na produkcijskom serveru, noćne analize što je dovelo do pada servera i zašto se ne pokreće, i mnogo drugog.
Izvor: habr.com
