From e73a7b5a18a0da9e7f67e1f9877e01b31b4854e0 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Sun, 13 Oct 2019 16:24:13 +0200 Subject: [PATCH] Add App into docker --- .env | 2 ++ build.gradle.kts | 19 +++++++------------ docker-compose.yml | 14 ++++++++++++++ docker/app/Dockerfile | 15 +++++++++++++++ src/main/kotlin/fr/dcproject/Configuration.kt | 9 ++++++++- src/main/resources/application.conf | 1 + 6 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 docker/app/Dockerfile diff --git a/.env b/.env index 1f5af33..5a1420a 100644 --- a/.env +++ b/.env @@ -2,6 +2,8 @@ NAME=dc-project DATABASE_URL=jdbc:postgresql:dc-project +APP_PORT=8080 + ELASTIC_REST=9200 ELASTIC_NODES=9300 diff --git a/build.gradle.kts b/build.gradle.kts index 93f6fed..4e52b93 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,3 @@ -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.owasp.dependencycheck.reporting.ReportGenerator @@ -35,16 +33,13 @@ tasks.withType { jvmTarget = "1.8" } } - -tasks.withType(ShadowJar::class) { - enabled = true - - manifest.attributes["Main-Class"] = application.mainClassName - archiveFileName.set("dcproject.jar") - - transform(ServiceFileTransformer::class.java) { - setPath("META-INF/services") - include("org.eclipse.jetty.http.HttpFieldPreEncoder") +tasks.withType { + manifest { + attributes( + mapOf( + "Main-Class" to application.mainClassName + ) + ) } } diff --git a/docker-compose.yml b/docker-compose.yml index 2bdfe52..d850443 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,20 @@ version: '3.7' services: + app: + container_name: app_${NAME} + build: + context: ./build + dockerfile: ../docker/app/Dockerfile + restart: always + ports: + - ${APP_PORT}:8080 + environment: + DB_HOST: db + depends_on: + - elasticsearch + - db + elasticsearch: container_name: elasticsearch_${NAME} image: elasticsearch:6.7.1 diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile new file mode 100644 index 0000000..7f11568 --- /dev/null +++ b/docker/app/Dockerfile @@ -0,0 +1,15 @@ +FROM adoptopenjdk/openjdk11:jre-11.0.4_11-alpine + +ENV APPLICATION_USER ktor +RUN adduser -D -g '' $APPLICATION_USER + +RUN mkdir /app +RUN chown -R $APPLICATION_USER /app + +USER $APPLICATION_USER + +COPY ./libs/dcproject-0.0.1-all.jar /app/dcproject.jar +COPY ./resources /app/resources +WORKDIR /app + +CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "dcproject.jar"] diff --git a/src/main/kotlin/fr/dcproject/Configuration.kt b/src/main/kotlin/fr/dcproject/Configuration.kt index 042cabd..77641f5 100644 --- a/src/main/kotlin/fr/dcproject/Configuration.kt +++ b/src/main/kotlin/fr/dcproject/Configuration.kt @@ -5,12 +5,19 @@ import com.auth0.jwt.JWTVerifier import com.auth0.jwt.algorithms.Algorithm import com.typesafe.config.ConfigFactory import fr.dcproject.entity.User +import org.eclipse.jetty.util.resource.JarResource import java.io.File import java.util.* class Config { private var config = ConfigFactory.load() - val sqlFiles = File(this::class.java.getResource("/sql").toURI()) + + val sqlFiles: File = try { + File(this::class.java.getResource("/sql").toURI()) + } catch (e: IllegalArgumentException) { + JarResource.newResource("./resources/sql").file + } + val envName: String = config.getString("app.envName") val domain: String = config.getString("app.domain") diff --git a/src/main/resources/application.conf b/src/main/resources/application.conf index 5f1a138..571f7f7 100644 --- a/src/main/resources/application.conf +++ b/src/main/resources/application.conf @@ -15,6 +15,7 @@ app { db { host = localhost + host = ${?DB_HOST} database = dc-project username = dc-project password = dc-project