diff --git a/.env b/.env new file mode 100644 index 000000000..b4e7f9eea --- /dev/null +++ b/.env @@ -0,0 +1,26 @@ +MVN_IMAGE = "debian" +MVN_VERSION="stable-slim" +PROJECT_DIR=/home/jira + +APP_OUT_PORT=8080 +APP_HOST_URL="http://app" + +MAIL_USER="jira4jr@gmail.com" +MAIL_PASSWORD="zdfzsrqvgimldzyj" +MAIL_HOST="smtp.gmail.com" +MAIL_PORT=587 + +DB_NAME="jira" +DB_USER="jira" +DB_PASSWORD="JiraRush" +DB_IMAGE="postgres" +DB_IMAGE_VERSION="latest" +DB_OUT_PORT=5432 +DB_VOLUME_PATH="./data" +DB_SOURCE_URL="jdbc:postgresql://db" + +NGINX_OUT_PORT=80 +NGINX_IMAGE="nginx" +NGINX_IMAGE_VERSION="latest" +NGINX_OUT_HTTPS_PORT=443 +NGINX_CONFIG_PATH="./config/nginx.conf" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..e58678c7f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +ARG APP_IMAGE +FROM ${APP_IMAGE} + +ARG PROJECT_DIR +RUN apt update -y \ + && apt install openjdk-17-jdk -y \ + && apt install maven -y \ + && mkdir ${PROJECT_DIR} ${PROJECT_DIR}/resources ${PROJECT_DIR}/src + +ENV PROJECT_DIR=${PROJECT_DIR} +WORKDIR ${PROJECT_DIR} + +COPY resources/ ./resources/ +COPY src/ ./src/ +COPY ./config/app-start.sh ./pom.xml ./ +RUN mvn clean install -Pprod && rm -rf ./src ~/.m2 + +ARG APP_OUT_PORT +EXPOSE ${APP_OUT_PORT} + +ENTRYPOINT ["./app-start.sh"] \ No newline at end of file diff --git a/README.md b/README.md index 719b268f5..9deef180c 100644 --- a/README.md +++ b/README.md @@ -27,4 +27,47 @@ - https://habr.com/ru/articles/259055/ Список выполненных задач: -... \ No newline at end of file +... +1. Удалить социальные сети: vk, yandex. + Удалено два класса в пакете src/main/java/com/javarush/jira/login/internal/sociallogin. + Удалены ссылка в ресурсных файлах html login и rgister. + Удалены записи в файлах data.sql и changelog.xml + Удалены регистрационные данные для полключения к сетям vk и yandex в файле application.yaml + +2. Вынести чувствительную информацию в отдельный проперти файл + +3. Добавлена локализация начальной страницы на русском и английском языках + +4. Добавлена реализация посчета времени сколько задача находилась в статусах в + работе и тестирование. + добавлена функция REST API для вывода данной информации в секундах. + example: api/tasks/duration/{task_id}&{durationType} + (durationType=in_work || durationType=in_test) + +5. Выполнен рефакторин метода + com.javarush.jira.bugtracking.attachment.FileUtil#upload в соотвествии с заданием. + +6. Переделаны тесты для использования H2DB, исправлены сценарии sql в + соотвествии с особенностями работы H2DB. + Добавлены профили maven postgres и h2dbtest. + +7. Добавлена возможность запуска в докер контейнерах: + - для запуска приложения: необходимо выполнить start-app-dc.sh + - создаются 3 контейнера nginx, db и app + - контейнеры nginx и app имеют доступ к внешней сети, а db - только к внутренней сети контейнеров + - Не решенная задача: + - не получилось заставить nginx нормально работать в режиме обратного прокси, + из-за этого к контейнеру аpp сделана возможность непосредственного доступа из внешней сети по порту 8080 + +8. Добавленs функции по работе с тэгами в задаче. Изменены классы TaskController, TaskService, TaskRepository + +9. Добавлены функции по работе с задачами в задаче. Изменены классы TaskController, TaskService, TaskRepository + Функции добавления/изменения/удаления, а так же выбора тэгов по задаче. в TaskRepository добавлены методы + выборки всех задач по списку тэгов, выборки задач проекта по списку тегов. В выборку данных по Ид задачи + добавлена выборка ее тэгов. + +10. Добавлены тесты для ProfileRestController + +11. Исправлен конфиг nginx для работы в режиме обратного. Изменен файл docker-compose.yml. Теперь контейнеры app и postgres + имеют доступ только к внутренней сети контейнеров. Доступ к приложению осуществляется через nginx по 80 порту + http://localhost || http://dockerhost в зависимости от того, где развернуто приложение. diff --git a/config/_application-prod.yaml b/config/_application-prod.yaml index 67fd8b7c2..723cde7ff 100644 --- a/config/_application-prod.yaml +++ b/config/_application-prod.yaml @@ -3,7 +3,7 @@ app: host-url: http://localhost spring: datasource: - url: jdbc:postgresql://localhost:5432/jira + url: jdbc:postgresql://192.168.253.101:5432/jira username: jira password: JiraRush diff --git a/config/app-start.sh b/config/app-start.sh new file mode 100755 index 000000000..3d99cd346 --- /dev/null +++ b/config/app-start.sh @@ -0,0 +1,3 @@ +#!/bin/bash +java -Dspring.profiles.active=prod -jar ./target/jira-1.0.jar +#while :; do echo 'Press to exit.'; sleep 1; done diff --git a/config/application.env b/config/application.env new file mode 100644 index 000000000..7d2b7615b --- /dev/null +++ b/config/application.env @@ -0,0 +1,29 @@ +APP_HOST_URL=http://app +APP_HOST_PORT=8080 +APP_TEST_MAIL=jira4jr@gmail.com + +DATASOURCE_URL=jdbc:postgresql://db:5432/jira +DATASOURCE_USERNAME=jira +DATASOURCE_PASSWORD=JiraRush + +GITHUB_CLIENT_ID=3d0d8738e65881fff266 +CLIENT_SECRET=0f97031ce6178b7dfb67a6af587f37e222a16120 + +GOOGLE_CLIENT_ID=329113642700-f8if6pu68j2repq3ef6umd5jgiliup60.apps.googleusercontent.com +GOOGLE_CLIENT_SECRET=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 + +GITLAB_CLIENT_ID=b8520a3266089063c0d8261cce36971defa513f5ffd9f9b7a3d16728fc83a494 +GITLAB_CLIENT_SECRET=e72c65320cf9d6495984a37b0f9cc03ec46be0bb6f071feaebbfe75168117004 +GITLAB_CLIENT_NAME=GitLab +GITLAB_REDIRECT_URI="{baseUrl}/login/oauth2/code/{registrationId}" +GITLAB_AUTHORIZATION_GRANT_TYPE=authorization_code + +GITLAB_AUTHORIZATION_URI=https://gitlab.com/oauth/authorize +GITLAB_TOKEN_URI=https://gitlab.com/oauth/token +GITLAB_USER_INFO_URI=https://gitlab.com/api/v4/user +GITLAB_USER_NAME_ATTRIBUTE=email + +MAIL_HOST=smtp.gmail.com +MAIL_USERNAME=jira4jr@gmail.com +MAIL_PASSWORD=zdfzsrqvgimldzyj +MAIL_PORT=587 diff --git a/config/nginx.conf b/config/nginx.conf index 82b9e234d..90074262f 100644 --- a/config/nginx.conf +++ b/config/nginx.conf @@ -1,40 +1,16 @@ -# https://losst.ru/ustanovka-nginx-ubuntu-16-04 -# https://pai-bx.com/wiki/nginx/2332-useful-redirects-in-nginx/#1 -# sudo iptables -A INPUT ! -s 127.0.0.1 -p tcp -m tcp --dport 8080 -j DROP -server { - listen 80; + upstream aps { + ip_hash; + server app:8080; + } + server { + listen 80; + listen 443; - # https://www.digitalocean.com/community/tutorials/how-to-optimize-nginx-configuration - gzip on; - gzip_types text/css application/javascript application/json; - gzip_min_length 2048; - - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - root /opt/jirarush/resources; - - if ($request_uri ~ ';') {return 404;} - - # proxy_cookie_flags ~ secure samesite=none; - - # static - location /static/ { - expires 30d; - access_log off; - } - location /robots.txt { - access_log off; - } - - location ~ (/$|/view/|/ui/|/oauth2/) { - expires 0m; - proxy_pass http://localhost:8080; - proxy_connect_timeout 30s; - } - location ~ (/api/|/doc|/swagger-ui/|/v3/api-docs/) { - proxy_pass http://localhost:8080; - proxy_connect_timeout 150s; - } - location / { - try_files /view/404.html = 404; - } -} \ No newline at end of file + location / { + proxy_pass http://aps/; + #proxy_connect_timeout 150s; + #proxy_redirect off; + #proxy_set_header Update $http_upgrade; + #proxy_set_header Connection "uograde"; + } + } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..cf8d000e2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,59 @@ +--- +version: "3.9" +services: + nginx: + image: "${NGINX_IMAGE}:${NGINX_IMAGE_VERSION}" + restart: "always" + ports: + - "80:${NGINX_OUT_PORT}" + - "443:${NGINX_OUT_HTTPS_PORT}" + volumes: + - "${NGINX_CONFIG_PATH}:/etc/nginx/conf.d/default.conf" + networks: + - ext_net + - int_net + depends_on: + - app + db: + image: "${DB_IMAGE}:${DB_IMAGE_VERSION}" + restart: "always" + ports: + - "5432:${DB_OUT_PORT}" + volumes: + - "${DB_VOLUME_PATH}:/var/lib/postgresql/data" + environment: + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_DB=${DB_NAME} + networks: + - int_net + healthcheck: + test: [ "CMD-SHELL", "'pg_isready -U ${DB_USER} -d ${DB_NAME}'" ] + interval: 5s + timeout: 5s + retries: 5 + app: + build: + context: . + args: + - APP_IMAGE=${MVN_IMAGE}:${MVN_VERSION} + - PROJECT_DIR=${PROJECT_DIR} + - APP_OUT_PORT=${APP_OUT_PORT} + dockerfile: Dockerfile + env_file: ./config/application.env + restart: "always" + environment: + - SPRING_DATASOURCE_URL=${DB_SOURCE_URL}:${DB_OUT_PORT}/${DB_NAME} + ports: + - "8080:${APP_OUT_PORT}" + networks: + - int_net + depends_on: + - db +networks: + #External network + ext_net: + #Internal-only network + int_net: + internal: true +... \ No newline at end of file diff --git a/pom.xml b/pom.xml index f6c152c68..f4a7be5d8 100644 --- a/pom.xml +++ b/pom.xml @@ -142,6 +142,11 @@ junit-platform-launcher test + + com.h2database + h2 + test + @@ -195,5 +200,17 @@ + + postgres + + postgres + + + + h2dbtest + + h2dbtest + + diff --git a/resources/mails/email-confirmation.html b/resources/mails/email-confirmation.html index 106e6129a..acb0186f7 100644 --- a/resources/mails/email-confirmation.html +++ b/resources/mails/email-confirmation.html @@ -1,13 +1,18 @@ - + - JiraRush - подтверждение почты + + EN + RU + + + -

-

Чтобы завершить настройку учетной записи и начать пользоваться JiraRush, подтвердите, что вы правильно указали вашу - электронную почту.

-Подтвердить почту + +

+

"#{text.mailconfirmation}"

+ \ No newline at end of file diff --git a/resources/mails/password-reset.html b/resources/mails/password-reset.html index b37a49007..f2b86204f 100644 --- a/resources/mails/password-reset.html +++ b/resources/mails/password-reset.html @@ -1,12 +1,12 @@ - + - JiraRush - установить новый пароль + -

-

+

+

Установить пароль \ No newline at end of file diff --git a/resources/view/index.html b/resources/view/index.html index e8656ef96..18cbbdf0e 100644 --- a/resources/view/index.html +++ b/resources/view/index.html @@ -1,10 +1,11 @@ - + -

JiraRush Home page

+ +

diff --git a/resources/view/layout/header.html b/resources/view/layout/header.html index 451f9652d..a306ee754 100644 --- a/resources/view/layout/header.html +++ b/resources/view/layout/header.html @@ -4,10 +4,16 @@
+