Practic

⚡Інформація про проєкт

В цьому репозиторії можна побачити реалізацію сайту - збірнику курсів, де адміністратори можуть додавати курси, ментори ними управляти та змінювати, а студенти просто навчатися, отримувати знання, готувати доповіді та робити практичні роботи.

Here must be a picture of enter page

В проєкті використані такі технології:

  • Spring Boot 3, Spring Security, Spring Data, Hibernate;
  • PostgreSQL;
  • Angular 16.2+;
  • Реєстрація та авторизація відбуваються за допомогою LinkedIn, використовуючи OAuth 2.0 та JWT;

Проєкт Practic складається з 3х модулів:

  1. Модуль practic - бекенд з використанням Spring Boot 3;
  2. Модуль frontend - фронтенд на Angular 2+;
  3. Модуль loadTesting - тести з використанням Gatling;

Проєкт має налаштовану перевірку стилю кода, файли з налаштуваннями ggogle_cheks.xml, suppresions.xml (відключення перевірки Javadoc).

⚙ Налаштування і запуск проекту️

Для роботи сервісу необхідно:

  1. git clone - клонувати проєкт;
  2. встановити node.js (не нижче версії 16.20 LTS);
  3. встановити ряд необхідних зміних (найкращий спосіб – застосувати environment variables):
  • LINKEDIN_CI - LinkedIn Client ID - ключ аутентифікації, який можна знайти в аппці на лінкедіні;
  • LINKEDIN_CS - LinkedIn Client Secret - пароль до ключа аутентифікації, який можна знайти в аппці на лінкедіні (зверніться до колег);
  • LOGOUT_REDIRECT_URI=http://localhost:4200/login?logout=true - (приклад для локального використання);
  • MAIL_PASSWORD - пароль до пошти, що буде використана для відправки нотифікацій з приводу нових доповідей;
  • MAIL_USERNAME - пошта, що буде використана для відправки нотифікацій з приводу нових доповідей;
  • POSTGRESQL_PASSWORD - пароль до postgresql бази даних, що використовується для роботи програми (локальний);
  • POSTGRESQL_URL - url до бази даних, що використовується для роботи програми (локальний);
  • POSTGRESQL_USERNAME - username користувача, що використовує базу даних (локальний);
  • REDIRECT_URI=http://localhost:4200/oauth2/redirect, myandroidapp://oauth2/redirect, myiosapp://oauth2/redirect - (приклад для локального використання);
  • TOKEN_SECRET - токен, що буде використовуватися в програмі для JWT (16-річне число, seed, який буде використаний для генерації токену);

*Слід зазначити, що при роботі на віддаленому сервері, всі "localhost:порт" треба замінити на домен сервера, наприклад: http://localhost:4200/login?logout=true -> https://<ваш домен>/login?logout=true

  1. імпортувати файл google_cheks.xml (файл знаходиться в корені проекту): зайти в Settings  Tools  Checkstyle. Далі в Configuration file додати файл google_cheks.xml і поставити галочку на Active. Checkstyle version має бути > 10 (напр. 10.12.5). В Idea в закладці Checkstyle обрати в Rules той файл, який внесено в Tools.

Checkstyle

  1. перейти в frontend/src/main/angular (папка, де знаходиться package.json) та запустити npm install (за необхідності запустити npm update);

  2. зробити першу збірку проєкту npm ci (або - npm clean install) – щоб створився build.properties в маніфесті;

  3. перейти в корінь проекту і зібрати весь проект - mvn clean install;

  4. запуск фронтенду та бекенду:

  • фронтенд запускається з папки проекту (папка frontend) – npm start (по замовчуванню запускається сервер http://localhost:4200/);
  • для запуску бекенду запустити метод main в PracticApplication (до команди npm start дописаний проксі сервер для запитів на бекенд за адресою http://localhost:5001/).

Після збірки і запуску додатку фронтенд і бекенд працють на одному сервері: http://localhost:5001/

Для того щоб задеплоїти програму на продакшин треба внести зміни в файлі environment.prod.ts, що знаходиться в папці frontend/src/main/angular/src/environments.

⚡Створення інстанса для проєкта

⚙ Порядок виконання дій:

  1. AWS створюється пара ключів

    • secrets.AWS_ACCESS_KEY_ID
    • secrets.AWS_SECRET_ACCESS_KEY
  2. На Github у налаштуваннях безкеки поточного проєкту треба встановити ці ключі з AWS.

  3. на AWS EB(Elastic Beanstalk)

    • створити новий Enviroment (example) shpp-develop, який автоматично для даного enviroment створить: - new Applcation - new Instance EC2
  4. EB -> enviroment shpp-develop-env -> Configuration встановити усі необхідні ключі-значення:

    • GRADLE_HOME
    • LINKEDIN_CI
    • LINKEDIN_CS
    • LOGOUT_REDIRECT_URI
    • M2
    • M2_HOME
    • MAIL_PASSWORD
    • MAIL_USERNAME
    • POSTGRESQL_PASSWORD
    • POSTGRESQL_URL
    • POSTGRESQL_USERNAME
    • REDIRECT_URI
    • TOKEN_SECRET
  5. за шляхом ->

frontend/src/main/angular/src/enviroments/

лежать усі налаштування та редіректи шляхів для наших інстансів: prodaction та localhost у файлах enviroment...ts

  • Створюємо новий enviroment.develop.ts - в середині файлу встановлюємо шляхи для для enviroment.develop.ts аналогічні шляхам файлу enviroment.prod.ts, але замість продакшн інстанса EC2 встановлюємо шляхи нашого інстанса для розробки shpp-development
  1. у файлі за шляхом frontend/src/main/angular/angular.json

    "configurations": {...}

    налаштувати шлях до файлів enviroment.ts..

    назва налаштування має співпадати з конкретним файлом enviroment, у нашому випадку це develop

    "develop": { "budgets": [ { "type": "initial", "maximumWarning": "500kb", "maximumError": "3mb" }, { "type": "anyComponentStyle", "maximumWarning": "2kb", "maximumError": "4kb" } ], "fileReplacements": [ {

    "replace": "src/enviroments/enviroment.ts", "with": "src/enviroments/enviroment.develop.ts"

    } ], "outputHashing": "all" },

  2. у модулі frontend/pom.xml створити новий profile:

    < id >- develop-build-< /id >

    < configuration > < arguments > run build -- --configuration=shpp-develop < /arguments > < /configuration >

  3. Локально на проекті за шляшом ->

/.github/workflows/ файли .yml

налаштувати шлях до гілки з якої буде робитись деплой проєкта, прописавши потрібну гілку

push:
branches: development

далі у цьому ж файлі прописати application та enviroment нашого EB

application_name: 'Shpp-development'

environment_name: 'Shpp-development-env'

  1. у профілі Linkedin додати редірект вашого інстансу (example)

http:// назва інстанса .eu-north-1.elasticbeanstalk.com