mirror of
https://github.com/iflytek/skillhub.git
synced 2026-08-27 11:14:59 +00:00
feat(ops): improve Dockerfile caching, add dockerignore, docker profile, Makefile help
- Server Dockerfile: add Maven dependency caching layer for faster rebuilds - Add .dockerignore for server and web to reduce build context - Add docker profile to application.yml for container env var mapping - Makefile: add help, logs, db-reset targets with ## annotations
This commit is contained in:
parent
c6fd3c02f6
commit
dbb6d9f39e
5 changed files with 76 additions and 29 deletions
57
Makefile
57
Makefile
|
|
@ -1,63 +1,66 @@
|
|||
.PHONY: dev dev-down build test clean web-install dev-server dev-web build-web test-web typecheck-web lint-web generate-api prod-up prod-down
|
||||
.PHONY: help dev dev-down build test clean web-install dev-server dev-web build-web test-web typecheck-web lint-web generate-api prod-up prod-down logs db-reset
|
||||
|
||||
# 启动本地开发环境(仅依赖服务)
|
||||
dev:
|
||||
help: ## 显示帮助
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \
|
||||
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
dev: ## 启动本地开发环境(仅依赖服务)
|
||||
docker compose up -d
|
||||
@echo "Waiting for services to be healthy..."
|
||||
@sleep 5
|
||||
@echo "Services ready. Start backend with: make dev-server"
|
||||
@echo "Start frontend with: make dev-web"
|
||||
|
||||
dev-server:
|
||||
dev-server: ## 启动后端开发服务器
|
||||
cd server && ./mvnw spring-boot:run -Dspring-boot.run.profiles=local
|
||||
|
||||
# 停止本地开发环境
|
||||
dev-down:
|
||||
dev-down: ## 停止本地开发环境
|
||||
docker compose down
|
||||
|
||||
# 构建后端
|
||||
build:
|
||||
build: ## 构建后端
|
||||
cd server && ./mvnw clean package -DskipTests
|
||||
|
||||
# 运行测试
|
||||
test:
|
||||
test: ## 运行后端测试
|
||||
cd server && ./mvnw test
|
||||
|
||||
# 清理构建产物
|
||||
clean:
|
||||
clean: ## 清理构建产物
|
||||
cd server && ./mvnw clean
|
||||
docker compose down -v
|
||||
|
||||
# 生成 OpenAPI 类型(前端用)
|
||||
generate-api:
|
||||
generate-api: ## 生成 OpenAPI 类型(前端用)
|
||||
@echo "Generating OpenAPI types..."
|
||||
cd web && pnpm run generate-api
|
||||
|
||||
web-install:
|
||||
web-install: ## 安装前端依赖
|
||||
cd web && pnpm install
|
||||
|
||||
# 前端开发服务器
|
||||
dev-web:
|
||||
dev-web: ## 启动前端开发服务器
|
||||
cd web && pnpm run dev
|
||||
|
||||
# 构建前端
|
||||
build-web:
|
||||
build-web: ## 构建前端
|
||||
cd web && pnpm run build
|
||||
|
||||
# 前端测试
|
||||
test-web:
|
||||
test-web: ## 运行前端测试
|
||||
cd web && pnpm run test
|
||||
|
||||
# 前端类型检查
|
||||
typecheck-web:
|
||||
typecheck-web: ## 前端类型检查
|
||||
cd web && pnpm run typecheck
|
||||
|
||||
# 前端代码检查
|
||||
lint-web:
|
||||
lint-web: ## 前端代码检查
|
||||
cd web && pnpm run lint
|
||||
|
||||
prod-up:
|
||||
prod-up: ## 一键启动全部服务(生产模式)
|
||||
docker compose -f docker-compose.prod.yml up -d --build
|
||||
|
||||
prod-down:
|
||||
prod-down: ## 停止全部服务(生产模式)
|
||||
docker compose -f docker-compose.prod.yml down
|
||||
|
||||
logs: ## 查看后端服务日志
|
||||
docker compose -f docker-compose.prod.yml logs -f server
|
||||
|
||||
db-reset: ## 重置数据库
|
||||
docker compose down -v
|
||||
docker compose up -d postgres
|
||||
@echo "Waiting for postgres..."
|
||||
@sleep 3
|
||||
cd server && ./mvnw flyway:migrate -pl skillhub-app
|
||||
|
|
|
|||
5
server/.dockerignore
Normal file
5
server/.dockerignore
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
**/target/
|
||||
**/.idea/
|
||||
**/*.iml
|
||||
.git/
|
||||
*.md
|
||||
|
|
@ -1,14 +1,34 @@
|
|||
# ---- Build Stage ----
|
||||
FROM eclipse-temurin:21-jdk-alpine AS build
|
||||
WORKDIR /app
|
||||
|
||||
# Cache dependencies
|
||||
COPY pom.xml .
|
||||
COPY skillhub-domain/pom.xml skillhub-domain/
|
||||
COPY skillhub-auth/pom.xml skillhub-auth/
|
||||
COPY skillhub-search/pom.xml skillhub-search/
|
||||
COPY skillhub-infra/pom.xml skillhub-infra/
|
||||
COPY skillhub-storage/pom.xml skillhub-storage/
|
||||
COPY skillhub-app/pom.xml skillhub-app/
|
||||
COPY mvnw .
|
||||
COPY .mvn .mvn
|
||||
RUN ./mvnw dependency:go-offline -B
|
||||
|
||||
COPY . .
|
||||
RUN ./mvnw package -DskipTests -B
|
||||
|
||||
# ---- Runtime Stage ----
|
||||
FROM eclipse-temurin:21-jre-alpine
|
||||
WORKDIR /app
|
||||
COPY --from=build /app/skillhub-app/target/*.jar app.jar
|
||||
RUN addgroup -S app && adduser -S app -G app
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=build /app/skillhub-app/target/*.jar app.jar
|
||||
|
||||
RUN chown -R app:app /app
|
||||
USER app
|
||||
|
||||
EXPOSE 8080
|
||||
HEALTHCHECK --interval=10s --timeout=3s \
|
||||
CMD wget -qO- http://localhost:8080/actuator/health || exit 1
|
||||
|
||||
ENTRYPOINT ["java", "-XX:MaxRAMPercentage=75.0", "-jar", "app.jar"]
|
||||
|
|
|
|||
|
|
@ -71,3 +71,18 @@ management:
|
|||
endpoint:
|
||||
health:
|
||||
show-details: when-authorized
|
||||
|
||||
---
|
||||
# Docker profile
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: docker
|
||||
datasource:
|
||||
url: jdbc:postgresql://${DB_HOST:postgres}:${DB_PORT:5432}/${DB_NAME:skillhub}
|
||||
username: ${DB_USER:skillhub}
|
||||
password: ${DB_PASS:skillhub_dev}
|
||||
data:
|
||||
redis:
|
||||
host: ${REDIS_HOST:redis}
|
||||
port: ${REDIS_PORT:6379}
|
||||
|
|
|
|||
4
web/.dockerignore
Normal file
4
web/.dockerignore
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
node_modules/
|
||||
dist/
|
||||
.git/
|
||||
*.md
|
||||
Loading…
Add table
Reference in a new issue