up docker-compose.yml

+ node js in gradle
This commit is contained in:
2026-04-17 15:03:49 +03:00
parent 201ebcd9fb
commit 58c43fddc5
4 changed files with 60 additions and 26 deletions

View File

@@ -5,6 +5,16 @@ plugins {
java java
application application
id("com.gradleup.shadow") version "9.2.2" id("com.gradleup.shadow") version "9.2.2"
id("com.github.node-gradle.node") version "7.1.0"
}
node {
version.set("22.19.0") // версия Node.js
npmVersion.set("11.12.1") // версия npm
download.set(true) // автоматически скачать Node.js
workDir.set(file("${project.projectDir}/.gradle/nodejs"))
npmWorkDir.set(file("${project.projectDir}/.gradle/npm"))
nodeProjectDir.set(file("${project.projectDir}/frontend")) // папка с Vue-проектом
} }
group = "com.example" group = "com.example"
@@ -75,6 +85,17 @@ tasks.withType<JavaExec> {
args = listOf(mainVerticleName) args = listOf(mainVerticleName)
} }
val buildFrontend by tasks.registering {
group = "build"
description = "Build Vue frontend"
dependsOn("npm_install") // установка зависимостей
dependsOn("npm_run_build") // сборка (должен быть скрипт "build" в package.json)
}
tasks.processResources {
dependsOn(buildFrontend)
}
tasks.register("collectAllDependencies") { tasks.register("collectAllDependencies") {
group = "project" group = "project"
description = "Сбор всех зависимостей для офлайн работы" description = "Сбор всех зависимостей для офлайн работы"

View File

@@ -1,7 +1,7 @@
services: services:
db: iiko-db:
image: mariadb:12.2.2 image: mariadb:12.2.2
container_name: mariadb container_name: iiko-mariadb
restart: unless-stopped restart: unless-stopped
user: "1000:1000" user: "1000:1000"
environment: environment:
@@ -18,9 +18,9 @@ services:
- $PWD/app/mariadb:/var/lib/mysql - $PWD/app/mariadb:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
pma: iiko-pma:
image: phpmyadmin:5.2.3 image: phpmyadmin:5.2.3
container_name: phpmyadmin container_name: iiko-phpmyadmin
depends_on: depends_on:
- db - db
restart: unless-stopped restart: unless-stopped
@@ -33,9 +33,9 @@ services:
ports: ports:
- "7102:80" - "7102:80"
redis: iiko-redis:
image: redis:latest image: redis:latest
container_name: redis container_name: iiko-redis
restart: unless-stopped restart: unless-stopped
user: "1000:1000" user: "1000:1000"
environment: environment:
@@ -48,7 +48,7 @@ services:
- $PWD/app/redis:/data - $PWD/app/redis:/data
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
app: iiko-app:
build: . build: .
container_name: iiko-app container_name: iiko-app
restart: unless-stopped restart: unless-stopped
@@ -58,11 +58,11 @@ services:
- db - db
- redis - redis
environment: environment:
DATABASE__HOST: db DATABASE__HOST: iiko-db
DATABASE__PORT: 3306 DATABASE__PORT: 3306
DATABASE__DATABASE: app_db DATABASE__DATABASE: app_db
DATABASE__USER: app_user DATABASE__USER: app_user
DATABASE__PASSWORD: app_pass DATABASE__PASSWORD: app_pass
REDIS__HOST: redis REDIS__HOST: iiko-redis
REDIS__PORT: 6379 REDIS__PORT: 6379
SERVER__PORT: 7104 SERVER__PORT: 7104

View File

@@ -62,7 +62,6 @@ public class MainVerticle extends AbstractVerticle {
.onFailure(err -> { .onFailure(err -> {
log.error("Failed to initialize database", err); log.error("Failed to initialize database", err);
startPromise.fail(err); startPromise.fail(err);
return;
}); });
Router router = initRouter(); Router router = initRouter();
@@ -104,6 +103,22 @@ public class MainVerticle extends AbstractVerticle {
} }
}); });
// ------ Раздаём Vue статику ------
router.route("/assets/*").handler(StaticHandler.create("webroot/assets"));
router.route("/favicon.ico").handler(ctx -> ctx.response().sendFile("webroot/favicon.ico"));
// ------ SPA fallback: отдаём index.html на все не-API запросы ------
router.route().handler(ctx -> {
if (ctx.request().path().startsWith("/api")) {
ctx.next();
} else {
ctx.response()
.putHeader("Content-Type", "text/html")
.sendFile("webroot/index.html");
}
});
// Health Checks // Health Checks
HealthCheckService healthCheckService = new HealthCheckService(vertx, redis, db); HealthCheckService healthCheckService = new HealthCheckService(vertx, redis, db);
healthCheckService.registerHealthCheck(router); healthCheckService.registerHealthCheck(router);
@@ -128,8 +143,7 @@ public class MainVerticle extends AbstractVerticle {
router.route("/api/admin/*").handler(authHandler::requireAuth); router.route("/api/admin/*").handler(authHandler::requireAuth);
// Получение списка пользователей // Получение списка пользователей
router.get("/api/admin/users").handler(rc -> { router.get("/api/admin/users").handler(rc -> userService.getAllUsers().onComplete(ar -> {
userService.getAllUsers().onComplete(ar -> {
if (ar.succeeded()) { if (ar.succeeded()) {
rc.response() rc.response()
.putHeader("Content-Type", "application/json") .putHeader("Content-Type", "application/json")
@@ -137,8 +151,7 @@ public class MainVerticle extends AbstractVerticle {
} else { } else {
rc.response().setStatusCode(500).end(ar.cause().getMessage()); rc.response().setStatusCode(500).end(ar.cause().getMessage());
} }
}); }));
});
// Получение текущего пользователя // Получение текущего пользователя
router.get("/api/admin/me").handler(rc -> { router.get("/api/admin/me").handler(rc -> {
@@ -156,9 +169,9 @@ public class MainVerticle extends AbstractVerticle {
}); });
// Статическая раздача фронтенда // Статическая раздача фронтенда
router.route("/*").handler(StaticHandler.create("webroot") // router.route("/*").handler(StaticHandler.create("webroot")
.setCachingEnabled(false) // .setCachingEnabled(false)
.setIndexPage("index.html")); // .setIndexPage("index.html"));
return router; return router;
} }

View File

@@ -53,7 +53,7 @@ public class HealthCheckService {
.onFailure(err -> future.tryFail("DataBase ping failed: " + err.getMessage())); .onFailure(err -> future.tryFail("DataBase ping failed: " + err.getMessage()));
}); });
// Регистрируем endpoint /health // Регистрируем endpoint /api/health
router.get("/health").handler(healthCheckHandler); router.get("/api/health").handler(healthCheckHandler);
} }
} }