Dogevents – Azure deploy

To był tydzień pt. „U mnie działa”. Jak zwykle to sprawdzone w boju powiedzenie dało się we znaki. Wszystko za sprawą wdrożenia wszystkich komponentów związanych z projektem Dogevents do chmury Azure. I bynajmniej nie była to sprawka Azure tylko złego podejścia w projekcie i braku zaimplementowanych pewnych mechanizmów takich jak np. konfiguracja. I jeszcze jedno, dlaczego Azure? Bo nie mam możliwości pracy z nim na co dzień a zawsze chciałem go wypróbować, aby zdobyć jakieś doświadczenie i dlatego, że mam tam jakąś kasę do wykorzystania 😁

Architektura

Powyższy diagram przedstawia aktualną architekturę aplikacji, jakie komponenty Azure zostały wykorzystane. Było to moje pierwsze spotkanie z chmurą Microsoftu więc nie obyło się bez problemów ale już teraz mogę powiedzieć, że jest to bardzo wygodne rozwiązanie a automatyczny deploy z github’a to jest po prostu bajka!

Wdrażanie poszczególnych składników zacząłem od backendu czyli tych podstawowych rzeczy, które są wymagane do działania. Opiszę każdy składnik ogólnie. Szczegółowy opis znajdzie się w kolejnych postach.

#1 Resource Group

Coś co nie zostało wymienione na diagramie a z czego korzystają wszystkie usługi Azure. Grupa zasobów pozwala m.in na monitorowanie, zarządzanie, kontrolę dostępu podpiętych do niej usług. Utworzyłem jedną podstawową „Dogevents” do której podpiąłem wszystkie swoje usługi.
Dogevents – Azure resource group

#2 Mongo DB

Azure udostępnia wiele usług bazodanowych – ja wybrałem tą najprostszą „Database as a Service for MongoDB”. Mamy całkiem fajny panel do zarządzania m.in kolekcjami, przeglądania danych, wykonywania zapytań. Jest także sekcja „Connection string”, z której możemy pobrać konfigurację połączenia do bazy danych.
Azure – MongoDB connection string

#3 Dogevents API + Mgmt

Ta część dostarcza dla mnie panel do zarządzania aplikacją oraz udostępnia REST API dla warstwy klienckiej. Wykorzystana technologia ASP.NET Core MVC. Utworzyłem nową aplikację typu Web App i skonfigurowałem automatyczny deploy z github’a. Ta opcja to jest po prostu petarda! Żadnego ręcznego przepychania plików (ech te czasy FTP 😉 ) – wszystko wykonuje się z automatu.
Azure – deployment options

Azure – deployment from github
To jest podstawowa konfiguracja, która wystarcza do wykonania deploy z repoytorium na github. Jest możliwość bardziej zaawansowanej kontroli poprzez skrypty .deployment. Dość przystępnie zostało to opisane tutaj

#4 Dogevent web client

Kolejny już składnik to aplikacja kliencka wykonana z użyciem Node.js,Vue.js oraz Webpack. Konfiguracja tej usługi przysporzyła mi najwięcej problemów ale to raczej z racji małej jak dotąd znajomości środowiska Node.js i Azure. Największym problemem było to, że ta aplikacja zawiera się w tym samym repozytorium co Dogevents API i deploy uparcie wdrażał właśnie ten projekt. Z pomocą przyszedł Scott Hanselmann i jego post „Deploying TWO websites to Windows Azure from one Git Repository”. Po wskazaniu, który konkretny projekt (możliwe jest wskazanie na .csproj lub folder) ma zostać wdrożony problem został rozwiązany.
Azure – deploy specific project
Na chwilę obecną brakuje jeszcze jednej rzeczy. Tak aby npm build wykonywał się po stronie Azure. Do tego będę potrzebował wspominanego skryptu .deployment. 

#5 DNS zone

Strefa dns potrzebna była aby podpiąć domenę dogevents.pl pod właściwy adres. To była dla mnie jedna z prostszych rzeczy może dlatego, że pamiętam swoje początki w IT i wszelkie babranie się z Bind pod linuksem 😃Cała procedura zamyka się w kilku krokach:
  1.  Zmiany serwera DNS u rejestratora domeny na serwery nazw Azure:  ns1-02.azure-dns.com, ns2-02.azure-dns.net
  2. Utworzenie strefy DNS
Azure – Create DNS zone
Ta operacja spowoduje przeniesienie domeny na serwer Azure. Aby wskazywała na konkretny zasób – aplikację web, trzeba utworzyć rekord typu A wskazujący na adres IP. Można go odnaleźć w sekcji „Custom domains” aplikacji.
Azure – IP adress A record
 Wracamy do konfiguracji utworzonej strefy. Na tym etapie należy wykonać dwie czynności:
  1.  Utworzenie rekordu typu A  (Opcja „+ Record set”)
    Aby utworzyć podstawowy rekord  wystarczy w pole „IP Address” wpisać adres IP naszej aplikacji. Gdybyście byli zainteresowani co oznaczają pozostałe opcję lub co nam daje pole „Name” odsyłam do internetów
    Azure – create A record
  2. Utworzenie rekordu typu TXT wksazującego na pierwotną domenę naszej aplikacji – tą, którą zawsze generuje Azure. Ma ona format nazwa_aplikacji.azurewebsites.net

Tak przygotowaną strefę DNS można podpiąć do aplikacji. Opcja można znaleźć w konfiguracji jako „Custom domains”. Niestety nie jest ona dostępna dla zasobów typu „free” – bezpłatnych.

Podsumowanie

Naprawdę w wielkim skrócie opisałem moją drogę do wdrożenia wszystkich składników projektu Dogevents do chmury Azure. Niestety czasu jest mało a implementacja musi jakoś iść w parze z blogiem 🙂 Gdybyście mieli uwagi, podpowiedzi co można by było rozwiązać inaczej zapraszam do komentowania.

Dalszą część moich działań w tym zakresie można przeczytać w poście Azure – Deploy Node.js + Vue + Webpack

Przydatne linki: