From 89d03ac7d39cc6ddcfebe14d5c7ebacd6a4ebc8f Mon Sep 17 00:00:00 2001 From: samnix-p Date: Mon, 29 Mar 2021 17:13:20 +0300 Subject: [PATCH 1/2] add nab HelloWorld --- back/.gitkeep | 0 back/README.md | 34 ++++- back/pom.xml | 130 ++++++++++++++++++ back/src/etc/service.properties | 16 +++ back/src/main/java/ru/gowork/App.java | 19 +++ .../ru/gowork/config/LogbackConfigurator.java | 13 ++ .../java/ru/gowork/config/ProdConfig.java | 15 ++ .../ru/gowork/entity/HelloWorldEntity.java | 26 ++++ .../ru/gowork/resource/ExampleResource.java | 37 +++++ .../ch.qos.logback.classic.spi.Configurator | 1 + 10 files changed, 290 insertions(+), 1 deletion(-) delete mode 100644 back/.gitkeep create mode 100644 back/pom.xml create mode 100644 back/src/etc/service.properties create mode 100644 back/src/main/java/ru/gowork/App.java create mode 100644 back/src/main/java/ru/gowork/config/LogbackConfigurator.java create mode 100644 back/src/main/java/ru/gowork/config/ProdConfig.java create mode 100644 back/src/main/java/ru/gowork/entity/HelloWorldEntity.java create mode 100644 back/src/main/java/ru/gowork/resource/ExampleResource.java create mode 100644 back/src/main/resources/META-INF/services/ch.qos.logback.classic.spi.Configurator diff --git a/back/.gitkeep b/back/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/back/README.md b/back/README.md index 3a4773a..7a7b7ba 100644 --- a/back/README.md +++ b/back/README.md @@ -1,4 +1,4 @@ -## Run development environment +# Run development environment 1. Install Docker and docker-compose 2. Run the containers: ``` @@ -8,3 +8,35 @@ docker-compose up -d ``` docker-compose exec postgres psql -U hh -d hh -c 'SELECT * FROM students' ``` + +# HelloWorld nab +## Сборка docker образа + +Выкачиваем готовый образ с java 11 и последней версией maven с docker hub: +``` +docker pull maven:3.6.3-jdk-11 +``` + +## Создание volume для maven repo + +``` +docker volume create --name maven-repo +``` + +## Работа с docker + +### Linux: + +Сборка и запуск приложения: +``` +docker run --rm -v maven-repo:/root/.m2 -v $PWD:/mnt/app:Z -w /mnt/app -p 8080:8080 -it maven:3.6.3-jdk-11 mvn install exec:java +``` + +Только запуск приложения: +``` +docker run --rm -v maven-repo:/root/.m2 -v $PWD:/mnt/app:Z -w /mnt/app -p 8080:8080 -it maven:3.6.3-jdk-11 mvn exec:java +``` + +### Windows: + +Заменить в вызовых команд `$PWD` на `%cd%` diff --git a/back/pom.xml b/back/pom.xml new file mode 100644 index 0000000..577902e --- /dev/null +++ b/back/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + ru.gowork + back + 1.0-SNAPSHOT + + jar + + + 4.22.20 + + + + + hh-public + hh public releases repository + http://m2.hh.ru/content/repositories/public-releases + + true + + + false + + + + + + + ru.hh.nab + nab-starter + ${nab.version} + + + + ru.hh.nab + nab-hibernate + ${nab.version} + + + ru.hh.nab + nab-testbase + ${nab.version} + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + true + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.2 + + ${project.artifactId} + + + + + ru.gowork.App + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + package + + shade + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + ${basedir}/src/etc + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + + java + + + + + + + settingsDir + src/etc + + + ru.gowork.App + + + + + diff --git a/back/src/etc/service.properties b/back/src/etc/service.properties new file mode 100644 index 0000000..88540f2 --- /dev/null +++ b/back/src/etc/service.properties @@ -0,0 +1,16 @@ +serviceName=backend +datacenter=testDC + +jetty.port=8080 + +log.immediate.flush=true +log.toConsole=true +log.timings=false + +consul.http.host=127.0.0.1 +consul.http.port=13100 +consul.check.host=127.0.0.1 +consul.check.timeout=5s +consul.check.interval=5s +consul.tags=nab,nab-example +consul.enabled=false diff --git a/back/src/main/java/ru/gowork/App.java b/back/src/main/java/ru/gowork/App.java new file mode 100644 index 0000000..4889dff --- /dev/null +++ b/back/src/main/java/ru/gowork/App.java @@ -0,0 +1,19 @@ +package ru.gowork; + +import ru.gowork.resource.ExampleResource; +import ru.hh.nab.common.properties.PropertiesUtils; +import ru.hh.nab.starter.NabApplication; +import ru.gowork.config.ProdConfig; + +public class App { + + public static void main(String[] args) { + // System.setProperty(PropertiesUtils.SETINGS_DIR_PROPERTY, "back/src/etc"); + NabApplication + .builder() + .configureJersey().addAllowedPackages("ru.gowork") + .bindToRoot() + .build() + .run(ProdConfig.class); + } +} diff --git a/back/src/main/java/ru/gowork/config/LogbackConfigurator.java b/back/src/main/java/ru/gowork/config/LogbackConfigurator.java new file mode 100644 index 0000000..f2559ee --- /dev/null +++ b/back/src/main/java/ru/gowork/config/LogbackConfigurator.java @@ -0,0 +1,13 @@ +package ru.gowork.config; + +import io.sentry.logback.SentryAppender; +import org.slf4j.event.Level; +import ru.hh.nab.logging.HhMultiAppender; +import ru.hh.nab.starter.NabLogbackBaseConfigurator; + +public class LogbackConfigurator extends NabLogbackBaseConfigurator { + @Override + public void configure(LoggingContextWrapper context, HhMultiAppender service, HhMultiAppender libraries, SentryAppender sentry) { + getRootLogger(context).setLevel(Level.INFO); + } +} diff --git a/back/src/main/java/ru/gowork/config/ProdConfig.java b/back/src/main/java/ru/gowork/config/ProdConfig.java new file mode 100644 index 0000000..dd0c9ae --- /dev/null +++ b/back/src/main/java/ru/gowork/config/ProdConfig.java @@ -0,0 +1,15 @@ +package ru.gowork.config; + +import ru.gowork.resource.ExampleResource; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import ru.hh.nab.starter.NabProdConfig; + +@Configuration +@Import({ + ExampleResource.class, + NabProdConfig.class +}) +public class ProdConfig { + +} diff --git a/back/src/main/java/ru/gowork/entity/HelloWorldEntity.java b/back/src/main/java/ru/gowork/entity/HelloWorldEntity.java new file mode 100644 index 0000000..9d0b94c --- /dev/null +++ b/back/src/main/java/ru/gowork/entity/HelloWorldEntity.java @@ -0,0 +1,26 @@ +package ru.gowork.entity; + +public class HelloWorldEntity { + private final String HELLO_STRING = "Hello, "; + private final String EXCLAMATION_MARK = "!"; + private String name; + + public HelloWorldEntity(String name) { + this.name = name; + } + + public synchronized String getString() { + return HELLO_STRING + name + EXCLAMATION_MARK; + } + + public synchronized void setName(String name) { + if (name != null) { + this.name = name; + } + } + + public synchronized void deleteName() { + this.name = ""; + } + +} diff --git a/back/src/main/java/ru/gowork/resource/ExampleResource.java b/back/src/main/java/ru/gowork/resource/ExampleResource.java new file mode 100644 index 0000000..61f6fb1 --- /dev/null +++ b/back/src/main/java/ru/gowork/resource/ExampleResource.java @@ -0,0 +1,37 @@ +package ru.gowork.resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.gowork.entity.HelloWorldEntity; + +import javax.inject.Singleton; +import javax.ws.rs.*; +import javax.ws.rs.core.Response; + +@Singleton +@Path("/") +public class ExampleResource { + + private static final Logger logger = LoggerFactory.getLogger(ExampleResource.class); + private HelloWorldEntity helloWorldEntity = new HelloWorldEntity("world"); + + @GET + public Response get() { + logger.info("Print " + helloWorldEntity.getString()); + return Response.ok(helloWorldEntity.getString()).build(); + } + + @POST + public Response post(@QueryParam(value = "name") String name) { + logger.info("Set input name: " + name); + helloWorldEntity.setName(name); + return Response.ok().build(); + } + + @DELETE + public Response delete() { + logger.info("Delete name"); + helloWorldEntity.deleteName(); + return Response.ok().build(); + } +} diff --git a/back/src/main/resources/META-INF/services/ch.qos.logback.classic.spi.Configurator b/back/src/main/resources/META-INF/services/ch.qos.logback.classic.spi.Configurator new file mode 100644 index 0000000..ffe8b1d --- /dev/null +++ b/back/src/main/resources/META-INF/services/ch.qos.logback.classic.spi.Configurator @@ -0,0 +1 @@ +ru.gowork.config.LogbackConfigurator From 64bbcb738a4aaa2f7e879de5789361fc6e97fd64 Mon Sep 17 00:00:00 2001 From: Nikita Kalyanov Date: Thu, 1 Apr 2021 23:11:58 +0300 Subject: [PATCH 2/2] add common docker-compose file for both front and back --- .gitignore | 1 + README.md | 10 ++++++++ back/docker-compose.yaml | 21 ----------------- docker-compose.yaml | 50 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 21 deletions(-) create mode 100644 README.md delete mode 100644 back/docker-compose.yaml create mode 100644 docker-compose.yaml diff --git a/.gitignore b/.gitignore index 9f11b75..8d9bc81 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea/ +back/target/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fd6483 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +## Run dev env +1. Install Docker and docker-compose +2. run this command (from project root): +```console +docker-compose up -d +``` +3. To clear the env run: +```console +docker-compose down +``` diff --git a/back/docker-compose.yaml b/back/docker-compose.yaml deleted file mode 100644 index 52a384d..0000000 --- a/back/docker-compose.yaml +++ /dev/null @@ -1,21 +0,0 @@ -version: "2.2" - -services: - postgres: - image: postgres:13.2-alpine - restart: always - volumes: - - ./migrations/:/docker-entrypoint-initdb.d/ - ports: - - "5432:5432" - environment: - POSTGRES_PASSWORD: hh - POSTGRES_DB: hh - POSTGRES_USER: hh - healthcheck: - test: ["CMD-SHELL", "pg_isready -U hh"] - interval: 10s - timeout: 5s - retries: 5 - - # add backend service here, built from Dockerfile diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..6e28df9 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,50 @@ +version: '3.4' + +services: + postgres: + image: postgres:13.2-alpine + restart: always + volumes: + - ./back/migrations/:/docker-entrypoint-initdb.d/ + ports: + - "5432:5432" + environment: + POSTGRES_PASSWORD: hh + POSTGRES_DB: hh + POSTGRES_USER: hh + healthcheck: + test: ["CMD-SHELL", "pg_isready -U hh"] + interval: 10s + timeout: 5s + retries: 5 + + back: + image: maven:3.6.3-jdk-11 + restart: always + working_dir: /mnt/app + command: mvn install exec:java + volumes: + - gowork-back-maven-repo:/root/.m2 + - ./back:/mnt/app:Z + ports: + - "8080:8080" + links: + - postgres + depends_on: + - postgres + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/status"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 180s # first start may be long due to downloading dependencies + front: + build: ./front + ports: + - "3000:80" + links: + - back + depends_on: + - back +volumes: + gowork-back-maven-repo: