#25 — Publikujemy aplikację w internecie, cz. 2

By 15 May 2015 Kurs Javy

Dzisi­aj kon­tynu­ac­ja lekcji o uruchami­a­n­iu aplikacji, skon­fig­u­ru­je­my bazę danych i podep­niemy wybraną przez nas domenę. Gotowa? 

Lekcja

Drugą część tej lekcji zaczniemy od bazy danych — ten krok jest niezbęd­ny, później prze­jdziemy do umieszcza­nia naszej aplikacji w sieci a na koniec nauczymy się kupować wybrane dome­ny i podłączać je do naszej aplikacji.

Konfigurujemy bazę danych

Pier­wszym naszym krok­iem w tej lekcji będzie kon­fig­u­rac­ja bazy danych. Uży­je­my do tego bazy danych MySQL hos­towanej w usłudze Ama­zon RDS.

Tworzenie bazy danych w Amazon RDS

Najpierw logu­je­my się do kon­soli Ama­zon AWS pod adresem console.aws.amazon.com .

Screenshot_1

Z narzędzi wybier­amy RDS — Rela­tion­al data­base service


Screenshot_3

Jeśli nie korzys­tałaś z Ama­zon RDS wcześniej, zobaczysz takie ekran — wybierz opcję ‘Get start­ed now’


Możesz też zobaczyć taki ekran - w takim wypadku wybierz opcję 'Launch DB instance'

Możesz też zobaczyć taki ekran — w takim wypad­ku wybierz opcję ‘Launch a DB instance’


Screenshot_4

Tutaj mamy możli­wość wybra­nia tzw. sil­ni­ka bazy danych — w naszym przy­pad­ku będzie to MySQL


Screenshot_5

W kole­jnym kroku wybier­amy ‘No’ . Pytanie doty­czy tego, czy chce­my wykony­wać kopię naszej bazy danych na żywo do innych (fizy­cznie) częś­ci ser­werowni. Ma to uza­sad­nie­nie w przy­pad­ku ważnych sys­temów (jeśli wydarzy się awaria lub katas­tro­fa, są więk­sze szanse, że nasz sys­tem nadal będzie dzi­ałał), ale na nasze potrze­by wystar­czy poje­dyncza insta­lac­ja. Uwa­ga: pozostaw­ie­nie domyśl­nej opcji spowodu­je, że będą nal­iczane opłaty ponieważ nie jest to objęte bezpłat­nym pakietem.


Screenshot_7

Ten krok pozwala nam skon­fig­urować para­me­try naszej bazy danych. Z najważniejszych ele­men­tów, wybier­amy db.t2.micro jako typ instancji. Wybier­amy także nazwę, pod jaką będzie widocz­na nasza baza danych (jest ona waz­na tylko dla nas), nazwę użytkown­i­ka — admin­is­tra­to­ra oraz jego hasło. Pozostałe opc­je wybier­amy tak jak na grafice (chy­ba, że dostęp­na będzie nowsza wer­s­ja — wtedy wybier­amy najnowszą).


Ten krok pozwala nam wybrać szczegółowe ustawienia - konfigurujemy je tak jak na obrazku powyżej.

Ten krok pozwala nam wybrać szczegółowe ustaw­ienia — kon­fig­u­ru­je­my je tak jak na obrazku powyżej.


Warto zwrócić uwagę na sekcje na dole - pierwsza określa jak długo będzie backupowana nasza baza danych i kiedy będzie to robione. Druga grupa opcji pozwala określić czy chcemy automatycznie dokonywać drobnych aktualizacji.

Warto zwró­cić uwagę na sekc­je na dole — pier­wsza określa jak dłu­go będzie back­upowana nasza baza danych i kiedy będzie to robione. Dru­ga gru­pa opcji pozwala określić czy chce­my automaty­cznie dokony­wać drob­nych aktualizacji.


Utworzyliśmy właśnie naszą bazę danych. Teraz musimy poczekać ok. 15 minut zanim się uruchomi. W międzyczasie skonfigurujemy prawa dostepu do naszej bazy danych.

