up docker-compose.yml
+ node js in gradle
This commit is contained in:
@@ -5,6 +5,16 @@ plugins {
|
||||
java
|
||||
application
|
||||
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"
|
||||
@@ -75,6 +85,17 @@ tasks.withType<JavaExec> {
|
||||
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") {
|
||||
group = "project"
|
||||
description = "Сбор всех зависимостей для офлайн работы"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
services:
|
||||
db:
|
||||
iiko-db:
|
||||
image: mariadb:12.2.2
|
||||
container_name: mariadb
|
||||
container_name: iiko-mariadb
|
||||
restart: unless-stopped
|
||||
user: "1000:1000"
|
||||
environment:
|
||||
@@ -18,9 +18,9 @@ services:
|
||||
- $PWD/app/mariadb:/var/lib/mysql
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
|
||||
pma:
|
||||
iiko-pma:
|
||||
image: phpmyadmin:5.2.3
|
||||
container_name: phpmyadmin
|
||||
container_name: iiko-phpmyadmin
|
||||
depends_on:
|
||||
- db
|
||||
restart: unless-stopped
|
||||
@@ -33,9 +33,9 @@ services:
|
||||
ports:
|
||||
- "7102:80"
|
||||
|
||||
redis:
|
||||
iiko-redis:
|
||||
image: redis:latest
|
||||
container_name: redis
|
||||
container_name: iiko-redis
|
||||
restart: unless-stopped
|
||||
user: "1000:1000"
|
||||
environment:
|
||||
@@ -48,7 +48,7 @@ services:
|
||||
- $PWD/app/redis:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
|
||||
app:
|
||||
iiko-app:
|
||||
build: .
|
||||
container_name: iiko-app
|
||||
restart: unless-stopped
|
||||
@@ -58,11 +58,11 @@ services:
|
||||
- db
|
||||
- redis
|
||||
environment:
|
||||
DATABASE__HOST: db
|
||||
DATABASE__HOST: iiko-db
|
||||
DATABASE__PORT: 3306
|
||||
DATABASE__DATABASE: app_db
|
||||
DATABASE__USER: app_user
|
||||
DATABASE__PASSWORD: app_pass
|
||||
REDIS__HOST: redis
|
||||
REDIS__HOST: iiko-redis
|
||||
REDIS__PORT: 6379
|
||||
SERVER__PORT: 7104
|
||||
|
||||
@@ -62,7 +62,6 @@ public class MainVerticle extends AbstractVerticle {
|
||||
.onFailure(err -> {
|
||||
log.error("Failed to initialize database", err);
|
||||
startPromise.fail(err);
|
||||
return;
|
||||
});
|
||||
|
||||
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
|
||||
HealthCheckService healthCheckService = new HealthCheckService(vertx, redis, db);
|
||||
healthCheckService.registerHealthCheck(router);
|
||||
@@ -128,8 +143,7 @@ public class MainVerticle extends AbstractVerticle {
|
||||
router.route("/api/admin/*").handler(authHandler::requireAuth);
|
||||
|
||||
// Получение списка пользователей
|
||||
router.get("/api/admin/users").handler(rc -> {
|
||||
userService.getAllUsers().onComplete(ar -> {
|
||||
router.get("/api/admin/users").handler(rc -> userService.getAllUsers().onComplete(ar -> {
|
||||
if (ar.succeeded()) {
|
||||
rc.response()
|
||||
.putHeader("Content-Type", "application/json")
|
||||
@@ -137,8 +151,7 @@ public class MainVerticle extends AbstractVerticle {
|
||||
} else {
|
||||
rc.response().setStatusCode(500).end(ar.cause().getMessage());
|
||||
}
|
||||
});
|
||||
});
|
||||
}));
|
||||
|
||||
// Получение текущего пользователя
|
||||
router.get("/api/admin/me").handler(rc -> {
|
||||
@@ -156,9 +169,9 @@ public class MainVerticle extends AbstractVerticle {
|
||||
});
|
||||
|
||||
// Статическая раздача фронтенда
|
||||
router.route("/*").handler(StaticHandler.create("webroot")
|
||||
.setCachingEnabled(false)
|
||||
.setIndexPage("index.html"));
|
||||
// router.route("/*").handler(StaticHandler.create("webroot")
|
||||
// .setCachingEnabled(false)
|
||||
// .setIndexPage("index.html"));
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public class HealthCheckService {
|
||||
.onFailure(err -> future.tryFail("DataBase ping failed: " + err.getMessage()));
|
||||
});
|
||||
|
||||
// Регистрируем endpoint /health
|
||||
router.get("/health").handler(healthCheckHandler);
|
||||
// Регистрируем endpoint /api/health
|
||||
router.get("/api/health").handler(healthCheckHandler);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user