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

By 15 maja 2015Kurs Javy

Dzisiaj kontynuacja lekcji o uruchamianiu aplikacji, skonfigurujemy bazę danych i podepniemy wybraną przez nas domenę. Gotowa? 

Lekcja

Drugą część tej lekcji zaczniemy od bazy danych – ten krok jest niezbędny, później przejdziemy do umieszczania naszej aplikacji w sieci a na koniec nauczymy się kupować wybrane domeny i podłączać je do naszej aplikacji.

Konfigurujemy bazę danych

Pierwszym naszym krokiem w tej lekcji będzie konfiguracja bazy danych. Użyjemy do tego bazy danych MySQL hostowanej w usłudze Amazon RDS.

Tworzenie bazy danych w Amazon RDS

Najpierw logujemy się do konsoli Amazon AWS pod adresem console.aws.amazon.com .

Screenshot_1

Z narzędzi wybieramy RDS – Relational database service


Screenshot_3

Jeśli nie korzystałaś z Amazon RDS wcześniej, zobaczysz takie ekran – wybierz opcję ‚Get started now’


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

Możesz też zobaczyć taki ekran – w takim wypadku wybierz opcję ‚Launch a DB instance’


Screenshot_4

Tutaj mamy możliwość wybrania tzw. silnika bazy danych – w naszym przypadku będzie to MySQL


Screenshot_5

W kolejnym kroku wybieramy ‚No’ . Pytanie dotyczy tego, czy chcemy wykonywać kopię naszej bazy danych na żywo do innych (fizycznie) części serwerowni. Ma to uzasadnienie w przypadku ważnych systemów (jeśli wydarzy się awaria lub katastrofa, są większe szanse, że nasz system nadal będzie działał), ale na nasze potrzeby wystarczy pojedyncza instalacja. Uwaga: pozostawienie domyślnej opcji spowoduje, że będą naliczane opłaty ponieważ nie jest to objęte bezpłatnym pakietem.


Screenshot_7

Ten krok pozwala nam skonfigurować parametry naszej bazy danych. Z najważniejszych elementów, wybieramy db.t2.micro jako typ instancji. Wybieramy także nazwę, pod jaką będzie widoczna nasza baza danych (jest ona wazna tylko dla nas), nazwę użytkownika – administratora oraz jego hasło. Pozostałe opcje wybieramy tak jak na grafice (chyba, że dostępna będzie nowsza wersja – wtedy wybieramy najnowszą).


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

Ten krok pozwala nam wybrać szczegółowe ustawienia – konfigurujemy 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 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.


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. Teraz musimy poczekać ok. 15 minut zanim się uruchomi. W międzyczasie skonfigurujemy 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 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 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 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).

Przechodzimy teraz 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ż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’

Zarządzanie zdalną bazą danych

Aby zarządzać zdalną bazą danych polecamy skorzystać z narzędzia MySQL Workbench. Narzędzie to można bezpłatnie pobrać ze strony producenta www.mysql.com/products/workbench/ . Omówienie funkcji MySQL znajdziemy np na tym instruktażowym video w serwisie YouTube.

Przykładowe dodawanie połaczenia w MySQL workbench

Przykładowe dodawanie połaczenia w MySQL workbench

Uruchamiamy naszą aplikację

Koeljnym krokiem jest po prostu uruchomienie naszej aplikacji :)

Pula połączeń do bazy danych

W lekcji 12 wspominaliśmy o tym, że w produkcyjnej aplikacji należy używać puli połączeń. Pula połaczeń otwiera wiele połaczeń z bazą danych jednocześnie, po czym jedynie ‚wypożycza’ połaczenia do obsługi konkretnych zapytań. Dzięki temu aplikacja nie traci czasu na nawiązywanie połaczeń i ich zamykanie. Przykładowa konfiguracja 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>

Oczywiście musisz podmienić adres URL, nazwę użytkownika oraz hasło na dane do bazy danych w RDS (adres URL jest podobny, jak w przypadku lokalnej bazy danych, ale zamiast localhost podajemy adres endpoint, który znajdziemy w panelu RDS)

Generowanie pliku WAR

Ponieważ nasz projekt był tworzony w mavenie, plik WAR otrzymujemy ‚gratis’ podczas budowania. Plik ten znajdziemy w katalogu /target w głównym katalogu modułu koty-webapp naszego projektu.

Wgrywanie pliku WAR do Elastic Beanstalk

Ostatni krok to wgranie wygenerowanego pliku WAR do naszego środowiska w Elastic Beanstalk. W tym celu wchodzimy do Elastic Beanstalk poprzez konsolę i wybieramy nasze środowisko.

