Skip to content
This repository has been archived by the owner on Jul 14, 2022. It is now read-only.
/ bookystore Public archive

Bookstore system for a credit project in the course "enterprise systems - persistence" at UMCS

Notifications You must be signed in to change notification settings

mMosiur/bookystore

Repository files navigation

BookyStore

ARCHIVED, środowisko produkcyjne wyłączone, CI/CD wyłączone.

Continuous Integration
Continuous Deployment

System księgarni do projektu zaliczeniowego z przedmiotu "Systemy klasy Enterprise - persystencje" na Uniwersytecie Marii Curie-Skłodowskiej w Lublinie.

Zagadnienia

  • 3: CRUD + Spring Security z podziałem na role : admin - dodaje i usuwa książki z księgarni, user możne przeglądać.
  • 3.5: CRUD + koszyk - Dodawanie, usuwanie książek przez usera.
  • 4: Zamówienia - Dodanie funkcji które może wykonywać user - składanie zamówień na książki, zmiana statusu zamówienia przez admina.
  • 4.5: Wygląd aplikacji - Można użyć bootstrapa / własny bardziej rozbudowany projekt lub bardziej rozszerzony projekt z przykładu
  • 5: Płatności - podpięcie np. PayU

Technologie

Kompilacja

Projekt jest tworzony z użyciem Mavena, zbudować go więc można za pomocą:

./mvnw clean package

Argument clean zapewnia że zbudowany zostanie najświeższy wariant projektu, a cykl package pobierze zależności, skompiluje projekt, uruchomi testy jednostkowe oraz utworzy paczkę jar w folderze target.

Profile

W projekcie zdefiniowane są trzy profile:

  • Profil dev

    Profil domyślny, wybierany, gdy żaden inny nie zostanie sprecyzowany. Uruchamia bazę danych H2 in-memory oraz dodaje do niej konsolę pod adresem /h2-console. Baza jest usuwana i tworzona od nowa za każdym uruchomieniem. Jawnie możemy go sprecyzować do kompilacji dodając flagę -Pdev. UWAGA: w środowisku dev nie będzie działał callback z PayU (no bo localhost), więc trzeba symulować jego przyjście ręcznie.

  • Profil docker:

    Profil dedykowany dla uruchomienia z docker compose. Podpina się do bazy danych PostgreSQL uruchamianej razem z aplikacją z URLem bazowanym na nazwie hosta pochodzącej z sieci wewnętrznej dockera. Baza jest aktualizowana do najnowszej wersji, a dane z niej persystują w utworzonym przez dockera woluminie. UWAGA: w środowisku docker nie będzie działał callback z PayU (no bo localhost), więc trzeba symulować jego przyjście ręcznie.

  • Profil prod:

    Profil dedykowany dla uruchomienia w środowisku produkcyjnym. Używane jest przez pipeline cd.yml uruchamiany jako GitHub action, który buduje z nim aplikację wstawiając wrażliwe dane ze zmiennych środowiskowych, które są przekazywane z GitHub secrets. Deploy aplikacji znajduje się w platformie Azure.

Uruchomienie

(najprostszy sposób z wykorzystaniem dockera na końcu sekcji)

Nie trzeba tak na prawdę uruchamiać aplikacji u siebie. Jest ona dostępna w środowisku produkcyjnym pod adresem https://bookystore.azurewebsites.net.

Jeśli jednak chcemy lokalnie:

Projekt uruchomić można bezpośrednio z kodu za pomocą cyklu mavena:

./mvnw spring-boot:run

Wykorzystany wtedy jest domyślny profil dev. Aplikacja będzie dostępna na porcie 8080.

Można także uruchomić zbudowany wcześniej plik jar:

java -jar target/bookystore-*.jar

Wykorzysta to profil który posłużył do zbudowania pliku jar (przy wywołaniu package).

Można także zbudować obraz dockera oraz uruchomić go:

docker build -t bookystore .
docker run bookystore

Zbudowanie bezpośrednio przez docker wykorzysta Dockerfile, który z kolei używa profilu dev, więc obraz den będzie wykorzystywał bazę H2 bez persystencji między uruchomieniami.

Najprościej jednak aby uruchomić lokalnie z PostgreSQL, można aplikację zbudować oraz uruchomić z użyciem docker compose:

docker compose build # alternatywnie docker-compose build
docker compose up # alternatywnie docker-compose up

Uruchomi to obraz bazy danych oraz obraz aplikacji (wykorzysta do tego Dockerfile.compose). Wykorzysta więc profil docker. Aplikacja będzie dostępna na porcie 8080.

Deploy

Środowisko produkcyjne działa pod adresem https://bookystore.azurewebsites.net. Z każdym pushem nowego kodu na gałąź main uruchamia się proces deployu na platformę Azure najświeższej wersji aplikacji.

Obsługa

Domyślnie utworzony użytkownik:

  • email: admin@bookystore.com
  • hasło: password
  • rola: admin

Utworzyć można także swoich nowych użytkowników, każdy zarejestrowany użytkownik domyślnie otrzymuje rolę user.