diff --git a/.gitignore b/.gitignore index fe2972e..875cfc8 100644 --- a/.gitignore +++ b/.gitignore @@ -50,20 +50,24 @@ resources/src/main/generated-resources*/ resources/src/main/resources/database/database_structure.xml frontend/build*/ +frontend/.nx*/ frontend/tmp*/ -frontend/.angular*/ frontend/build_dev*/ +frontend/.angular*/ frontend/dist*/ frontend/node_modules*/ -frontend/src/ts/**/*.js -frontend/src/ts/**/*.js.map -frontend/src/ts/**/*.ngsummary.json -frontend/src/ts/aot*/ +frontend/src/ts/page.routing.ts +frontend/tsconfig.base.json +frontend/modules/generated*/ frontend/src/ts/generated*/ +frontend/modules/shared/src/lib/generated/ npm-debug.log +.eslintignore + #Sublime project files *.sublime-project *.sublime-workspace -CLAUDE.md \ No newline at end of file +config/*.ear +config/output/ diff --git a/.studioignore b/.studioignore index 3fc9113..043dd86 100644 --- a/.studioignore +++ b/.studioignore @@ -1,7 +1,11 @@ -#Files for Webbpm-Studio to ignore +#Files for Webbpm-Studio to ignore frontend/build/ +frontend/.angular/ +frontend/.nx/ frontend/build_dev/ frontend/dist/ +frontend/tmp/ +frontend/modules/generated/ frontend/node_modules/ frontend/src/ts/page.routing.ts frontend/src/ts/generated-sources/ @@ -18,7 +22,6 @@ resources/target/ test/ extensions/ -config/ target/ themes/ @@ -26,4 +29,4 @@ themes/ .git/ .idea/ .studioignore -**.js \ No newline at end of file +**.js diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..501b91d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +ARG BUILDER_IMAGE=nexus.ervu.rt-sk.ru/ervu-base/node:20.9-alpine-git +ARG RUNTIME_IMAGE=nexus.ervu.rt-sk.ru/ervu-base/ervu/jdk:17.0.13-alpine-3.21 + + +FROM $BUILDER_IMAGE AS builder + +ARG MVN_FLAGS="-T4C -Pprod --batch-mode --no-transfer-progress" + +RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.18/main" >> /etc/apk/repositories \ + && echo "https://dl-cdn.alpinelinux.org/alpine/v3.18/community" >> /etc/apk/repositories \ + && apk --update --no-cache add maven openjdk17-jdk + +ENV LANG=ru_RU.UTF-8 +ENV LANGUAGE=ru_RU.UTF-8 +ENV LC_ALL=ru_RU.UTF-8 + +WORKDIR /app +COPY . . + +RUN mkdir -p /root/.m2 \ +# && cp config/settings.xml /root/.m2/settings.xml \ + && mvn clean ${MVN_FLAGS} \ + && mvn package ${MVN_FLAGS} + +RUN cd config-data-executor \ + && mvn clean package ${MVN_FLAGS} + + +FROM $RUNTIME_IMAGE + +RUN rm -f /etc/apk/repositories \ + && echo "https://dl-cdn.alpinelinux.org/alpine/v3.21/main" >> /etc/apk/repositories \ + && apk --update --no-cache add nginx + +ENV BACKEND_URL=http://localhost:8080 +ENV CONFIG_DATA_EXECUTOR_URL=http://localhost:8080/api + +COPY config/nginx.conf /etc/nginx/nginx.conf +COPY --from=builder /app/frontend/dist /usr/share/nginx/html +COPY --from=builder /app/backend/target/*.jar /home/app/backend.jar +COPY --from=builder /app/config-data-executor/target/*.jar /home/app/cde.jar + +EXPOSE 80 + +ENTRYPOINT ["java", "-jar", "/home/app/backend.jar"] diff --git a/README.md b/README.md index acbeeb3..359f093 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ CREATE DATABASE "" OWNER = ""; ``` -ВНИМАНИЕ: в общем случае, отдельную БД для безопасности создавать не нужно. В конфигурации источника данных security-ds в файле standalone.xml в качестве имени базы данных используйте базу данных приложения. +ВНИМАНИЕ: в общем случае, отдельную БД для безопасности создавать не нужно. В конфигурации источника данных security-ds в файле конфигурации в качестве имени базы данных используйте базу данных приложения. Предоставление необходимых прав для роли <your-project-security-role> diff --git a/backend/pom.xml b/backend/pom.xml index df01274..1d15ee5 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -9,8 +9,32 @@ ru.micord.ervu.eks backend - war + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-undertow + + + io.undertow + undertow-core + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + runtime + + + org.springframework.data + spring-data-commons + io.jsonwebtoken jjwt-api @@ -34,18 +58,17 @@ reporting-jasper-fonts runtime + + org.ocpsoft.prettytime + prettytime + org.jooq jooq - - javax.servlet - javax.servlet-api - org.slf4j slf4j-api - provided org.springframework @@ -123,10 +146,6 @@ ru.cg.webbpm.modules.database database-impl - - javax.annotation - javax.annotation-api - ru.cg.webbpm.modules.jndi jndi-beans @@ -199,6 +218,14 @@ org.apache.httpcomponents httpclient + + me.snowdrop + narayana-spring-boot-starter + + + io.agroal + agroal-spring-boot-starter + ${project.artifactId} @@ -230,6 +257,21 @@ + + org.springframework.boot + spring-boot-maven-plugin + 2.7.18 + + + + repackage + + + + + ru.micord.ervu.eks.App + + diff --git a/backend/src/main/java/WebAppInitializer.java b/backend/src/main/java/WebAppInitializer.java deleted file mode 100644 index f4fef23..0000000 --- a/backend/src/main/java/WebAppInitializer.java +++ /dev/null @@ -1,31 +0,0 @@ -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; -import org.springframework.web.util.IntrospectorCleanupListener; - -/** - * This initializer creates root context and registers dispatcher servlet - * Spring scans for initializers automatically - */ -public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { - - public void onStartup(ServletContext servletContext) throws ServletException { - super.onStartup(servletContext); - servletContext.addListener(new IntrospectorCleanupListener()); - } - - protected String[] getServletMappings() { - return new String[]{"/"}; - } - - @Override - protected Class[] getRootConfigClasses() { - return new Class[]{AppConfig.class}; - } - - @Override - protected Class[] getServletConfigClasses() { - return new Class[0]; - } -} diff --git a/backend/src/main/java/AppConfig.java b/backend/src/main/java/ru/micord/ervu/eks/App.java similarity index 62% rename from backend/src/main/java/AppConfig.java rename to backend/src/main/java/ru/micord/ervu/eks/App.java index 03b77a7..a3709a0 100644 --- a/backend/src/main/java/AppConfig.java +++ b/backend/src/main/java/ru/micord/ervu/eks/App.java @@ -1,92 +1,84 @@ -import net.javacrumbs.shedlock.core.LockProvider; -import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; -import net.javacrumbs.shedlock.spring.ScheduledLockConfiguration; -import net.javacrumbs.shedlock.spring.ScheduledLockConfigurationBuilder; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -import javax.sql.DataSource; -import java.time.Duration; - -/** - * Root application context - * This context imports XML configs from all the other jars, and is created by {@link WebAppInitializer} - * NB: modules are excluded from component scan since spring-context.xml sometimes holds important parameters and / or annotations - * @author krylov - */ -@Configuration -@ComponentScan(basePackages = { - "service", - "dao", - "bpmn", - "i18n", - "errorhandling", - "database", - "security", - "component.addresses", - "gen", - "ru.cg", - "ru.micord" -}) -@EnableAspectJAutoProxy(proxyTargetClass = true) -@EnableWebMvc -@EnableScheduling -public class AppConfig { - - @Value("${config.data.executor.socket.timeout:10}") - private int socketTimeout; - @Value("${config.data.executor.connection.timeout:10}") - private int connectionTimeout; - - @Bean - public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ - return new PropertySourcesPlaceholderConfigurer(); - } - - @Bean - public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) { - ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); - scheduler.setPoolSize(12); - scheduler.initialize(); - return ScheduledLockConfigurationBuilder - .withLockProvider(lockProvider) - .withTaskScheduler(scheduler) - .withDefaultLockAtMostFor(Duration.ofHours(4)) - .build(); - } - - @Bean - public LockProvider lockProvider(@Qualifier("datasource") DataSource dataSource) { - return new JdbcTemplateLockProvider(dataSource); - } - - @Bean - public RestTemplate restTemplate() { - RequestConfig requestConfig = RequestConfig.custom() - .setSocketTimeout(socketTimeout * 1000) - .setConnectionRequestTimeout(connectionTimeout * 1000) - .setConnectTimeout(connectionTimeout * 1000) - .build(); - - CloseableHttpClient httpClient = HttpClients.custom() - .setDefaultRequestConfig(requestConfig) - .build(); - - HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); - - return new RestTemplate(factory); - } -} +package ru.micord.ervu.eks; + +import javax.sql.DataSource; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import net.javacrumbs.shedlock.core.LockProvider; +import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider; +import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; +import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.client.RestTemplate; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import ru.cg.webbpm.modules.webkit.DispatcherConfig; + +@Configuration +@ComponentScan(basePackages = { + "service", + "dao", + "bpmn", + "i18n", + "errorhandling", + "database", + "security", + "component.addresses", + "gen", + "ru.cg", + "ru.micord", + "com.example.ervu_eks_5" +}) +@EnableAspectJAutoProxy(proxyTargetClass = true) +@EnableScheduling() +@EnableSchedulerLock(defaultLockAtMostFor = "PT4H") +@SpringBootApplication(exclude = { + HibernateJpaAutoConfiguration.class, + TransactionAutoConfiguration.class, +}) +public class App extends DispatcherConfig { + + @Value("${config.data.executor.socket.timeout:10}") + private int socketTimeout; + @Value("${config.data.executor.connection.timeout:10}") + private int connectionTimeout; + + public static void main(String[] args) { + SpringApplication.run(App.class, args); + } + + @Bean + public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Bean + public LockProvider lockProvider(DataSource dataSource) { + return new JdbcTemplateLockProvider(dataSource); + } + + @Bean + public RestTemplate restTemplate() { + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(socketTimeout * 1000) + .setConnectionRequestTimeout(connectionTimeout * 1000) + .setConnectTimeout(connectionTimeout * 1000) + .build(); + + CloseableHttpClient httpClient = HttpClients.custom() + .setDefaultRequestConfig(requestConfig) + .build(); + + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); + + return new RestTemplate(factory); + } +} diff --git a/backend/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/backend/src/main/webapp/WEB-INF/jboss-deployment-structure.xml deleted file mode 100644 index dad8afc..0000000 --- a/backend/src/main/webapp/WEB-INF/jboss-deployment-structure.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/config-data-executor/pom.xml b/config-data-executor/pom.xml index 37050a8..b2d284d 100644 --- a/config-data-executor/pom.xml +++ b/config-data-executor/pom.xml @@ -3,23 +3,33 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - ru.micord.ervu - eks - 1.0.0-SNAPSHOT - ru.micord.ervu.eks config-data-executor - war + 1.0.0-SNAPSHOT 17 17 UTF-8 + 2.7.18 + + com.amazonaws + aws-java-sdk-bom + 1.12.770 + pom + import + + + org.springframework + spring-framework-bom + 5.3.33 + pom + import + org.springframework.boot spring-boot-starter-test @@ -50,6 +60,42 @@ 3.23.1 test + + com.atomikos + transactions-jta + 6.0.0 + + + com.atomikos + transactions-jdbc + 6.0.0 + + + org.projectlombok + lombok + 1.18.34 + provided + + + com.arangodb + arangodb-java-driver + 7.7.1 + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + javax.transaction + javax.transaction-api + 1.3 + + + org.postgresql + postgresql + 42.7.7 + @@ -125,14 +171,16 @@ com.amazonaws aws-java-sdk-s3 - - javax.servlet - javax.servlet-api - provided - - ru.cg.webbpm.modules.core - core-runtime-api + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 + + + com.sun.xml.bind + jaxb-impl + 4.0.5 + compile @@ -145,14 +193,6 @@ ${project.artifactId} - - org.apache.maven.plugins - maven-war-plugin - 3.1.0 - - false - - org.springframework.boot spring-boot-maven-plugin diff --git a/config-data-executor/src/main/java/org/micord/SpringBootTomcatApplication.java b/config-data-executor/src/main/java/org/micord/SpringBootTomcatApplication.java deleted file mode 100644 index 3c15e47..0000000 --- a/config-data-executor/src/main/java/org/micord/SpringBootTomcatApplication.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.micord; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -@SpringBootApplication -public class SpringBootTomcatApplication extends SpringBootServletInitializer { -} diff --git a/config.md b/config.md index 7455710..08975fa 100644 --- a/config.md +++ b/config.md @@ -1,7 +1,5 @@ # Описание параметров конфигурации сервера приложений -Файл /standalone/configuration/standalone.xml - ## Общие - `webbpm.security.login.case_sensitive`. Default value = true. Параметр отвечающий за чувствительность к регистру при обработке логина пользователя. @@ -12,6 +10,15 @@ - development - в этом режиме используется соединение к БД проекта, заданное в Studio. - production - в этом режиме используется соединение к БД проекта, заданное с помощью jndi имени. +## Модуль BPMN + +```bpmn.enable``` - по умолчанию true, отвечает за создание бинов использующих модуль bpmn (при флаге false можно убрать зависимости модуля, смотри **docs/ru/developer-guide/Отключение_bpmn_модуля.md**) + +Пример: +```xml + +``` + ## jBPM - `com.arjuna.ats.arjuna.allowMultipleLastResources` @@ -94,7 +101,7 @@ Проверить успешность авторизации principal-а можно командой `kinit -t -i http.keytab %principal%`. В случае успешной авторизации команда `klist` в качестве default principal которым проводилась авторизация. -После этого в standalone.xml поправить параметр `app.service-principal` на principal, которым успешно авторизовались. principal имеет формат: `HTTP/%hostname%@%REALM%` +После этого поправить параметр `app.service-principal` на principal, которым успешно авторизовались. principal имеет формат: `HTTP/%hostname%@%REALM%` Пример конфигурации: @@ -191,7 +198,7 @@ ... 69 more ``` - необходимо проверить правильность указанного в standalone.xml principal-а. + необходимо проверить правильность указанного principal-а. ### Комбинации нескольких способов аутентификации @@ -328,13 +335,13 @@ {"host":"host","port":1234,"login":"user","password":"password","from":"email_from","senderName":"sender_name","isSecured":true} ``` Почтовый сервер - зарегистрированный актуальный почтовый адрес. В поле password нужно указывать не пароль для входа в почту, а создать пароль для приложений в учетке почты и указать его. -2. Для включения регистрации добавьте в *standalone.xml* свойство +2. Для включения регистрации добавьте свойство ``` - +registration.enabled=true" ``` -3. Также в *standalone.xml* укажите ресурс для отправки писем для подтверждения регистрации (из п.1) +3. Укажите ресурс для отправки писем для подтверждения регистрации (из п.1) ``` - +mail.jndi.resource.name=java:comp/env/webbpm/testResource ``` 4. При необходимости, отредактируйте шаблон письма для подтверждения регистрации (resources/src/main/resources/mail/confirmation.html) @@ -483,8 +490,6 @@ public class Main { ## Настройка логов -Все настройки делаются в файле `standalone.xml`, если не указано иначе. - ### Общие настройки Платформа Web-bpm использует корневую категорию логирования `ru.cg.webbpm`, рекомендуется выставлять ее в уровень `info`. todo check prod config @@ -686,7 +691,6 @@ JBPM использует 3 корневых категории логирова - `dev_mode` - настройка задающая dev_mode для просмотра логов (true/false). При отсутствие оставляет значение при сборке - `guard.confirm_exit` - выводить или нет диалог подтверждения, если обнаружены несохраненные данные в форме. Значение по умолчанию - false. - `password.pattern` - Регулярное выражение для валидации пароля. -- `password_pattern_error` - Сообщение об ошибке валидации. - `show.client.errors` - отвечает за отображение ошибок javascript-a пользователю (должна использоваться только в тестовых контурах) по умолчанию выключена - 'available_task.single_fetch' - Отвечает за количество запросов available_task при завершении процесса. true - одиночный запрос, false/не указано - 10 запросов(старая реализация). @@ -701,19 +705,30 @@ JBPM использует 3 корневых категории логирова ### Esmart -- `electronic_sign.esmart_extension_url` - url для создания расширенной подписи. Подробная информация по ссылке [http://demo.esmart.ru](http://demo.esmart.ru) -- `electronic_sign.tsp_address` - адрес сервера службы штампов времени +- `electronic_sign.esmart_plugin.tsp_address` - url для создания расширенной подписи. Подробная информация по ссылке [http://demo.esmart.ru](http://demo.esmart.ru) +- `electronic_sign.cades_plugin.tsp_address` - адрес сервера службы штампов времени Пример: ```text -"electronic_sign.esmart_extension_url": "http://dsig.ibsdemo.ru/ibs_dsig/ibs_dSig.asmx" +"electronic_sign.esmart_plugin.tsp_address": " http://dsig.rubydemo.ru/ibs_dsig/ibs_dSig.asmx" ``` ## Способ аутентификации - `auth_method` - способ аутентификации. Может принимать одно значение из списка: form, kerberos, cert_over_db, cert_over_ldap +## Url проекта + +- `backend.url` - задает url для проека. Если параметра нет, то берется дефолтные: +``` +window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/backend' +``` +Пример: +``` +http://10.10.31.80:8080/ +``` + ## Таймер очистки закешированных значений фильтров - `filter_cleanup_interval_hours` - время жизни закешированного значения фильтра в часах. По умолчанию - 720 часов, diff --git a/config/.env b/config/.env new file mode 100644 index 0000000..5c4558f --- /dev/null +++ b/config/.env @@ -0,0 +1 @@ +IMAGE=eks-app:latest diff --git a/config/Dockerfile b/config/Dockerfile deleted file mode 100644 index 28a98c7..0000000 --- a/config/Dockerfile +++ /dev/null @@ -1,43 +0,0 @@ -FROM quay.io/wildfly/wildfly:26.1.3.Final-jdk17 -USER root -ARG POSTGRES_DRIVER_VERSION=42.7.3 -RUN yum-config-manager --disable base --disable extras --disable updates \ - && yum-config-manager --enable C7.8.2003-base --enable C7.8.2003-extras --enable C7.8.2003-updates \ - && yum -y --disableplugin=fastestmirror install sudo \ - && chown -R jboss: /opt/jboss/ - -USER jboss -WORKDIR $JBOSS_HOME -ENV JAVA_ARGS=-Xmx3g -RUN echo 'JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=1g"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.logmanager.nocolor=true"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS $JAVA_ARGS"' >> bin/standalone.conf - -### Locale support ru_RU ### -USER root -RUN localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 -RUN echo "LANG=\"ru_RU.UTF-8\"" > /etc/locale.conf -USER jboss -ENV LANG ru_RU.UTF-8 -ENV LANGUAGE ru_RU.UTF-8 -ENV LC_ALL ru_RU.UTF-8 -### Locale Support END ### - -COPY --chown=jboss entrypoint.sh . -COPY --chown=jboss patches patches -RUN (cd patches && wget https://repo.micord.ru/repository/libs-releases-local/org/jboss/ironjacamar/ironjacamar-core-impl/1.5.3.Final/ironjacamar-core-impl-1.5.3.Final.jar) -RUN (cd patches/system && wget https://repo1.maven.org/maven2/org/postgresql/postgresql/$POSTGRES_DRIVER_VERSION/postgresql-$POSTGRES_DRIVER_VERSION.jar -O postgresql-driver.jar) - -RUN chmod -R +x patches && \ - chmod +x entrypoint.sh && \ - ./entrypoint.sh && \ - rm -rf patches - -ENV SERVER_START=true -COPY --chown=jboss *.ear $JBOSS_HOME/standalone/deployments/ -COPY --chown=jboss *.war $JBOSS_HOME/standalone/deployments/ diff --git a/config/Dockerfile.build b/config/Dockerfile.build deleted file mode 100644 index 7fbc109..0000000 --- a/config/Dockerfile.build +++ /dev/null @@ -1,58 +0,0 @@ -FROM maven:3-openjdk-17-slim AS builder -RUN apt update \ - && apt upgrade -y \ - && curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \ - && apt install -y git nodejs \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /app -COPY ../ . -RUN mvn clean \ - && mvn package -T4C \ - && cd config-data-executor \ - && mvn clean \ - && mvn package -T4C - -FROM quay.io/wildfly/wildfly:26.1.3.Final-jdk17 -USER root -ARG POSTGRES_DRIVER_VERSION=42.7.3 -RUN yum-config-manager --disable base --disable extras --disable updates \ - && yum-config-manager --enable C7.8.2003-base --enable C7.8.2003-extras --enable C7.8.2003-updates \ - && yum -y --disableplugin=fastestmirror install sudo \ - && chown -R jboss: /opt/jboss/ - -USER jboss -WORKDIR $JBOSS_HOME -ENV JAVA_ARGS=-Xmx3g -RUN echo 'JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=1g"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:+ExplicitGCInvokesConcurrent"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:G1SummarizeRSetStatsPeriod=1"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.logmanager.nocolor=true"' >> bin/standalone.conf && \ - echo 'JAVA_OPTS="$JAVA_OPTS $JAVA_ARGS"' >> bin/standalone.conf - -### Locale support ru_RU ### -USER root -RUN localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 -RUN echo "LANG=\"ru_RU.UTF-8\"" > /etc/locale.conf -USER jboss -ENV LANG ru_RU.UTF-8 -ENV LANGUAGE ru_RU.UTF-8 -ENV LC_ALL ru_RU.UTF-8 -### Locale Support END ### - -COPY --chown=jboss config/entrypoint.sh . -COPY --chown=jboss config/patches patches -RUN (cd patches && wget https://repo.micord.ru/repository/libs-releases-local/org/jboss/ironjacamar/ironjacamar-core-impl/1.5.3.Final/ironjacamar-core-impl-1.5.3.Final.jar) -RUN (cd patches/system && wget https://repo1.maven.org/maven2/org/postgresql/postgresql/$POSTGRES_DRIVER_VERSION/postgresql-$POSTGRES_DRIVER_VERSION.jar -O postgresql-driver.jar) - -RUN chmod -R +x patches && \ - chmod +x entrypoint.sh && \ - ./entrypoint.sh && \ - rm -rf patches - -ENV SERVER_START=true -COPY --from=builder --chown=jboss /app/distribution/target/*.ear $JBOSS_HOME/standalone/deployments/ -COPY --from=builder --chown=jboss /app/config-data-executor/target/*.war $JBOSS_HOME/standalone/deployments/ diff --git a/config/Dockerfile.tc b/config/Dockerfile.tc new file mode 100644 index 0000000..a349cb8 --- /dev/null +++ b/config/Dockerfile.tc @@ -0,0 +1,18 @@ +ARG RUNTIME_IMAGE=reg.gitlab.micord.ru/common/base/alt/alt-p11-jre17:latest + +FROM $RUNTIME_IMAGE + +RUN apt-get update \ + && apt-get -y install nginx + +ENV BACKEND_URL=http://localhost:8080 +ENV CONFIG_DATA_EXECUTOR_URL=http://localhost:8080/api + +COPY nginx.conf /etc/nginx/nginx.conf +COPY dist /usr/share/nginx/html +COPY backend.jar /home/app/backend.jar +COPY config-data-executor.jar /home/app/cde.jar + +EXPOSE 80 + +ENTRYPOINT ["java", "-jar", "/home/app/backend.jar"] diff --git a/config/NODEJS_version b/config/NODEJS_version new file mode 100644 index 0000000..9a2a0e2 --- /dev/null +++ b/config/NODEJS_version @@ -0,0 +1 @@ +v20 diff --git a/config/application.yaml b/config/application.yaml new file mode 100644 index 0000000..71eac1c --- /dev/null +++ b/config/application.yaml @@ -0,0 +1,88 @@ +config: + data: + executor: + socket: + timeout: 10 + connection: + timeout: 10 + url: http://localhost:8080/api +webbpm: + mode: development + security: + token: + secret: + key: de2c9de3-0de5-47c1-a8de-0fad6f93873b-com.example-ervu_eks_5-17_10_2025_13:18 +server: + servlet: + context-path: /ervu-eks +bpmn: + enable: false +gar: + enable: false +fias: + enable: false +spring: + mvc: + servlet: + loadOnStartup: 1 + jackson: + serialization: + write-dates-as-timestamps: false + write-enums-using-to-string: true + deserialization: + read-enums-using-to-string: true + task: + scheduling: + pool: + size: 12 + datasource: + person: + url: jdbc:postgresql://127.0.0.1:5432/person_registry + username: ${SPRING_DATASOURCE_PERSON_USERNAME} + password: ${SPRING_DATASOURCE_PERSON_PASSWORD} + driverClassName: org.postgresql.Driver + dbBeanPackage: com.example.ervu_eks_5.db_beans.person + sqlDialect: POSTGRES + default: false + manually: true + schemas: + - public + security: + url: jdbc:postgresql://127.0.0.1:5432/ervu_eks + username: ${SPRING_DATASOURCE_SECURITY_USERNAME} + password: ${SPRING_DATASOURCE_SECURITY_PASSWORD} + driverClassName: org.postgresql.Driver + dbBeanPackage: com.example.ervu_eks_5.db_beans.security + sqlDialect: POSTGRES + maxSize: 7 + metricsEnabled: true + default: true + manually: true + schemas: + - security +monitoring: + white: + ip: + list: 127.0.0.1, 0:0:0:0:0:0:0:1 +management: + endpoints: + web: + exposure: + include: info,health,metrics,prometheus + metrics: + export: + prometheus: + enabled: true +logging: + level: + root: INFO + org: + jooq: + tools: DEBUG + ru: + cg: + webbpm: + modules: + database: + impl: + analytics: DEBUG diff --git a/config/db.env b/config/db.env deleted file mode 100644 index ed18bf6..0000000 --- a/config/db.env +++ /dev/null @@ -1,20 +0,0 @@ -# App datasource -DB_APP_NAME=ervu_eks -DB_APP_HOST=db -DB_APP_PORT=5432 -DB_APP_USERNAME=ervu_eks -DB_APP_PASSWORD=ervu_eks - -# Security datasource -DB_SEC_NAME=ervu_eks -DB_SEC_HOST=db -DB_SEC_PORT=5432 -DB_SEC_USERNAME=ervu_eks_sec -DB_SEC_PASSWORD=ervu_eks_sec - -# Person datasource -DB_PERSON_NAME=person_registry -DB_PERSON_HOST=10.10.31.118 -DB_PERSON_PORT=5432 -DB_PERSON_USERNAME=ervu -DB_PERSON_PASSWORD=ervu diff --git a/config/docker-compose.db.yaml b/config/docker-compose.db.yaml deleted file mode 100644 index b1a08cb..0000000 --- a/config/docker-compose.db.yaml +++ /dev/null @@ -1,31 +0,0 @@ -version: "3" -services: - db: - image: postgres:15-bullseye - volumes: - - ./initdb.d:/docker-entrypoint-initdb.d - - db-data:/var/lib/postgresql/data - command: - - "--max_prepared_transactions=100" - ports: - - "127.0.0.1:5432:5432" - environment: - - POSTGRES_PASSWORD=supersecretpassword - - TZ="Europe/Moscow" - - webbpm-app: - image: ervu-eks:latest - depends_on: - - db - ports: - - "127.0.0.1:9990:9990" - - "127.0.0.1:8080:8080" - volumes: - - ./cde-xml:/cde-xml - environment: - - TZ="Europe/Moscow" - env_file: - - db.env - -volumes: - db-data: diff --git a/config/docker-compose.tc.yaml b/config/docker-compose.tc.yaml new file mode 100644 index 0000000..f01181d --- /dev/null +++ b/config/docker-compose.tc.yaml @@ -0,0 +1,34 @@ +#version: "3" +services: + eks-backend: + build: + dockerfile: Dockerfile.tc + entrypoint: ["java", "-jar", "/home/app/backend.jar"] + environment: + - TZ="Europe/Moscow" + - CONFIG_DATA_EXECUTOR_URL=http://eks-cde:8080/api + env_file: + - tc.env + + eks-frontend: + build: + dockerfile: Dockerfile.tc + depends_on: + - eks-backend + ports: + - "80" + entrypoint: ["nginx", "-g", "daemon off;"] + environment: + - TZ="Europe/Moscow" + + eks-cde: + build: + dockerfile: Dockerfile.tc + entrypoint: ["java", "-jar", "/home/app/cde.jar"] + volumes: + - ./cde-xml:/cde-xml + environment: + - CONFIGDIRECTORY=/cde-xml + +volumes: + db-data: diff --git a/config/docker-compose.yaml b/config/docker-compose.yaml index 8306fba..4e02b55 100644 --- a/config/docker-compose.yaml +++ b/config/docker-compose.yaml @@ -1,14 +1,45 @@ -version: "3" services: - webbpm-app: - build: - context: . - dockerfile: Dockerfile + db: + image: postgres:15-bullseye + volumes: + - ./initdb.d:/docker-entrypoint-initdb.d + - db-data:/var/lib/postgresql/data + command: + - "--max_prepared_transactions=100" + ports: + - "127.0.0.1:5432:5432" + environment: + - POSTGRES_PASSWORD=supersecretpassword + - TZ="Europe/Moscow" + + eks-backend: + image: ${IMAGE:-eks-app:latest} + depends_on: + - db + entrypoint: ["java", "-jar", "/home/app/backend.jar"] + environment: + - TZ="Europe/Moscow" + - CONFIG_DATA_EXECUTOR_URL=http://eks-cde:8080/api + env_file: + - eks.env + + eks-frontend: + image: ${IMAGE:-eks-app:latest} + depends_on: + - eks-backend + ports: + - "127.0.0.1:8080:80" + entrypoint: ["nginx", "-g", "daemon off;"] + environment: + - TZ="Europe/Moscow" + + eks-cde: + image: ${IMAGE:-eks-app:latest} + entrypoint: ["java", "-jar", "/home/app/cde.jar"] volumes: - ./cde-xml:/cde-xml - ports: - - 8080 - - 8787 - - 9990 - env_file: - - micord.env + environment: + - CONFIGDIRECTORY=/cde-xml + +volumes: + db-data: diff --git a/config/eks.env b/config/eks.env new file mode 100644 index 0000000..9eba713 --- /dev/null +++ b/config/eks.env @@ -0,0 +1,41 @@ +CONFIG_DATA_EXECUTOR_SOCKET_TIMEOUT=10 +CONFIG_DATA_EXECUTOR_CONNECTION_TIMEOUT=10 +CONFIG_DATA_EXECUTOR_URL=http://localhost:8080/api +WEBBPM_MODE=development +WEBBPM_SECURITY_TOKEN_SECRET_KEY=de2c9de3-0de5-47c1-a8de-0fad6f93873b-com.example-ervu_eks_5-17_10_2025_13:18 +SERVER_SERVLET_CONTEXT_PATH=/ervu-eks +BPMN_ENABLE=false +GAR_ENABLE=false +FIAS_ENABLE=false +SPRING_MVC_SERVLET_LOADONSTARTUP=1 +SPRING_JACKSON_SERIALIZATION_WRITEDATESASTIMESTAMPS=false +SPRING_JACKSON_SERIALIZATION_WRITEENUMSUSINGTOSTRING=true +SPRING_JACKSON_DESERIALIZATION_READENUMSUSINGTOSTRING=true +SPRING_TASK_SCHEDULING_POOL_SIZE=12 + +SPRING_DATASOURCE_PERSON_URL=jdbc:postgresql://10.10.31.118:5432/person_registry +SPRING_DATASOURCE_PERSON_USERNAME=ervu +SPRING_DATASOURCE_PERSON_PASSWORD=ervu +SPRING_DATASOURCE_PERSON_DRIVERCLASSNAME=org.postgresql.Driver +SPRING_DATASOURCE_PERSON_DBBEANPACKAGE=com.example.ervu_eks_5.db_beans.person +SPRING_DATASOURCE_PERSON_SQLDIALECT=POSTGRES +SPRING_DATASOURCE_PERSON_DEFAULT=false +SPRING_DATASOURCE_PERSON_MANUALLY=true + +SPRING_DATASOURCE_SECURITY_URL=jdbc:postgresql://db:5432/ervu_eks +SPRING_DATASOURCE_SECURITY_USERNAME=ervu_eks_sec +SPRING_DATASOURCE_SECURITY_PASSWORD=ervu_eks_sec +SPRING_DATASOURCE_SECURITY_DRIVERCLASSNAME=org.postgresql.Driver +SPRING_DATASOURCE_SECURITY_DBBEANPACKAGE=com.example.ervu_eks_5.db_beans.security +SPRING_DATASOURCE_SECURITY_SQLDIALECT=POSTGRES +SPRING_DATASOURCE_SECURITY_MAXSIZE=7 +SPRING_DATASOURCE_SECURITY_METRICSENABLED=true +SPRING_DATASOURCE_SECURITY_DEFAULT=true +SPRING_DATASOURCE_SECURITY_MANUALLY=true + +MONITORING_WHITE_IP_LIST=127.0.0.1, 0:0:0:0:0:0:0:1 +MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE=info,health,metrics,prometheus +MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED=true +LOGGING_LEVEL_ROOT=INFO +LOGGING_LEVEL_ORG_JOOQ_TOOLS=DEBUG +LOGGING_LEVEL_RU_CG_WEBBPM_MODULES_DATABASE_IMPL_ANALYTICS=DEBUG diff --git a/config/entrypoint.sh b/config/entrypoint.sh deleted file mode 100644 index 7178804..0000000 --- a/config/entrypoint.sh +++ /dev/null @@ -1,48 +0,0 @@ -#! /bin/bash -set -e - -function wait_for_server() { - until `$JBOSS_HOME/bin/jboss-cli.sh -c ":read-attribute(name=server-state)" 2> /dev/null | grep -q running`; do - echo "Retry ..." - done -} - -echo "dump environment variables to env.properties file" -printenv > env.properties - -echo "starting JBoss" -nohup $JBOSS_HOME/bin/standalone.sh --admin-only 1>&2 2>/dev/null & - -# running system patches -wait_for_server -$JBOSS_HOME/bin/jboss-cli.sh --connect --file="./patches/system/init.cli" --properties=env.properties -$JBOSS_HOME/bin/jboss-cli.sh --connect --file="./patches/system/add-postgresql-driver.cli" --properties=env.properties -bash "./patches/system/add-demo-user.sh" - -# running project patches -find ./patches/ -type f -name '*.cli' -not -path './patches/system/*' -print0 | -while IFS= read -r -d '' f; do - wait_for_server - echo "running $f" - $JBOSS_HOME/bin/jboss-cli.sh --connect --file="$f" --properties=env.properties -done; - -find ./patches/ -type f -name '*.sh' -not -path './patches/system/*' -print0 | -while IFS= read -r -d '' f; do - wait_for_server - echo "running $f" - bash "$f" -done - -echo "stopping JBoss" -wait_for_server -$JBOSS_HOME/bin/jboss-cli.sh --connect --command=:shutdown - -if ! [[ -z $SERVER_START ]]; then - echo "starting JBoss in standalone" - sleep 10 # without this occurs error "address already in use" - /opt/jboss/wildfly/bin/standalone.sh -c standalone.xml -b 0.0.0.0 -bmanagement 0.0.0.0 -else - echo "cleaning up JBoss logs" - rm -rf $JBOSS_HOME/standalone/log -fi diff --git a/config/micord.env b/config/micord.env deleted file mode 100644 index 0827e7a..0000000 --- a/config/micord.env +++ /dev/null @@ -1,22 +0,0 @@ -TZ=Europe/Moscow - -# App datasource -DB_APP_USERNAME=ervu_eks -DB_APP_PASSWORD=ervu_eks -DB_APP_HOST=10.10.31.118 -DB_APP_PORT=5432 -DB_APP_NAME=ervu_eks - -# Security datasource -DB_SEC_USERNAME=ervu_eks_sec -DB_SEC_PASSWORD=ervu_eks_sec -DB_SEC_HOST=10.10.31.118 -DB_SEC_PORT=5432 -DB_SEC_NAME=ervu_eks - -# Person datasource -DB_PERSON_USERNAME=ervu -DB_PERSON_PASSWORD=ervu -DB_PERSON_HOST=10.10.31.118 -DB_PERSON_PORT=5432 -DB_PERSON_NAME=person_registry diff --git a/config/nginx.conf b/config/nginx.conf new file mode 100644 index 0000000..76c1450 --- /dev/null +++ b/config/nginx.conf @@ -0,0 +1,88 @@ +include /etc/nginx/modules-enabled.d/*.conf; + +worker_processes 10; + +error_log /var/log/nginx/error.log; + +events { + worker_connections 1024; +} + +include /etc/nginx/conf-enabled.d/*.conf; + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + sendfile on; + + gzip on; + gzip_types text/plain text/css text/xml application/x-javascript application/atom+xml; + + log_format nginx_main + '$remote_addr - $remote_user [$time_local] $request ' + '"$status" $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" ' + '"$request_filename" "$gzip_ratio" $upstream_response_time server: $host : $document_root $fastcgi_script_name '; + + server { + listen 80 default; + + access_log /var/log/nginx/access.log nginx_main; + error_log /var/log/nginx/error.log error; + + root /usr/share/nginx/html; + charset utf-8; + client_max_body_size 32m; + + gzip on; + gzip_disable "msie6"; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_min_length 256; + gzip_types + application/atom+xml + application/geo+json + application/javascript + application/x-javascript + application/json + application/ld+json + application/manifest+json + application/rdf+xml + application/rss+xml + application/xhtml+xml + application/xml + font/eot + font/otf + font/ttf + image/svg+xml + text/css + text/javascript + text/plain + text/xml; + + location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc|woff2|woff|ttf)$ { + expires 1M; + access_log off; + add_header Cache-Control "max-age=2629746, public"; + } + + location /ervu-eks/ { + proxy_pass http://eks-backend:8080/ervu-eks/; + proxy_set_header Accept application/json; + add_header Content-Type application/json; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location = /health { + access_log off; + add_header 'Content-Type' 'application/json'; + return 200 '{"status":"UP"}'; + } + } +} diff --git a/config/patches/add-logger-database.cli b/config/patches/add-logger-database.cli deleted file mode 100644 index 83ee893..0000000 --- a/config/patches/add-logger-database.cli +++ /dev/null @@ -1,3 +0,0 @@ -/subsystem=logging/logger=org.jooq.tools:add() -/subsystem=logging/logger=org.jooq.tools:write-attribute(name=level, value=DEBUG) -/subsystem=logging/logger=org.jooq.tools:add-handler(name=CONSOLE) \ No newline at end of file diff --git a/config/patches/default.cli b/config/patches/default.cli deleted file mode 100644 index 9394dd1..0000000 --- a/config/patches/default.cli +++ /dev/null @@ -1,68 +0,0 @@ -xa-data-source add \ - --name=AppDS \ - --enabled=true \ - --driver-name=postgresql \ - --jndi-name=java:/webbpm/AppDS \ - --user-name=${env.DB_APP_USERNAME:app_user} \ - --password=${env.DB_APP_PASSWORD:apppassword} \ - --use-ccm=true \ - --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker \ - --validate-on-match=false \ - --background-validation=true \ - --background-validation-millis=5000 \ - --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter \ - --statistics-enabled=true \ - --max-pool-size=50 \ - --query-timeout=300 \ - --xa-datasource-properties=ServerName=${env.DB_APP_HOST:db},PortNumber=${env.DB_APP_PORT:5432},DatabaseName=${env.DB_APP_NAME:app} - -xa-data-source add \ - --name=SECURITYDS \ - --enabled=true \ - --driver-name=postgresql \ - --jndi-name=java:/webbpm/security-ds \ - --user-name=${env.DB_SEC_USERNAME:security_user} \ - --password=${env.DB_SEC_PASSWORD:secpassword} \ - --max-pool-size=70 \ - --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker \ - --validate-on-match=false \ - --background-validation=true \ - --background-validation-millis=5000 \ - --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter \ - --statistics-enabled=true \ - --query-timeout=300 \ - --xa-datasource-properties=ServerName=${env.DB_SEC_HOST:db},PortNumber=${env.DB_SEC_PORT:5432},DatabaseName=${env.DB_SEC_NAME:app} - -data-source add \ - --name=PERSONDS \ - --enabled=true \ - --driver-name=postgresql \ - --connection-url=jdbc:postgresql://${env.DB_PERSON_HOST:db}:${env.DB_PERSON_PORT:5432}/${env.DB_PERSON_NAME:person_registry} \ - --jndi-name=java:/webbpm/personRegistryDS \ - --user-name=${env.DB_PERSON_USERNAME:ervu} \ - --password=${env.DB_PERSON_PASSWORD:ervu} \ - --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker \ - --validate-on-match=false \ - --background-validation=true \ - --background-validation-millis=5000 \ - --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter \ - --statistics-enabled=true \ - --query-timeout=300 \ - --max-pool-size=10 - -/system-property=ldap.mapping.login.param:add(value=${env.WEBBPM_LDAP_LOGIN_ATTR:uid}) -/system-property=ldap.mapping.org.code.param:add(value=${env.WEBBPM_LDAP_ORGANIZATION_ATTR:ou}) -/system-property=jboss.as.management.blocking.timeout:add(value=900) -/subsystem=undertow/server=default-server/http-listener=default/:write-attribute(name=record-request-start-time,value=true) -/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add(pattern=%h %t "%r" %s %b %D) -/system-property=webbpm.cache.hazelcast.hosts:add(value="127.0.0.1") -/system-property=webbpm.cache.hazelcast.outbound_port_definitions:add(value="5801-5820") -/system-property=webbpm.security.session.active.count:add(value="20") -/system-property=security.password.regex:add(value="^((?=(.*\\d){1,})(?=.*[a-zа-яё])(?=.*[A-ZА-ЯЁ]).{8,})$") -/system-property=gar.enable:add(value=false) -/system-property=fias.enable:add(value=false) -/system-property=bpmn.enable:add(value=false) -/system-property=config.data.executor.url:add(value="http://localhost:8080/config-data-executor/api") -/system-property=config.data.executor.socket.timeout:add(value="10") -/system-property=config.data.executor.connection.timeout:add(value="10") -/system-property=configDirectory:add(value="/cde-xml") diff --git a/config/patches/system/add-demo-user.sh b/config/patches/system/add-demo-user.sh deleted file mode 100644 index 32b2986..0000000 --- a/config/patches/system/add-demo-user.sh +++ /dev/null @@ -1 +0,0 @@ -$JBOSS_HOME/bin/add-user.sh demo@example.com demo diff --git a/config/patches/system/add-postgresql-driver.cli b/config/patches/system/add-postgresql-driver.cli deleted file mode 100644 index 66566bf..0000000 --- a/config/patches/system/add-postgresql-driver.cli +++ /dev/null @@ -1,5 +0,0 @@ -/subsystem=datasources/jdbc-driver=postgresql:add( \ - driver-name="postgresql", \ - driver-module-name="org.postgresql", \ - driver-xa-datasource-class-name="org.postgresql.xa.PGXADataSource" \ -) diff --git a/config/patches/system/init.cli b/config/patches/system/init.cli deleted file mode 100644 index 100c4d3..0000000 --- a/config/patches/system/init.cli +++ /dev/null @@ -1,14 +0,0 @@ -/system-property=webbpm.mode:add(value=production) -/system-property=authentication.method:add(value=form) -/subsystem=undertow/configuration=filter/gzip=gzipFilter:add() -/subsystem=undertow/server=default-server/host=default-host/\ - filter-ref=gzipFilter:add(predicate="exists('%{o,Content-Type}') and regex(pattern='(?:application/javascript|text/css|text/html|text/xml|application/json)(;.*)?', value=%{o,Content-Type}, full-match=true)") -/subsystem=undertow/configuration=filter/response-header=vary-header:add(header-name="Vary", header-value="Accept-Encoding") -/subsystem=undertow/server=default-server/host=default-host/filter-ref=vary-header:add() -/subsystem=undertow/server=default-server/http-listener=default/:write-attribute(name=max-post-size,value=${env.MAX_POST_SIZE:104857600}) -data-source remove --name=ExampleDS -/subsystem=ee/service=default-bindings:remove -/system-property=jboss.bind.address.management:add(value=0.0.0.0) -/system-property=jboss.bind.address:add(value=0.0.0.0) -module add --name=org.postgresql --resources=./patches/system/postgresql-driver.jar --dependencies=javax.api,javax.transaction.api -shutdown --restart diff --git a/config/settings.xml b/config/settings.xml new file mode 100644 index 0000000..f455f09 --- /dev/null +++ b/config/settings.xml @@ -0,0 +1,19 @@ + + + + rtsk-ext + rtsk ext + https://nexus.ervu.rt-sk.ru/repository/micord-maven/ + micord + + + central + Central mirror + https://nexus.ervu.rt-sk.ru/repository/maven-public/ + * + + + diff --git a/config/standalone.xml b/config/standalone.xml deleted file mode 100644 index c7534f1..0000000 --- a/config/standalone.xml +++ /dev/null @@ -1,590 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10.10.31.118 - 5432 - ervu_eks - postgresql - - ervu_eks - ervu_eks - - - - false - true - 5000 - - - - - 10.10.31.118 - 5432 - ervu_eks - postgresql - - ervu_eks_sec - ervu_eks_sec - - - - false - true - 5000 - - - - - - jdbc:postgresql://10.10.31.118:5432/person_registry - postgresql - - ervu - ervu - - - - false - true - 5000 - - - - 300 - - - - - org.h2.jdbcx.JdbcDataSource - - - org.postgresql.xa.PGXADataSource - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${jboss.bind.address:127.0.0.1} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/distribution/pom.xml b/distribution/pom.xml deleted file mode 100644 index 8f0c61b..0000000 --- a/distribution/pom.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - 4.0.0 - - ru.micord.ervu - eks - 1.0.0-SNAPSHOT - - - ru.micord.ervu.eks - distribution - ear - - - /backend - - - - - ru.micord.ervu.eks - backend - war - - - ru.micord.ervu.eks - frontend - war - - - - - - - org.apache.maven.plugins - maven-ear-plugin - 3.2.0 - - - - ru.micord.ervu.eks - frontend - / - frontend.war - - - ru.micord.ervu.eks - backend - ${backendContext} - backend.war - - - - - - ${project.parent.artifactId} - - - - - enable-version-in-url - - /backend-${project.version} - - - - diff --git a/distribution/src/main/application/META-INF/jboss-deployment-structure.xml b/distribution/src/main/application/META-INF/jboss-deployment-structure.xml deleted file mode 100644 index 85df0d6..0000000 --- a/distribution/src/main/application/META-INF/jboss-deployment-structure.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..fecfda5 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,12 @@ +# frameworks dirs +.angular +.nx + +# compiled output +dist +tmp +out-tsc + +# generated by webbpm +tsconfig.base.json +src/ts/page.routing.ts diff --git a/frontend/.nxignore b/frontend/.nxignore new file mode 100644 index 0000000..66855db --- /dev/null +++ b/frontend/.nxignore @@ -0,0 +1,3 @@ +!modules/generated/ +!tsconfig.base.json +!src/ts/page.routing.ts diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 0000000..113709c --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,6 @@ +# Add files here to ignore them from prettier formatting +/dist +/coverage +/.nx/cache +/.nx/workspace-data +.angular diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..544138b --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/frontend/angular.json b/frontend/angular.json deleted file mode 100644 index 965697d..0000000 --- a/frontend/angular.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "webbpm-frontend": { - "root": "", - "sourceRoot": "src", - "projectType": "application", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:browser", - "options": { - "outputPath": "dist", - "index": "src/index.html", - "main": "src/ts/main.ts", - "tsConfig": "src/tsconfig.json", - "polyfills": "src/ts/polyfills.ts", - "assets": [ - "src/resources" - ], - "styles": [ - ], - "scripts": [ - "node_modules/jquery/dist/jquery.min.js", - "node_modules/moment/min/moment-with-locales.js", - "node_modules/moment-timezone/builds/moment-timezone-with-data.min.js", - "node_modules/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js", - "node_modules/selectize/dist/js/standalone/selectize.min.js", - "node_modules/downloadjs/download.min.js" - ] - }, - "configurations": { - "production": { - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "extractCss": true, - "namedChunks": false, - "aot": true, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true - } - } - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "webbpm-frontend:build" - }, - "configurations": {} - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "webbpm-frontend:build" - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [], - "exclude": [] - } - } - } - } - }, - "defaultProject": "webbpm-frontend" -} diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs new file mode 100644 index 0000000..11c4f9b --- /dev/null +++ b/frontend/eslint.config.mjs @@ -0,0 +1,42 @@ +import nx from '@nx/eslint-plugin'; + +export default [ + ...nx.configs['flat/base'], + ...nx.configs['flat/typescript'], + ...nx.configs['flat/javascript'], + { + ignores: ['**/dist'], + }, + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'], + rules: { + '@nx/enforce-module-boundaries': [ + 'error', + { + enforceBuildableLibDependency: true, + allow: ['^.*/eslint(\\.base)?\\.config\\.[cm]?js$'], + depConstraints: [ + { + sourceTag: '*', + onlyDependOnLibsWithTags: ['*'], + }, + ], + }, + ], + }, + }, + { + files: [ + '**/*.ts', + '**/*.tsx', + '**/*.cts', + '**/*.mts', + '**/*.js', + '**/*.jsx', + '**/*.cjs', + '**/*.mjs', + ], + // Override or add rules here + rules: {}, + }, +]; diff --git a/frontend/index.html b/frontend/index.html index a3f48ff..11438fe 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,23 +1,14 @@ - - - - ervu-eks - - - - - - - - - - - - -
- - + + + + ervu-eks + + + + + + +
+
+ + diff --git a/frontend/index.webpack.html b/frontend/index.webpack.html deleted file mode 100644 index c98f47a..0000000 --- a/frontend/index.webpack.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - ervu-eks - - - - -
- - diff --git a/frontend/modules/shared/ng-package.json b/frontend/modules/shared/ng-package.json new file mode 100644 index 0000000..18d8ea2 --- /dev/null +++ b/frontend/modules/shared/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/modules/shared", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/frontend/modules/shared/package.json b/frontend/modules/shared/package.json new file mode 100644 index 0000000..be592ad --- /dev/null +++ b/frontend/modules/shared/package.json @@ -0,0 +1,12 @@ +{ + "name": "shared", + "version": "0.0.1", + "scripts": { + "generate-barrels": "npx barrelsby -D -d src -n index.ts -i src -e \"\\.spec\\.ts$\" \"\\.d\\.ts$\"" + }, + "peerDependencies": { + "@angular/common": "19.2.7", + "@angular/core": "19.2.7" + }, + "sideEffects": false +} diff --git a/frontend/modules/shared/project.json b/frontend/modules/shared/project.json new file mode 100644 index 0000000..ddc1552 --- /dev/null +++ b/frontend/modules/shared/project.json @@ -0,0 +1,29 @@ +{ + "name": "shared", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "modules/shared/src", + "prefix": "lib", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/angular:ng-packagr-lite", + "outputs": ["{workspaceRoot}/dist/{projectRoot}"], + "options": { + "project": "modules/shared/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "modules/shared/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "modules/shared/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/frontend/modules/shared/src/index.ts b/frontend/modules/shared/src/index.ts new file mode 100644 index 0000000..207aece --- /dev/null +++ b/frontend/modules/shared/src/index.ts @@ -0,0 +1,13 @@ +/** + * @file Automatically generated by barrelsby. + */ + +export * from "./lib/shared.module"; +export * from "./lib/component/app-progress-indication.component"; +export * from "./lib/component/ConfigExecuteBtn"; +export * from "./lib/component/ExportDataBtn"; +export * from "./lib/generated/dto/ConfigExecuteRequest"; +export * from "./lib/generated/dto/ExportDataRequest"; +export * from "./lib/generated/rpc/ConfigExecutorRpcService"; +export * from "./lib/generated/rpc/ExportDataRpcService"; +export * from "./lib/service/app-progress-indication.service"; diff --git a/frontend/src/resources/template/app/component/ConfigExecuteBtn.html b/frontend/modules/shared/src/lib/component/ConfigExecuteBtn.html similarity index 100% rename from frontend/src/resources/template/app/component/ConfigExecuteBtn.html rename to frontend/modules/shared/src/lib/component/ConfigExecuteBtn.html diff --git a/frontend/src/ts/ervu/ConfigExecuteBtn.ts b/frontend/modules/shared/src/lib/component/ConfigExecuteBtn.ts similarity index 93% rename from frontend/src/ts/ervu/ConfigExecuteBtn.ts rename to frontend/modules/shared/src/lib/component/ConfigExecuteBtn.ts index 47573a2..b5b5b20 100644 --- a/frontend/src/ts/ervu/ConfigExecuteBtn.ts +++ b/frontend/modules/shared/src/lib/component/ConfigExecuteBtn.ts @@ -14,10 +14,10 @@ import {ConfigExecuteRequest} from "../generated/dto/ConfigExecuteRequest"; * @author: a.petrov */ @Component({ - moduleId: module.id, selector: 'config-execute-button-component', - templateUrl: './../../../src/resources/template/app/component/ConfigExecuteBtn.html', - changeDetection: ChangeDetectionStrategy.OnPush + templateUrl: './ConfigExecuteBtn.html', + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false }) export class ConfigExecuteBtn extends AbstractButton { diff --git a/frontend/src/ts/ervu/ExportDataBtn.ts b/frontend/modules/shared/src/lib/component/ExportDataBtn.ts similarity index 91% rename from frontend/src/ts/ervu/ExportDataBtn.ts rename to frontend/modules/shared/src/lib/component/ExportDataBtn.ts index dffc618..1b2b6d8 100644 --- a/frontend/src/ts/ervu/ExportDataBtn.ts +++ b/frontend/modules/shared/src/lib/component/ExportDataBtn.ts @@ -17,10 +17,10 @@ import {ExportDataRequest} from "../generated/dto/ExportDataRequest"; * @author: kochetkov */ @Component({ - moduleId: module.id, selector: 'export-data-button-component', - templateUrl: './../../../src/resources/template/app/component/ConfigExecuteBtn.html', - changeDetection: ChangeDetectionStrategy.OnPush + templateUrl: './ConfigExecuteBtn.html', + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false }) export class ExportDataBtn extends AbstractButton { diff --git a/frontend/modules/shared/src/lib/component/app-progress-indication.component.ts b/frontend/modules/shared/src/lib/component/app-progress-indication.component.ts new file mode 100644 index 0000000..3dd5758 --- /dev/null +++ b/frontend/modules/shared/src/lib/component/app-progress-indication.component.ts @@ -0,0 +1,11 @@ +import {ChangeDetectionStrategy, Component} from "@angular/core"; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + selector: 'progress-indication-dialog-content', + templateUrl: './progress-indication.html', + standalone: false +}) +export class AppProgressIndicationComponent { + +} diff --git a/frontend/src/resources/template/app/component/progress-indication.html b/frontend/modules/shared/src/lib/component/progress-indication.html similarity index 96% rename from frontend/src/resources/template/app/component/progress-indication.html rename to frontend/modules/shared/src/lib/component/progress-indication.html index 95a901e..7654c98 100644 --- a/frontend/src/resources/template/app/component/progress-indication.html +++ b/frontend/modules/shared/src/lib/component/progress-indication.html @@ -1,3 +1,3 @@ -