Utworzyliśmy właśnie naszą bazę danych. Ter­az musimy poczekać ok. 15 min­ut zan­im się uru­cho­mi. W między­cza­sie skon­fig­u­ru­je­my prawa dostepu do naszej bazy danych.


W tym celu w oknie głównym konsoli wybieramy narzędzie 'VPC' (Virtual Private Cloud), a w nim opcję security groups. Wybieramy tą, która została utworzona (będzie miała podobną nazwę co zaznaczona na grafice)

W tym celu w oknie głównym kon­soli wybier­amy narzędzie ‘VPC’ (Vir­tu­al Pri­vate Cloud), a w nim opcję secu­ri­ty groups. Wybier­amy tą, która została utwor­zona (będzie miała podob­ną nazwę co zaz­nac­zona na grafice)


W panelu, który pojawi się na dole wybieramy kartę 'Inbound', następnie 'Add rule' i uzupełniamy wg grafiki. W ten sposób umożliwiasz połaczenie się z Twoją bazą danych dowolnemu komputerowi (oczywiście nadal będzie potrzebny login oraz hasło).

W pan­elu, który pojawi się na dole wybier­amy kartę ‘Inbound’, następ­nie ‘Add rule’ i uzu­peł­ni­amy wg grafi­ki. W ten sposób umożli­wiasz połacze­nie się z Two­ją bazą danych dowol­ne­mu kom­put­erowi (oczy­wiś­cie nadal będzie potrzeb­ny login oraz hasło).

Prze­chodz­imy ter­az z powrotem do narzędzia RDS i czekamy, aż nasa baza danych zostanie skonfigurowana.

Na tym ekranie możemy zobaczyć adres URL naszej bazy danych. Zanotujmy go, ponieważ będziemy go używać w dalszych krokach. Upewnij się także, że opcja 'Public' jest jako 'Yes'

Na tym ekranie może­my zobaczyć adres URL naszej bazy danych. Zan­otu­jmy go, ponieważ będziemy go uży­wać w dal­szych krokach. Upewnij się także, że opc­ja ‘Pub­lic’ jest jako ‘Yes’

Zarządzanie zdalną bazą danych

Aby zarządzać zdal­ną bazą danych pole­camy sko­rzys­tać z narzędzia MySQL Work­bench. Narzędzie to moż­na bezpłat­nie pobrać ze strony pro­du­cen­ta www.mysql.com/products/workbench/ . Omówie­nie funkcji MySQL zna­jdziemy np na tym instruk­tażowym video w ser­wisie YouTube.

Przykładowe dodawanie połaczenia w MySQL workbench

Przykład­owe dodawanie połaczenia w MySQL workbench

Uruchamiamy naszą aplikację

Koeljnym krok­iem jest po pros­tu uru­chomie­nie naszej aplikacji :)

Pula połączeń do bazy danych

W lekcji 12 wspom­i­nal­iśmy o tym, że w pro­duk­cyjnej aplikacji należy uży­wać puli połączeń. Pula połaczeń otwiera wiele połaczeń z bazą danych jed­nocześnie, po czym jedynie ‘wypoży­cza’ połaczenia do obsłu­gi konkret­nych zapy­tań. Dzię­ki temu aplikac­ja nie traci cza­su na naw­iązy­wanie połaczeń i ich zamykanie. Przykład­owa kon­fig­u­rac­ja poniżej:

<bean id="employeeDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
 destroy-method="close">
 <property name="driverClass" value="com.mysql.jdbc.Driver" />
 <property name="jdbcUrl" value="adresRDS" />
 <property name="user" value="naszLoginUzytkownikaRDS" />
 <property name="password" value="naszeHasloRDS" />
 <property name="maxPoolSize" value="10" />
 <property name="minPoolSize" value="4" />
 <property name="maxStatements" value="100" />
 <property name="testConnectionOnCheckout" value="true" />
 </bean>

