Projekt DShop – instrukcja uruchomienia

W poprzednim wpisie opisującym ciemną stronę mikroserwisów wspomniałem, że przedstawię kompletną instrukcję uruchomienia projektu DShop, który wspólnie z Piotrkiem Gankiewiczem przygotowaliśmy na potrzeby prezentacji „Distributed .NTE Core”. Dlaczego właściwie ją publikuję? Powody są w zasadzie dwa. Pierwszy to fakt, że wiele osób wyraziło zainteresowanie tym tematem po naszych prezentacjach i zapewne część chciałaby pobawić się naszym kodem na swoich komputerach. Domyślam się jednak, że dla osób mniej doświadczonych już samo uruchomienie projektu może sprawiać wiele kłopotu. Szczerze mówiąc, wcale im się nie dziwie. Po drugie, wszystkie przyszłe posty, które będą prezentować jakieś rozwiązania architektoniczne będą posiadały listingi właśnie z DShop, dlatego chciałbym mieć miejsce, do którego mógłbym odesłać wszystkich chcących uruchomić ten projekt. Tyle słowem wstępu.

 

Czego potrzebujesz?

Poniżej zamieszczam listę nizbędnych rzeczy do zainstalowania:

 

Krok 1. Pobranie projektów z GitHub

Posiadając już wymagane zależności na komputerze możemy przejść do pobrania samej aplikacji. Na wstępie proponuję abyś utworzył jakiś katalog np. o nazwie DShop i do niego rozpoczął klonowanie kolejnych repozytoriów, aby wszystko ładnie zgrupować. Uruchom GITa i wpisz polecenie:

 


git clone https://github.com/devmentors/DNC-DShop.<nazwa_projektu>.git

 

Poniżej lista do podstawienia parametru:

  • Api
  • Common
  • Messages
  • Services.Operations
  • Services.Storage
  • Services.Orders
  • Services.Signalr
  • Services.Products
  • Services.Notifications
  • Services.Identity
  • Services.Customers

Oprócz tego jest jeszcze jeden projekt, który zawiera to co nas dziś najbardziej interesuje, czyli skrypty do uruchomienia całej aplikacji. Pobierz go tym poleceniem:

 


git clone https://github.com/devmentors/DNC-DShop.git

 

W tym momencie zakładam, że posiadasz folder, w którym znajdują się wszystkie sklonowane repozytoria. Kolejnym etapem będzie udanie się do projektu DNC-DShop, a następnie folderu scripts. Skopiuj wszystkie skrypty i przeklej je na poziom katalogów z repozytoriami jak poniżej:

 

 

Krok 2. Uruchomienie infrastruktury

Posiadając już poprawnie zorganizowane pliki możesz przejść do kolejnego kroku jakim będzie uruchomienie całej infrastruktury niezbędnej do poprawnego działania aplikacji. Mowa tu o:

Uruchom terminal i przejdź do katalogu, który zawiera wcześniej przekopwiowane skrypty, a następnie uruchom polecenie:

 


./start-infrastructure.sh

 

Alternatywnie możesz uruchomić infrastrukturę bezpośrednio wywołując polecenia Docker Compose:

 


docker-compose -f docker-compose-infrastructure.yaml up -d

 

Jeżeli nie jesteś zaznajomiony z tym narzędziem  to wyjaśniam, że parametr -f wskazuje plik, z którego ma skorzystać Docker Compose, a parametr -d nakazuje uruchomienie kontenerów w trybie detached czyli „odłączonym” od konsoli (nie będziesz widział outputu i sterowanie pozostanie dalej w terminalu).  Aby mieć pewność, że infrastruktura została poprawnie uruchomiona, wykonaj polecenie:

 


docker ps

 

i zobacz czy kontenery mongo, redis i rabbitmq są widoczne na liście:

 

 

 

W tym miejscu warto skomentować dlaczego infrastruktura jest uruchamiana jako niezależne kontenery Dockerowe, a nie po prostu zainstalowana na dysku twardym. Odpowiedź jest bardzo prosta – wygoda. Jeżeli za kilka godzin/dni znudzi Ci się ten projekt to wystarczy, że zatrzymasz kontener, usuniesz obraz i nie będziesz posiadał żadnych widocznych śladów jego egzystencji. W przypadku instalowania tego na dysku sprawa jest już nieco bardziej skomplikowana i wymaga dokładniejszej inspekcji.

 

