• Rezultati Niso Bili Najdeni

Opozorilo ob napačno vpisanih podatkih

29 Slika 13: Blokada možnosti vpisa

30

3.8 Datotečna struktura projekta

Spodnji izpis prikazuje osnovno strukturo map, v katerih so shranjene datoteke aplikacije.

Glavnina zalednega dela aplikacije se nahaja v mapi /app, kjer najdemo večino .php datotek, krmilnikov, posrednikov, modelov in krmilnikov preverjanja pristnosti. V mapi /config se nahajajo datoteke, v katerih določamo parametre glede preverjanja pristnosti, predpomnilnika, sej itd. V mapi /database je pomembna mapa /migrations, v kateri so zabeležene vse tabele za podatkovne baze. Te lahko uporabimo, ko aplikacijo prenašamo na drugo podatkovno bazo in lahko s pomočjo migracij enostavno uvozimo celotno strukturo podatkovne baze na novo bazo. V mapi /node_modules se nahajajo vse knjižnice in vtičniki, ki sem jih uporabil za razvoj čelnega dela aplikacije. V mapi /public se nahajajo datoteke, pomembne za strežbo spletne strani. V njej se nahajajo datoteke, kot so index.php, .htaccess, web.config, favicon.ico in datoteka app.js, ki jo generira node.js in zajema celoten čelni del aplikacije. V tej mapi najdemo tudi vse slike, ki se prikazujejo na aplikaciji. Glavni del čelnega dela se nahaja v mapi /resources, kjer so vse .js in .vue datoteke in celoten CSS-sklad. V mapi /routes se nahajajo poti za API-klice in URL-poti. V mapi /src so datoteke, ki se uporabljajo za prevajanje strani. V mapi /storage se nahajajo datoteke sej, predpomnilnika in dnevniki oziroma zapisi. V mapi /vendor se nahajajo vse knjižnice in odvisnosti, uporabljanje za razvoj zalednega dela aplikacije.

31

3.9 Podatkovna baza MySQL

Pri izboru podatkovne baze sem se odločil za odprtokodno podatkovno bazo MySQL, saj sem imel zanjo že kar nekaj predznanja, ki sem ga pridobil na fakulteti. Je odprtokodna implementacija relacijske podatkovne baze, ki za delo s podatki uporablja jezik SQL. Deluje po principu odjemalec – strežnik (ang. server - client). Obstaja veliko število odjemalcev, zbirk ukazov in programskih vmesnikov za dostop do podatkovne baze. Podatkovna baza je napisana v programskem jeziku C in C++. Razvija jo Oracle Corporation. Uporabil sem verzijo MySQL 8.0.x.

Postavil sem novo podatkovno bazo, ki sem jo nastavil tako, da se v času razvoja streže na IP-naslovu 127.0.0.1 in vratih 3306. Vse parametre za dostop do baze sem definiral tudi v datoteki .env, kjer se nahajajo privzete nastavitve okolja aplikacije, kot so na primer parametri podatkovnih baz, domen, poti itd. Glavne nastavitve glede podatkovne baze MySQL lahko vidimo v spodnjem odseku kode:

1. DB_CONNECTION=mysql 2. DB_HOST=127.0.0.1 3. DB_PORT=3306

4. DB_DATABASE=Mojabaza 5. DB_USERNAME=ProgramerJoža 6. DB_PASSWORD=Gr3m0_V_hrib3

V bazi sem ustvaril nove tabele, nekatere sem pa preslikal iz obstoječe, saj sem potreboval že nekatere obstoječe podatke. Za stranke, ki želijo videti trenutno porabo, se bo baza preslikala iz obstoječe enkrat dnevno in s tem nekoliko izboljšala varnost sistema.

3.10 Upravljalnik podatkovne baze MySQL Workbench

Za urejanje baz sem uporabil enotno vizualno orodje MySQL Workbench verzije 8.0.X za Windows računalnike. To je vizualno orodje za arhitekte, razvijalce in skrbnike baz podatkov.

Ponuja modeliranje podatkov, razvoj SQL-poizvedb in celovita orodja za konfiguracijo strežnika, skrbništvo uporabnikov, varnostno kopiranje in še veliko več. Na voljo je v sistemih Windows, Linux in Mac OS X.