Oczy­wiś­cie musisz pod­mienić adres URL, nazwę użytkown­i­ka oraz hasło na dane do bazy danych w RDS (adres URL jest podob­ny, jak w przy­pad­ku lokalnej bazy danych, ale zami­ast local­host poda­je­my adres end­point, który zna­jdziemy w pan­elu RDS)

Generowanie pliku WAR

Ponieważ nasz pro­jekt był twor­zony w mave­nie, plik WAR otrzy­mu­je­my ‘gratis’ pod­czas budowa­nia. Plik ten zna­jdziemy w kat­a­logu /target w głównym kat­a­logu mod­ułu koty-webapp naszego projektu.

Wgrywanie pliku WAR do Elastic Beanstalk

Ostat­ni krok to wgranie wygen­erowanego pliku WAR do naszego środowiska w Elas­tic Beanstalk. W tym celu wchodz­imy do Elas­tic Beanstalk poprzez kon­solę i wybier­amy nasze środowisko.

Na dashboardzie wybieramy opcję 'Upload and deploy'

Na dash­board­zie wybier­amy opcję ‘Upload and deploy’


Na ekranie, który się pojawi wybieramy nasz plik WAR oraz dodajemy komentarz dotyczący wersji (pomoże Ci to w przypadku, gdy będziesz chciała przywrócić jedną z poprzednich wersji)

Na ekranie, który się pojawi wybier­amy nasz plik WAR oraz doda­je­my komen­tarz doty­czą­cy wer­sji (pomoże Ci to w przy­pad­ku, gdy będziesz chci­ała przy­wró­cić jed­ną z poprzed­nich wersji)

Dodajemy własną domenę do naszej aplikacji

Ten krok jest opcjon­al­ny — może­my kupić wybraną przez nas domenę i skon­fig­urować ją tak, aby po jej wpisa­niu w przeglą­darce pokazy­wała się nasza aplikac­ja. Najpierw jed­nak musimy ją kupić

Kupujemy domenę

Pro­ces zakupu dome­ny jest inny w zależnoś­ci od firmy, w której rejestru­je­my domenę. Firm, które to umożli­wia­ją są naprawdę tysiące (wystar­czy wpisać w google ‘dome­ny’) — poniżej przed­staw­iamy dwie najwięk­sze w Polsce oraz jed­ną między­nar­o­dową. Domenę moż­na też zakupić bezpośred­nio w pan­elu Ama­zon AWS — także zamieszcza­my link do doku­men­tacji poniżej. Każ­da z tych firm ma inne pro­moc­je, inne cen­ni­ki, inny pan­el — ciężko powiedzieć, która z nich jest najlep­sza. Sugeru­je­my jed­nak sko­rzys­tanie z które­jś z najwięk­szych firm, jest mniejsze praw­dopodobieńst­wo że z ewen­tu­al­ny­mi prob­le­ma­mi zostaniemy sami.

Konfigurujemy Route53

Screenshot_1

Najpierw w pan­elu wybier­amy usługę Route 53

 

Screenshot_2

Prze­chodz­imy do zakład­ki Host­ed zones po lewej stron­ie i wybier­amy opcję Cre­ate Host­ed Zone


W panelu po prawej stronie uzupełniamy dane domeny - przede wszystkim jej adres (bez www na początku) oraz opcjonalny opis

W pan­elu po prawej stron­ie uzu­peł­ni­amy dane dome­ny — przede wszys­tkim jej adres (bez www na początku) oraz opcjon­al­ny opis


Po utworzeniu domeny klikamy na 'Create record set' a następnie uzupełniamy informację jak na rysunku - wybieramy Alias:Yes oraz z listy elementów wybieramy pozycję pod ElasticLoadBalancer (jedyną, jaką powinniśmy mieć dostepną). Zapisujemy zmiany.

Po utworze­niu dome­ny klikamy na ‘Cre­ate record set’ a następ­nie uzu­peł­ni­amy infor­ma­cję jak na rysunku — wybier­amy Alias:Yes oraz z listy ele­men­tów wybier­amy pozy­cję pod Elas­ti­cLoad­Bal­ancer (jedyną, jaką powin­niśmy mieć dostep­ną). Zapisu­je­my zmiany.

