В цьому репозиторії можна побачити реалізацію сайту - збірнику курсів, де адміністратори можуть додавати курси, ментори ними управляти та змінювати, а студенти просто навчатися, отримувати знання, готувати доповіді та робити практичні роботи.
В проєкті використані такі технології:
- Spring Boot 3, Spring Security, Spring Data, Hibernate;
- PostgreSQL;
- Angular 16.2+;
- Реєстрація та авторизація відбуваються за допомогою LinkedIn, використовуючи OAuth 2.0 та JWT;
Проєкт Practic складається з 3х модулів:
- Модуль practic - бекенд з використанням Spring Boot 3;
- Модуль frontend - фронтенд на Angular 2+;
- Модуль loadTesting - тести з використанням Gatling;
Проєкт має налаштовану перевірку стилю кода, файли з налаштуваннями ggogle_cheks.xml, suppresions.xml (відключення перевірки Javadoc).
Для роботи сервісу необхідно:
- git clone - клонувати проєкт;
- встановити node.js (не нижче версії 16.20 LTS);
- встановити ряд необхідних зміних (найкращий спосіб – застосувати 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
- імпортувати файл google_cheks.xml (файл знаходиться в корені проекту): зайти в Settings Tools Checkstyle. Далі в Configuration file додати файл google_cheks.xml і поставити галочку на Active. Checkstyle version має бути > 10 (напр. 10.12.5). В Idea в закладці Checkstyle обрати в Rules той файл, який внесено в Tools.
-
перейти в frontend/src/main/angular (папка, де знаходиться package.json) та запустити
npm install
(за необхідності запуститиnpm update
); -
зробити першу збірку проєкту
npm ci
(або -npm clean install
) – щоб створився build.properties в маніфесті; -
перейти в корінь проекту і зібрати весь проект -
mvn clean install
; -
запуск фронтенду та бекенду:
- фронтенд запускається з папки проекту (папка 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.
-
AWS створюється пара ключів
- secrets.AWS_ACCESS_KEY_ID
- secrets.AWS_SECRET_ACCESS_KEY
-
На Github у налаштуваннях безкеки поточного проєкту треба встановити ці ключі з AWS.
-
на AWS EB(Elastic Beanstalk)
- створити новий Enviroment (example) shpp-develop, який автоматично для даного enviroment створить: - new Applcation - new Instance EC2
-
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
-
за шляхом ->
frontend/src/main/angular/src/enviroments/
лежать усі налаштування та редіректи шляхів для наших інстансів: prodaction та localhost у файлах enviroment...ts
- Створюємо новий enviroment.develop.ts - в середині файлу встановлюємо шляхи для для enviroment.develop.ts аналогічні шляхам файлу enviroment.prod.ts, але замість продакшн інстанса EC2 встановлюємо шляхи нашого інстанса для розробки shpp-development
-
у файлі за шляхом 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" },
-
у модулі frontend/pom.xml створити новий profile:
< id >- develop-build-< /id >
< configuration > < arguments > run build -- --configuration=shpp-develop < /arguments > < /configuration >
-
Локально на проекті за шляшом ->
/.github/workflows/ файли .yml
налаштувати шлях до гілки з якої буде робитись деплой проєкта, прописавши потрібну гілку
push:
branches: development
далі у цьому ж файлі прописати application та enviroment нашого EB
application_name: 'Shpp-development'
environment_name: 'Shpp-development-env'
- у профілі Linkedin додати редірект вашого інстансу (example)
http:// назва інстанса .eu-north-1.elasticbeanstalk.com