32

4 Postavitev in zagon aplikacije na strežniku

Ko sem z razvojem prišel do točke, v kateri je aplikacija vsebovala nabor osnovnih funkcionalnosti, sem le-te želel preizkusiti tudi na pravem strežniku in ne le na lokalni strežbi, da bi videl, če pride do morebitnih konfliktov in da le-te pravočasno odpravim. V podjetju so mi povedali, da imamo svoj strežnik, na katerem so virtualni gostitelji in da si lahko tudi zase ustvarim svojega.

4.1 Ustvarjanje novega virtualnega strežnika

V okolju VMware Workstation sem ustvaril novo virtualno napravo, kateri sem dodelil primerno procesorsko moč, ki bo zagotavljala delovanje strežnika večjemu številu uporabnikov in večjemu številu API-klicev ter poizvedb v podatkovni bazi. Določiti sem moral tudi primerno velikost SSD-diska, na katerem bo shranjen ves operacijski sistem ter podatkovna baza telekomunikacijskih storitev. Določil sem tudi primerno količino pomnilnika RAM. Dodal sem omrežno kartico s primerno zmogljivostjo, kateri sem določil statični IP-naslov, ki se bo uporabljal za dostop do spletne strani.

4.2 Namestitev operacijskega sistema

Strežniški operacijski sistem se imenuje tudi omrežni operacijski sistem. To je sistemska programska oprema, ki jo strežnik lahko zažene. Skoraj vsi strežniki lahko podpirajo različne operacijske sisteme. Gre za napredno različico operacijskega sistema, ki ima funkcije in zmožnosti, potrebne v arhitekturi odjemalca in strežnika.

Poznamo veliko vrst operacijskih sistemov za strežnike. Nekateri priljubljeni primeri strežniških operacijskih sistemov so: Red Hat Enterprise Linux, UNIX, Windows Server, Strežnik Mac OS X, CentOS, Ubuntu, Fedora itd.

Nekatere ključne značilnosti vseh strežniških operacijskih sistemov so:

- sposobnost dostopa do strežnika na ravni ukaznega vmesnika ali preko grafičnega uporabniškega vmesnika,

- izvedbe vseh ali večine procesov iz ukazov OS,

- storitve strojne, programske in omrežne konfiguracije na napredni ravni, - namestitev in postavitev poslovne aplikacije in/ali spletne aplikacije,

- ponudba osrednjega vmesnika za upravljanje uporabnikov, izvajanje varnostnih in drugih opravilnih postopkov,

- upravljanje in nadzor odjemalske računalniške in/ali operacijske opreme.

33 Po daljšem raziskovanju sem se odločil, da bom na strežniku gnal odprtokodni operacijski sistem CentOS Stream (Linux), saj je zelo razširjen in priljubljen in prejema pogoste posodobitve. CentOS (Community Enterprise Operating System) uporabnikom omogoča, da v celoti izkoristijo odprtokodne inovacije v bolj stabilnem in predvidljivem ekosistemu Linuxa.

Lahko bi rekel, da je CentOS Stream odprtokodna verzija Redhat sistema, vendar je le-ta brezplačen in ima veliko bolj pogoste posodobitve kot sistem Radhat. CentOS je različica operacijskega sistema Linux, ki se razvija že od leta 2004. Namestil sem najnovejšo verzijo CentOS Stream 8.

4.3 Namestitev programskih paketov

Po uspešni namestitvi operacijskega sistema sem začel z nameščanjem potrebnih programskih paketov za pravilno delovanje aplikacije.

Začel sem z namestitvijo različnih repozitorijev, v katerih se nahajajo potrebni programski paketi.

Na začetku sem namestil repozitorij EPEL (Enterprise Linux Add-ons), saj sem potreboval določene programske pakete, katerih CentOS Stream primarno ne vsebuje. EPEL so posebna interesna skupina Fedore, ki ustvarja, vzdržuje in upravlja visokokakovosten nabor dodatkov za Enterprise Linux, vključno z Red Hat Enterprise Linux (RHEL), CentOS, Scientific Linux (SL) in Oracle Linux (OL).