Krok 3. Uruchomienie aplikacji DShop

Na tym etapie zakładam, że na Twoim komputerze znajdują się już trzy kontenery Dockerowe, które zawierają kompletną infrastrukturę do uruchomienia aplikacji. Ponownie przejdź terminal na poziom katalogu z repozytoriami i wykonaj polecenie:

 


./start-all.sh

 

Skrypt ten uruchomi wszystkie projekty używając do tego dotnet CLI. W tym przypadku brak Dockera nie skutkuje instalowaniem czegokolwiek na dysku poza dodaniem kilku paczek do rejestru NuGeta. Jeżeli jednak wolisz uruchomić wszystko jako kontenery to użyj polecenia:

 


docker-compose -f docker-compose-local.yaml up -d

 

Po paru chwilach wszystko powinno zostać uruchomione, a Ty możesz rozpocząś dalszą eksplorację!

 

Krok 4. Zatrzymanie aplikacji DShop i infrastruktury

Jeżeli będziesz chciał zatrzymać aplikację oraz zakończyć działanie infrastruktury, to rozpocznij on polecenia:

 


pkill -f dotnet

 

UWAGA: To polecenie zakończy działa wszystkich aplikacji działących na .NET Core, nie tylko mikroserwisów. 

 

W przypadku infrastruktury (lub aplikacji uruchomionej poprzez Docker Compose) należy wykonać polecenie:

 


docker stop <ID kontenera>

 

Identyfikator każdego kontenera jest widoczny po wykonaniu polecania docker ps:

 

 

Informacje dodatkowe

  • Obraz Dockera dla RabbitMQ dostarcza panel webowy, w którym to możemy administrować kolejką i jej użytkownikami. Jest dostępna pod adresem localhost:15672
  • Do ekspoloracji MongoDB polecam zainstalować jakiegoś klienta (ja używam Robo 3T), a następnie podłączyć się do lokalnego klastra pod adresem localhost:27017
  • Przykładowe żądania HTTP znajdują się pod ścieżką DNC-DShop.API/src/DShop.rest. Jest to plik, który należy uruchomić w VS Code z pobraną wtyczką RestClient. Więc o tej wtyczce możesz poczytać w moim anglojęzycznym wpisie.

 

To chyba tyle na dziś. Mam nadzieję, że wpis okaże się dla Ciebie przydatny 🙂 W niedalekiej przyszłości przejdę już do bardziej technicznych publikacji, które szerzej opiszą aspekty projektowe i implementacyjne tej aplikacji.

You may also like...

  • Piotr Łukasik

    Cześć, miałem lekkie problemy przy uruchomieniu projektów na Windows 10 według opisu i stąd mam dwa pytania:
    1)
    Czy w DShop.Api.csproj nie lepiej użyć PackageReference
    Include=”Microsoft.AspNetCore.App” Version=”2.1.*” zamiast 2.1.1?
    Obecnie jest juz wercja 2.1.301 na którą kieruje link przed krokiem 1.
    2)
    W start.sh we wszystkich projektach używasz dotnet run –no-restore,
    niestety przy pierwszym uruchomieniu musialem robic restore na
    wszystkich projektach, czy opcja –no-restore jest dodana bo chcesz
    zmniejszyc czas uruchamiania czy cos jeszcze?

    • Cześć,
      faktycznie można zrobić wildcard na wersji aby nie fixować się na jedną konkretną. Jesli chodzi o –no-resatore to zamysł jest dokładnie taki jak napisałeś, ale faktycznie warunkiem jest zrobienie uprzednio dotnet build na wszystkich projektach 😛 Jest do tego skrypt (nawet widoczny na zdjęciu) dotnet-build-all.sh 😛 Zrobię update posta 😀

      Dzięki za zwrócenie uwagi!

      • Piotr Łukasik

        Spoko, nie ma problemu 🙂 nie zauważyłem skryptu ale faktycznie jest on przydatny 🙂 powodzenia z projektem i czekam na aktualizacje o testy 😀