To wystar­czy, jes­li chodzi o kon­fig­u­rację w Route53. Musisz jeszcze skon­fig­urować samą domenę tam, gdzie ją kupiłeś, aby wskazy­wała na Route53 jako ser­w­er, który nią zarządza. O tym jak to zro­bić w kole­jnym kroku, póki co spisz lub skopi­uj adresy, które są zaz­nac­zone na niebiesko (bez kropek na końcu) — będą Ci one potrzeb­ne w następ­nym kroku (dla Two­jej dome­ny praw­ie na pewno będą one nieco inne).

Konfigurujemy domenę

Podob­nie jak w przy­pad­ku zakupu dome­ny, dokład­na pro­ce­du­ra zależy od firmy, w której kupil­iśmy naszą domenę. To, co musimy zro­bić, to ustaw­ić ser­w­ery DNS na te, które odczy­tal­iśmy w poprzed­nim kroku. Poniżej lin­ki do pomo­cy poszczegól­nych firm opisu­ją­cych ten proces:

Jeśli reje­strowałaś domenę w usłudze Ama­zon Route53, nie są konieczne żadne dodatkowe kroki :)

Podsumowanie

W tej częś­ci lekcji dowiedzi­ałaś się jak przy­go­tować aplikację do jej pub­likacji w sieci, jak skon­fig­urować domenę oraz bazę danych tak, aby współpra­cow­ały ze sobą :) Ter­az możesz już chwal­ić się swo­ją aplikacją przed rodz­iną, zna­jomy­mi, ale przede wszys­tkim przed swoim przyszłym pracodawcą :)

Grat­u­lac­je!

Ostrzeżenie

Uwa­ga! W tej lekcji zro­bil­iśmy kil­ka rzeczy, które nie są dobry­mi prak­tyka­mi w przy­pad­ku aplikacji, które muszą być zabez­piec­zone i dzi­ałać w każdych warunk­ach, przede wszystkim:

  • Nie należy umożli­wiać dostępu do bazy danych z dowol­nego adresu (krok z kon­fig­u­racją secu­ri­ty group w narzędz­iu VPC)! Zami­ast tego powin­ny tam się znaleźć jedynie adresy ser­w­erów aplikacji lub sieci wewnętrznej. Taka kon­fig­u­rac­ja znacznie przekracza jed­nak ramy tego kur­su i nie będzie omawiana
  • Baza danych powin­na być uru­chomiona w kilku lokaliza­c­jach (opc­ja Mul­ti A‑Z deploy­ment). Z uwa­gi na kosz­ty, które były­by nal­ic­zone, a które wykracza­ją poza Free Tier, wybral­iśmy inną opcję
  • Użytkown­ik, którego aplikac­ja uży­wa do łączenia się z bazą danych powinien być inny niż użytkown­ik admin­is­tra­cyjny i nie powinien mieć uprawnień, których nie potrze­bu­je (np. do mody­fikacji / usuwa­nia tabel)

Miej to na uwadze w swo­jej przyszłej pra­cy — na potrze­by aplikacji, która nie ma dużego znaczenia biz­ne­sowego, a dane w niej zawarte nie są wrażli­we, użyte pode­jś­cie móże być wystar­cza­jące. Pamię­taj jed­nak, że pewne rzeczy moż­na poprawić.

Zadanie

Opub­likuj swo­ją aplikację w internecie i pochw­al się linkiem w komen­tarzu! Czekamy na Wasze aplikacje!

Licencja Creative Commons

Jeśli uważasz powyższą lekcję za przy­dat­ną, mamy małą prośbę: pol­ub nasz fan­page. Dzię­ki temu będziesz zawsze na bieżą­co z nowy­mi treś­ci­a­mi na blogu ( i oczy­wiś­cie, z nowy­mi częś­ci­a­mi kur­su Javy). Dzięki!