Paketi EPEL običajno temeljijo na njihovih primerjavah Fedore in nikoli ne bodo v nasprotju s paketi v osnovni distribuciji Enterprise Linux. EPEL uporablja skoraj enako infrastrukturo kot Fedora, vključno s sistemom gradnje, primerkom bugzilla, upraviteljem posodobitev, zrcalnim upravljalnikom in še več. [10]

Namestitev:

1. dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Za delovanje aplikacije sem moral namestiti tudi programski paket PHP. V ta namen sem na strežnik namestil repozitorij REMI, ki uporabnikom Fedore in Enterprise Linuxa (RHEL, CentOS Stream, Oracle, Scientific Linux, ...) ponuja najnovejše različice PHP-jevega kompleta z vsemi funkcijami in nekatere druge programe.

2. dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Za lažji prenos in namestitev večjih programskih paketov sem namestil tudi orodje GNU WGET.

GNU Wget je brezplačen programski paket za pridobivanje datotek z uporabo najpogosteje uporabljenih internetnih protokolov HTTP, HTTPS, FTP in FTPS. GNU WGET ni interaktivno

34

orodje ukazne vrstice, zato ga lahko enostavno prikličemo iz skript ter terminalov brez podpore X-Windows. [https://www.gnu.org/software/wget/]

GNU Wget ima veliko funkcij za lažje pridobivanje velikih datotek ali zrcaljenje celotnih spletnih mest ali strani s pomočjo »File Transfer Protocol« FTP.

Značilnosti GNU Wget so, da:

- lahko nadaljuje prekinjene prenose z uporabo REST in RANGE,

- lahko uporablja nadomestne znake za imena datotek in rekurzivno zrcali imenike, - podpira datoteke s sporočili, ki temeljijo na NLS »oN-Line System«, za veliko različnih jezikov,

- po želji pretvori absolutne povezave v prenesenih dokumentih v relativne, tako da se lahko preneseni dokumenti povezujejo lokalno,

- deluje v večini operacijskih sistemov, podobnih Unixu, pa tudi v operacijskem sistemu Microsoft Windows,

- podpira strežnike HTTP, - podpira piškotke HTTP,

- podpira trajne povezave HTTP, - brez nadzora deluje v ozadju,

- uporablja lokalne časovne žige datotek, da ugotovi, ali je treba znova prenesti dokumente.

3. dnf -y install wget

Kot zadnji repozitorij sem namestil Yum-utils. Yum-utils je zbirka orodij in programov za upravljanje yum-repozitorijev, namestitev paketov za odpravljanje napak, nameščanje izvornih paketov, pridobivanje razširjenih informacij iz repozitorijev in upravljanje/adminstracijo nameščenih paketov.

4. dnf -y install yum-utils

Ker moja aplikacija na lokalni napravi uporablja programski paket PHP, sem ta paket za pravilno delovanje aplikacije moral namestiti tudi na strežniku. Da ne bi prišlo do neželenih napak pri delovanju na strežniku, sem namestil isto verzijo paketa kakor na lokalnem računalniku.

5. dnf module install php:remi-8.0 -y 6. dnf install php -y

Za delovanje svoje aplikacije sem moral namestiti tudi določene PHP-knjižnice in odvisnosti, ki jih lahko najdemo v mapi /vendor. V ta namen sem ravno tako kot na lokalnem računalniku na strežnik naložil paketni upravljalec Composer. Composer mi omogoča namestitev vseh potrebnih paketov za pravilno delovanje ogrodja Laravel. S pomočjo Composerja lahko z

35 enostavnim ukazom posodobim vse uporabljene PHP-pakete, ki jih imam naložene na strežniku.

7. wget https://getcomposer.org/installer -O composer-installer.php

8. php composer-installer.php --filename=composer --install-dir=/usr/local/bin

Ker je moja aplikacija razvita v okolju NodeJS, sem tudi na strežnik naložil NodeJS okolje, ki mi omogoča izgradnjo aplikacije. Poleg NodeJS sem naložil tudi NPM-paketni upravljalec, ki mi tako kot na lokalni strežbi omogoča posodabljanje knjižnic in odvisnosti aplikacije.

1. dnf install -y gcc-c++ make 2. dnf install nodejs

4.4 Požarni zid

Preden sem strežnik odprl svetovnemu spletu, sem dostop do strežnika določil tako, da v času razvoja do njega lahko dostopam le iz določenih IP-naslovov. V ta namen sem nastavil požarni zid. Na lokaciji, kjer razvijam aplikacijo, imam od ponudnika internetnih storitev določen statični IP-naslov, ki se mi ne spreminja. Ustvaril sem skupino IP-naslovov z imenom »Admini«, v katero sem dodal svoj IP-naslov. V skupino »Admini« sem dodal še vsa vrata, ki jih strežnik uporablja oziroma tista, do katerih želim imeti dostop.

1. firewall-cmd --zone=Admini --permanent --add-service=ssh 2. firewall-cmd --zone=Admini --permanent --add-service=http 3. firewall-cmd --zone=Admini --permanent --add-service=https 4. firewall-cmd --zone=Admini --permanent --add-service=cockpit

Slika 14: Požarni zid in odprta vrata

36

4.5 Skrbniški strežnik/grafični vmesnik Cockpit

Na tej točki se je na novo nastavljenem strežniku odvijalo že kar nekaj storitev. Da bi sistem lažje nadzoroval in imel boljši vpogled v delovanje in morebitne napake, sem v sistemu omogočil tako imenovan Cockpit, ki je spletni grafični vmesnik za administratorje strežnikov.

1. systemctl enable --now cockpit.socket

Cockpit je spletni skrbniški strežnik, ki nam omogoča, da ne samo na hitro vidimo zmogljivosti, temveč tudi zaženemo in zaustavimo storitve, pridobimo dostop do strežniškega terminala in še več.

Do grafičnega vmesnika lahko dostopamo preko povezave https://mojastran.si:9090 . Za dostop do vmesnika je potreben vpis z dostopnimi podatki do strežnika. Na vmesniku najdemo zelo nazoren prikaz porabe strojne opreme ter zgodovino obremenjenosti. Iz grafičnih prikazov lahko odčitamo tudi trenutke, ko je bila na strežniku večja količina prometa oziroma večja obremenitev.

Slika 15: Cockpit - prikaz nadzorne plošče

Vmesnik nam ponuja tudi vpogled v številne dnevnike na enem mestu, kar močno olajša razhroščevanje napak.

Za nekatere napake Cockpit samodejno predlaga možno rešitev.

37 Vmesnik vsebuje tudi zelo uporaben zavihek z diagnozo storitev »services«, v katerem lahko vidimo, katere storitve so trenutno aktivne, in nam omogoča, da jih enostavno in selektivno vklopimo, izklopimo ali ponovno zaženemo. Če katera od storitev ne deluje ali pa ima napako, nam tudi to nazorno javi in ob znani napaki hitro predlaga rešitev.

Slika 16: Prikaz storitev strežnika

38

4.6 Spletni strežnik Apache

Za strežbo aplikacije v svetovni splet (WWW) sem potreboval tudi HTTP-strežnik. Pet vodilnih spletnih strežnikov na tržišču je:

- strežnik Apache,

- Microsoftove internetne informacijske storitve, - Lighttpd,

- spletni strežnik Nginx,

- spletni strežnik Sun Java System. [11]

Odločil sem se za Apache-http-server, saj je odprtokoden, kar pomeni, da je na voljo brezplačno in je do njega enostavno dostopati prek spletnih skupnosti. Tako je v primeru težave ali napake na voljo veliko spletne podpore. Odprtokodnost omogoča tudi spreminjanje strežnika v skladu z lastnimi zahtevami. Najnovejša različica Apache-ja je veliko bolj prilagodljiva kot prejšnje in z lahkoto obravnava več hkratnih zahtev. Strežnik Apache HTTP je bil predstavljen leta 1995 in je še vedno najbolj priljubljen spletni strežnik na internetu. Na sistemu CentOS Stream najdemo Apache strežnik pod imenom httpd.

1. dnf install httpd httpd-tools 2. systemctl enable httpd.service 3. systemctl start httpd.service

V tem trenutku je strežnik začel streči na vratih 80-http. Če v brskalniku poskušamo dostopati do spletne strani http://mojastran.si , vidimo uvodno stran Apache http-strežnika. Ugotovimo, da smo na spletno mesto prišli preko http vrat 80 in ne preko https, saj stran še ne vsebuje potrebnih SSL-certifikatov (»Secure Sockets Layer »). Če želimo do strani dostopati z naprav, ki imajo IP-naslove, ki se ne nahajajo na seznamu znotraj požarnega zidu, spletnega mesta ne bomo videli, saj nam požarni zid onemogoča vpogled.

39 Slika 17: Testna stran Apache

40

Registracija IP-naslova na DNS-strežnik

Do sedaj sem na spletni naslov dostopal preko IP-naslova spletnega mesta (http://29.1.199.93/). Da bi stranke in uporabniki lažje dostopali do spletne strani, je treba spletno mesto registrirati v sistem domenskih imen DNS.

DNS je hierarhično razdeljeno poimenovanje za storitve kateregakoli vira, ki je povezan z svetovnim internetom oziroma z osebnim omrežjem TCP/IP. Povezuje različne informacije domenskih imen in tehnične funkcionalnosti. V splošnem DNS-sistem skrbi za pretvorbo IP-zapisa v spletni naslov in komunikacijo med strežniki in uporabniki. Skrbi za pretvorbo naslovnih zapisov, saj so zapisi v omrežju zapisani v IP-obliki (npr.: 152.89.234.10), DNS- strežnik pa te zapise pretvori v uporabniku prijaznejši zapis (npr.: mojaaplikacija.si) in se jih da v takšni obliki lažje zapomniti in so seveda tudi lažji in enostavnejši za samo upravljanje.

Podjetje Softnet med svojimi storitvami nudi tudi storitve DNS in je uradno registriran registrator domen. Domene za moje spletno mesto ni bilo treba na novo registrirati, dodala se je le poddomena. Ko uporabnik želi dostopati do novega spletnega mesta, DNS-uporabnika usmeri na glavno domeno, ta ga pa preusmeri na novo nastavljeno poddomeno.

4.7 Sistem Git

Na tej točki lahko vidimo, da strežnik pravilno streže spletno aplikacijo in uporabniki lahko dostopajo do nje. Sedaj je treba na strežnik prenesti navedeno aplikacijo. Za prenos lahko uporabimo več načinov. Uporabimo lahko čisto osnovni SSH-odjemalec za oddaljeni dostop OpenSSH: SSH File Transfer. Lahko uporabimo WinSCP ali pa Filezilla, ki sta oba odprtokodna in brezplačna odjemalca, ki podpirata FTP, SFTP, FTPS, SSH. Za prenos uporabimo protokol SFTP. SFTP je zanesljiv in učinkovit prenos datotek v velikem obsegu. Je alternativa FTP-ju, ki omogoča tudi prenos datotek, vendar postopku doda raven varnosti. SFTP za zaščito podatkov med prenosom uporablja šifriranje SSH.

V opisanem projektu sem se za prenos in nadzor projekta odločil za uporabo sistema Git, saj sem opisano aplikacijo razvijal s pomočjo uporabe GitLaba, ki mi omogoča boljši vpogled v aplikacijo in njene verzije. Git je hiter, razširljiv, porazdeljen sistem nadzora revizij. Je brezplačen in odprtokodni sistem za distribucijo različic, zasnovan za hitro in učinkovito obdelavo vsega, od majhnih do zelo velikih projektov. Na strežnik sem torej namestil Git, ki za prenos datotek uporablja protokol HTTP ali SSH. [12]

1. dnf install git -y

41 Da bi na strežniku naredil kopijo aplikacije z uporabo HTTP-protokola, moram v ukazno vrstico vnesti le naslov repozitorija in avtentikacijske podatke.

2. git clone https://gitlab.com/DomenO/mojaaplikacija.git

4.8 Podatkovna baza MariaDB

Da bo aplikacija delovala pravilno, moramo poskrbeti, da se bo na strežniku nahajala tudi podatkovna baza. Podatkovno bazo bi lahko imel tudi na drugem strežniku, na katerega bi se aplikacija povezala, vendar sem se v tem primeru odločil za novo bazo, saj bom zaradi večje varnosti delal preslikave nekaterih obstoječih tabel na drugih lokacijah. Čeprav sem na lokalni strežbi uporabljal podatkovno bazo MySQL, sem se pri nameščanju podatkovne baze na strežnik odločil za MariaDB, saj vse tabele, ki jih preslikujem, že delujejo na MariaDB in se s tem želim izogniti morebitnim konfliktom.

1. dnf install mariadb-server 2. systemctl enable mariadb.service

Da naredimo podatkovno bazo varno in da uporabniku dodelimo dostopne podatke, v ukazni vrstici poženemo spodnji ukaz, ki nas bo vodil po nastavitvenih korakih.

3. mysql_secure_installation

MariaDB je ena izmed najbolj priljubljenih odprtokodnih relacijskih zbirk podatkov. Izdelali so jo prvotni razvijalci MySQL in zagotovili, da bo ostala odprtokodna. Je del večine ponudb storitev v oblaku in privzeta podatkovna baza pri večini distribucij Linuxa.

Temelji na vrednotah učinkovitosti, stabilnosti in odprtosti, MariaDB Foundation pa zagotavlja, da bodo prispevki sprejeti na tehnični ravni. Najnovejša nova funkcionalnost vključuje napredno združevanje z Galera Cluster 4, združljivostne funkcije z Oracle Database in začasnimi podatkovnimi tabelami, ki omogočajo poizvedovanje po podatkih, kakršni so bili na kateri koli točki v preteklosti. [13]

42

4.9 Podatkovni urejevalnik PhpMyAdmin

Z namenom, da bi lažje dostopal in urejal podatkovno bazo na strežniku, sem se odločil, da namestim tudi grafični vmesnik podatkovnih baz. Na voljo sem imel različna programska orodja, kot so HeidiSQL, TablePlus, PhpMyAdmin, MySQL Workbench, DBeaver, Sequel Pro itd.

Odločil sem se za PhpMyAdmin, saj vsebuje pregleden grafični vmesnik, do katerega lahko enostavno dostopamo kar preko spletnega brskalnika.

PhpMyAdmin je brezplačno programsko orodje, napisano v jeziku PHP, namenjeno upravljanju MySQL prek spleta. Podpira širok spekter operacij na MySQL in MariaDB.

Za lažjo uporabo širokemu krogu ljudi je programski paket poglobljeno dokumentiran in preveden v 72 jezikov. PhpMyAdmin je zrel projekt s stabilno in prilagodljivo osnovo kode.

Projekt je del organizacije Software Freedom Conservancy. SFC je neprofitna organizacija, ki pomaga promovirati, izboljšati, razviti in braniti projekte Free, Libre in Open Source Software (FLOSS). [14]

Namestitev programskega orodja zahteva nekoliko več korakov. Najprej s pomočjo programskega paketa Wget prenesemo PhpMyAdmin arhiv. Arhiv arhiviramo in vsebino prenesemo na končno lokacijo.

1. wget https://files.phpmyadmin.net/phpMyAdmin/4.9.4/phpMyAdmin-4.9.4-all-languages.zip 2. unzip phpMyAdmin-4.9.4-all-languages.zip

3. mv phpMyAdmin-4.9.4-all-languages.zip /usr/share/phpmyadmin

Da bi do grafičnega vmesnika dostopali preko brskalnika, moramo v datoteki

/etc/httpd/conf.d/phpmyadmin.conf spremeniti še nastavitve, ki spletnemu strežniku Apache omogočajo dostop do PhpMyAdmin.

1. Alias /phpmyadmin /usr/share/phpmyad-min

2. <Directory /usr/share/phpmyadmin/>

3. AddDefaultCharset UTF-8 4. <IfModule mod_authz_core.c>

5. # Apache 2.4 6. <RequireAny>

7. Require all granted

7. Require all granted