Na dashboardzie wybieramy opcję 'Upload and deploy'

Na dashboardzie wybieramy 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 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)

Dodajemy własną domenę do naszej aplikacji

Ten krok jest opcjonalny – możemy kupić wybraną przez nas domenę i skonfigurować ją tak, aby po jej wpisaniu w przeglądarce pokazywała się nasza aplikacja. Najpierw jednak musimy ją kupić

Kupujemy domenę

Proces zakupu domeny jest inny w zależności od firmy, w której rejestrujemy domenę. Firm, które to umożliwiają są naprawdę tysiące (wystarczy wpisać w google ‚domeny’) – poniżej przedstawiamy dwie największe w Polsce oraz jedną międzynarodową. Domenę można też zakupić bezpośrednio w panelu Amazon AWS – także zamieszczamy link do dokumentacji poniżej. Każda z tych firm ma inne promocje, inne cenniki, inny panel – ciężko powiedzieć, która z nich jest najlepsza. Sugerujemy jednak skorzystanie z którejś z największych firm, jest mniejsze prawdopodobieństwo że z ewentualnymi problemami zostaniemy sami.

Konfigurujemy Route53

Screenshot_1

Najpierw w panelu wybieramy usługę Route 53

 

Screenshot_2

Przechodzimy do zakładki Hosted zones po lewej stronie i wybieramy opcję Create Hosted Zone


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

W panelu po prawej stronie uzupełniamy dane domeny – przede wszystkim jej adres (bez www na początku) oraz opcjonalny 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 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.

To wystarczy, jesli chodzi o konfigurację w Route53. Musisz jeszcze skonfigurować samą domenę tam, gdzie ją kupiłeś, aby wskazywała na Route53 jako serwer, który nią zarządza. O tym jak to zrobić w kolejnym kroku, póki co spisz lub skopiuj adresy, które są zaznaczone na niebiesko (bez kropek na końcu) – będą Ci one potrzebne w następnym kroku (dla Twojej domeny prawie na pewno będą one nieco inne).

Konfigurujemy domenę

Podobnie jak w przypadku zakupu domeny, dokładna procedura zależy od firmy, w której kupiliśmy naszą domenę. To, co musimy zrobić, to ustawić serwery DNS na te, które odczytaliśmy w poprzednim kroku. Poniżej linki do pomocy poszczególnych firm opisujących ten proces:

Jeśli rejestrowałaś domenę w usłudze Amazon Route53, nie są konieczne żadne dodatkowe kroki :)

Podsumowanie

W tej części lekcji dowiedziałaś się jak przygotować aplikację do jej publikacji w sieci, jak skonfigurować domenę oraz bazę danych tak, aby współpracowały ze sobą :) Teraz możesz już chwalić się swoją aplikacją przed rodziną, znajomymi, ale przede wszystkim przed swoim przyszłym pracodawcą :)

Gratulacje!

Ostrzeżenie

Uwaga! W tej lekcji zrobiliśmy kilka rzeczy, które nie są dobrymi praktykami w przypadku aplikacji, które muszą być zabezpieczone i działać w każdych warunkach, przede wszystkim:

  • Nie należy umożliwiać dostępu do bazy danych z dowolnego adresu (krok z konfiguracją security group w narzędziu VPC)! Zamiast tego powinny tam się znaleźć jedynie adresy serwerów aplikacji lub sieci wewnętrznej. Taka konfiguracja znacznie przekracza jednak ramy tego kursu i nie będzie omawiana
  • Baza danych powinna być uruchomiona w kilku lokalizacjach (opcja Multi A-Z deployment). Z uwagi na koszty, które byłyby naliczone, a które wykraczają poza Free Tier, wybraliśmy inną opcję
  • Użytkownik, którego aplikacja używa do łączenia się z bazą danych powinien być inny niż użytkownik administracyjny i nie powinien mieć uprawnień, których nie potrzebuje (np. do modyfikacji / usuwania tabel)

Miej to na uwadze w swojej przyszłej pracy – na potrzeby aplikacji, która nie ma dużego znaczenia biznesowego, a dane w niej zawarte nie są wrażliwe, użyte podejście móże być wystarczające. Pamiętaj jednak, że pewne rzeczy można poprawić.

Zadanie

Opublikuj swoją aplikację w internecie i pochwal się linkiem w komentarzu! Czekamy na Wasze aplikacje!

Licencja Creative Commons

Jeśli uważasz powyższą lekcję za przydatną, mamy małą prośbę: polub nasz fanpage. Dzięki temu będziesz zawsze na bieżąco z nowymi treściami na blogu ( i oczywiście, z nowymi częściami kursu Javy). Dzięki!

  •  
  •  
  •  
  •  
  •  
  • Tomek

    Udało mi się wszystko wykonać zgodnie z przewodnikiem. Dziękuję
    Jeśli byłyby tu jakieś reklamy to chętnie bym poklikał w nie w ramach podziękowania

    Pozdrawiam

  • Wiktor Kalinowski

    Mam takie pytanie trochę offtopic.. Ale chciałbym się dowiedzieć jak można zaprogramować pobieranie ze strony internetowej danych.. (wybranie np. 3 danych i aktulaizowanie ich) Czy takie rzeczy w Javie się robi czy gdzieś indziej mam szukać? Z góry dziękuje za odpowiedź.

    • Można to zrobić w prawie każdym języku programowania, także Javie – miej jednak na uwadze, że to co widzisz w przeglądarce może nie być tak proste do pobrania za pomocą Twojej aplikacji – szczególnie, jeśli są to treści dynamiczne, wczytywane JavaScriptem. Nie jest to oczywiście niemożliwe, ale nie jest trywialne. Dodatkowo wiele stron blokuje ruch niepochodzący z przeglądarek internetowych, co może dodatkowo utrudnić takie działanie.

  • Ola

    Dziękuję bardzo za pomoc! :) Nie wiem co bym zrobiła bez tego artykułu :)

  • Michał

    Mam problem. Z jakiej racji zostają naliczone opłaty? Przecież miało być to wszystko za darmo.

    • Bezpłatne są podstawowe usługi z limitami – tzw. Free tier. W przypadku baz danych jest to 750 godzin miesięcznie jednej instancji typu db.t2.micro (jest to opisane na stronie https://aws.amazon.com/rds/free/) – jeśli wybrałeś inny rodzaj serwera to nie kwalifikuje się on do bezpłatnych usług. Oferta jest też ograniczona czasowo – możesz z niej skorzystać w przypadku większości usług przez rok od utworzenia konta w ramach Amazon AWS.
      Jeśli nie jesteś pewny, w jaki sposób przekraczasz limity, w dokumentacji znajdziesz instrukcję jak to sprawdzić: http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/tracking-free-tier-usage.html

      • Michał

        Rozumiem. Stworzyłem bazę danych Oracle, to pewnie dlatego, zgadza się? Jeśli usunę instancję w bazie, to opłaty przestaną być naliczane? W jaki sposób dokonuje się płatności? Dziękuję za pomoc.

        • Tak, bazy danych Oracle wiążą się z opłatami licencyjnymi, dlatego nie są uwzględnione w bezpłatnym pakiecie. Jeśli usuniesz instancje, to opłaty oczywiście od razu przestaną być naliczane.
          W kwestii płatności – przy rejestracji musiałeś podać dane do karty kredytowej lub debetowej – pod koniec miesiąca kwota taka jaką widzisz w panelu zostanie po prostu pobrana z karty. Jeśli nie uda się pobrać kwoty z karty, dostaniesz maila z prośbą o zaktualizowanie danych i podanie danych do działającej karty.

          • Michał

            Dziękuję przeogromnie za pomoc :)

          • Michał

            Mam kolejny kłopot. Pousuwałem instancje bazy, a opłaty wciąż są naliczane. Co robię nie tak?!

          • Michał

            Sprawa została rozwiązana. Napisałem do nich i okazało się, że niepotrzebnie naliczyli mi opłaty. Wszystko zostało cofnięte. Dziękuję za pomoc.
            Pozdrawiam :)

  • Krzysiek

    Mam serwis RESTowy napisany w springu, który deployuję jako WAR, podpinam bazę i OK. Mam też javascriptowego klienta (reactjs) który korzysta z tego serwisu. Czy AWS oferuje możliwość zdeployowania takiego static contentu (html+css+js) i podpięcie pod to domeny?

    • Jak najbardziej – możesz dodać content statyczny do WAR’a albo zdeployować go za pomocą usługi CloudFront (to CDN) – w zależności jak często się zmienia, jak chcesz deployować w przyszłości itp :)

  • Kuba

    Hej, mam problem. Chciałbym aby uruchomienie aplikacji z innego urządzenia było tak jakby nowym uruchomieniem tej aplikacji a nie jedna aplikacja sterowana raz z tego urządzenia raz z tego. Nie wiem jak to ubrać w słowa. Teraz dochodzi do sytuacji, że np. Wyślę wypełniony formularz z komputera 1 aplikacja te dane gdzieś zapisze to te dane są też już na komputerze 2.