挂载更新

This commit is contained in:
2025-11-24 14:33:02 +08:00
parent a92dc6180d
commit 054eac0987
10 changed files with 438 additions and 182 deletions

5
.gitignore vendored
View File

@@ -1,2 +1,5 @@
.idea
build_output
build_output
# Docker volumes运行时数据不纳入版本控制
docker/volumes/

View File

@@ -14,13 +14,14 @@
#
# 目标(target)
# base-serv - 构建后端基础镜像包含Python依赖
# base-web - 构建前端基础镜像Nginx
# base-web - 构建前端基础镜像Node
# base-all - 构建所有基础镜像
# serv - 构建后端服务镜像
# web - 构建前端服务镜像
# web - 构建前端服务镜像Node + Vite Preview
# mysql - 构建MySQL镜像
# all - 构建所有应用镜像(默认)
#
#
# 选项(options)
# build - 编译代码serv和web需要
# save - 保存镜像到tar文件配合build自动保存构建版本
@@ -166,24 +167,6 @@ build_base_serv() {
echo ""
}
# 构建前端基础镜像
build_base_web() {
log_step "构建前端基础镜像Base Web"
cd "${PROJECT_ROOT}"
log_info "执行: docker build -t school-news-base-web:${IMAGE_VERSION} -f docker/Dockerfile.base-web ."
if docker build -t school-news-base-web:${IMAGE_VERSION} -f docker/Dockerfile.base-web .; then
docker tag school-news-base-web:${IMAGE_VERSION} school-news-base-web:latest
log_info "✅ 前端基础镜像构建成功"
log_info " 镜像标签: school-news-base-web:${IMAGE_VERSION}"
log_info " 镜像标签: school-news-base-web:latest"
else
log_error "❌ 前端基础镜像构建失败"
exit 1
fi
echo ""
}
# 构建MySQL镜像
build_mysql() {
log_step "构建MySQL镜像"
@@ -239,13 +222,6 @@ build_web() {
log_step "构建前端服务镜像Web"
cd "${PROJECT_ROOT}"
# 检查基础镜像
if ! docker images | grep -q "school-news-base-web.*latest"; then
log_error "基础镜像不存在: school-news-base-web:latest"
log_error "请先构建基础镜像:./build.sh base-web"
exit 1
fi
# 检查dist目录
if [ ! -d "${WEB_PATH}/dist" ]; then
log_error "dist目录不存在: ${WEB_PATH}/dist"
@@ -315,13 +291,6 @@ save_images() {
base-serv)
save_image "school-news-base-serv"
;;
base-web)
save_image "school-news-base-web"
;;
base-all)
save_image "school-news-base-serv"
save_image "school-news-base-web"
;;
mysql)
save_image "school-news-mysql"
;;
@@ -406,13 +375,6 @@ case ${BUILD_TARGET} in
base-serv)
build_base_serv
;;
base-web)
build_base_web
;;
base-all)
build_base_serv
build_base_web
;;
mysql)
build_mysql
;;
@@ -431,13 +393,15 @@ case ${BUILD_TARGET} in
log_error "未知的构建目标: ${BUILD_TARGET}"
echo ""
echo "可用的构建目标:"
echo " base-serv - 构建后端基础镜像"
echo " base-web - 构建前端基础镜像"
echo " base-all - 构建所有基础镜像"
echo " base-serv - 构建后端基础镜像包含Python依赖"
echo " mysql - 构建MySQL镜像"
echo " serv - 构建后端服务镜像"
echo " web - 构建前端服务镜像"
echo " web - 构建前端服务镜像基于node:20-alpine"
echo " all - 构建所有应用镜像(默认)"
echo ""
echo "注意:"
echo " - Nginx使用官方镜像 nginx:alpine无需构建"
echo " - Web基于官方Node镜像 node:20-alpine无需base-web"
exit 1
;;
esac

View File

@@ -1,41 +0,0 @@
# ====================================
# 前端基础镜像 - Base Web
# 包含Nginx + 基础配置
# 用途:作为前端服务镜像的基础
# ====================================
FROM nginx:alpine
# 设置环境变量
ENV TZ=Asia/Shanghai
# 安装必要工具
RUN apk add --no-cache \
# 时区数据
tzdata \
# 基础工具
bash \
curl \
# 日志处理
&& mkdir -p /app/logs
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 创建应用目录
WORKDIR /app
RUN mkdir -p /app/config /app/logs
# Nginx基础配置可被覆盖
RUN rm -f /etc/nginx/conf.d/default.conf
# 镜像元数据
LABEL maintainer="School News Team" \
description="Base image for school-news frontend service with Nginx" \
version="1.0"
# 暴露端口
EXPOSE 80
# 默认命令(会被子镜像覆盖)
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -1,88 +1,53 @@
# ====================================
# 前端服务镜像 - School News Web
# 基于school-news-base-webNginx Alpine
# 使用Node运行Vite预览服务器
# 注意dist目录需要在主机中先构建好
# ====================================
FROM school-news-base-web:latest
FROM node:20-alpine
# 创建前端目录
RUN mkdir -p /usr/share/nginx/html/schoolNewsWeb
# 设置环境变量
ENV TZ=Asia/Shanghai \
NODE_ENV=production
# 安装基础工具
RUN apk add --no-cache tzdata bash curl && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 创建应用目录
WORKDIR /app
# 创建必要目录
RUN mkdir -p /app/dist /app/config /app/logs
# 复制package.json和package-lock.json
COPY schoolNewsWeb/package*.json ./
# 安装生产依赖包括vite用于preview
RUN npm ci --only=production && \
npm install -g vite
# 从主机复制已构建的dist目录
COPY schoolNewsWeb/dist/ /usr/share/nginx/html/schoolNewsWeb/
COPY schoolNewsWeb/dist/ /app/dist/
# 复制配置文件模板(可整个替换)
COPY schoolNewsWeb/public/app-config.js /app/config/app-config.js.template
# 确保dist中有默认配置文件如果build时没有复制
RUN if [ ! -f /usr/share/nginx/html/schoolNewsWeb/app-config.js ]; then \
cp /app/config/app-config.js.template /usr/share/nginx/html/schoolNewsWeb/app-config.js; \
# 确保dist中有默认配置文件
RUN if [ ! -f /app/dist/app-config.js ]; then \
cp /app/config/app-config.js.template /app/dist/app-config.js; \
fi
# 创建Nginx配置
RUN echo 'server {\n\
listen 80;\n\
server_name localhost;\n\
\n\
# 日志配置\n\
access_log /app/logs/nginx-access.log;\n\
error_log /app/logs/nginx-error.log;\n\
\n\
# 根路径重定向\n\
location = / {\n\
return 301 /schoolNewsWeb/;\n\
}\n\
\n\
# 前端应用\n\
location /schoolNewsWeb/ {\n\
alias /usr/share/nginx/html/schoolNewsWeb/;\n\
try_files $uri $uri/ /schoolNewsWeb/index.html;\n\
\n\
# 静态资源缓存\n\
location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg)$ {\n\
expires 1y;\n\
add_header Cache-Control "public, immutable";\n\
}\n\
}\n\
\n\
# 后端API代理\n\
location /schoolNewsServ/ {\n\
proxy_pass http://school-news-serv:8081;\n\
proxy_set_header Host $host;\n\
proxy_set_header X-Real-IP $remote_addr;\n\
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\
proxy_set_header X-Forwarded-Proto $scheme;\n\
\n\
# WebSocket支持\n\
proxy_http_version 1.1;\n\
proxy_set_header Upgrade $http_upgrade;\n\
proxy_set_header Connection "upgrade";\n\
\n\
# 超时设置\n\
proxy_connect_timeout 300s;\n\
proxy_send_timeout 300s;\n\
proxy_read_timeout 300s;\n\
}\n\
\n\
# 错误页面\n\
error_page 404 /schoolNewsWeb/index.html;\n\
error_page 500 502 503 504 /50x.html;\n\
location = /50x.html {\n\
root /usr/share/nginx/html;\n\
}\n\
}\n\
' > /etc/nginx/conf.d/default.conf
# 复制启动脚本
COPY schoolNewsWeb/docker/start.sh /app/start.sh
RUN chmod +x /app/start.sh
# 暴露端口
EXPOSE 80
# 暴露端口Vite preview默认4173
EXPOSE 4173
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost/schoolNewsWeb/ || exit 1
HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \
CMD curl -f http://localhost:4173/ || exit 1
# 启动应用
CMD ["/app/start.sh"]

View File

@@ -15,7 +15,7 @@ services:
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
# 数据持久化
# 数据持久化(命名卷)
- mysql-data:/var/lib/mysql
# 自定义配置文件(可选,取消注释以启用)
# 如需自定义MySQL配置取消下面的注释并修改mysql/my.cnf
@@ -45,8 +45,10 @@ services:
ports:
- "${REDIS_PORT:-6379}:6379"
volumes:
# 数据持久化(命名卷)
- redis-data:/data
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
# Redis配置文件命名卷
- redis-config:/usr/local/etc/redis
command: redis-server /usr/local/etc/redis/redis.conf --requirepass ${REDIS_PASSWORD:-123456}
networks:
- school-news-network
@@ -83,15 +85,15 @@ services:
ports:
- "${SERV_PORT:-8081}:8081"
volumes:
# 配置文件挂载
- ./config/application.yml:/app/config/application.yml
- ./config/log4j2-spring.xml:/app/config/log4j2-spring.xml
# 日志目录挂载
- ./logs/serv:/app/logs
# 上传文件目录
- ./uploads:/app/uploads
# 爬虫脚本目录(如果需要更新爬虫脚本
- ../schoolNewsCrawler:/app/crawler
# 配置文件(命名卷)
- serv-config:/app/config
# 日志目录(命名卷)
- serv-logs:/app/logs
# 上传文件目录(命名卷)
- serv-uploads:/app/uploads
# 爬虫脚本目录(默认不挂载,保留在镜像内)
# 注意:挂载会覆盖镜像内容,如需运行时更新爬虫脚本可取消注释
- serv-crawler:/app/crawler
networks:
- school-news-network
healthcheck:
@@ -101,7 +103,7 @@ services:
retries: 3
start_period: 60s
# 前端服务
# 前端服务Node + Vite Preview
school-news-web:
image: school-news-web:latest
container_name: school-news-web
@@ -110,17 +112,45 @@ services:
- school-news-serv
environment:
TZ: Asia/Shanghai
ports:
- "${WEB_PORT:-8080}:80"
NODE_ENV: production
# 不直接暴露端口通过nginx反向代理访问
expose:
- "4173"
volumes:
# 运行时配置文件挂载(可整个替换,修改后重启容器即可生效
- ./config/web-app-config.js:/app/config/app-config.js
# 日志目录挂载
- ./logs/web:/app/logs
# 运行时配置文件(命名卷
- web-config:/app/config
# 日志目录(命名卷)
- web-logs:/app/logs
networks:
- school-news-network
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/schoolNewsWeb/"]
test: ["CMD", "curl", "-f", "http://localhost:4173/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
# Nginx反向代理
nginx:
image: nginx:alpine # 直接使用官方镜像,无需自定义构建
container_name: school-news-nginx
restart: always
depends_on:
- school-news-web
- school-news-serv
environment:
TZ: Asia/Shanghai
ports:
- "${NGINX_PORT:-80}:80"
volumes:
# Nginx配置文件命名卷
- nginx-config:/etc/nginx:ro
# 日志目录(命名卷)
- nginx-logs:/var/log/nginx
networks:
- school-news-network
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
@@ -130,8 +160,89 @@ networks:
school-news-network:
driver: bridge
# 命名卷定义数据存储在当前目录下的volumes/子目录)
# 使用前请先运行初始化脚本:./init-volumes.sh 或 init-volumes.bat
volumes:
# ===== MySQL =====
mysql-data:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/mysql/data
# ===== Redis =====
redis-data:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/redis/data
redis-config:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/redis/config
# ===== 后端服务 =====
serv-config:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/serv/config
serv-logs:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/serv/logs
serv-uploads:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/serv/uploads
# 爬虫脚本目录(可选,默认不启用)
# 注意启用后会覆盖镜像内的爬虫脚本需先复制镜像内容到volumes/serv/crawler
serv-crawler:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/serv/crawler
# ===== 前端服务 =====
web-config:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/web/config
web-logs:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/web/logs
# ===== Nginx =====
nginx-config:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/nginx/config
nginx-logs:
driver: local
driver_opts:
type: none
o: bind
device: ./volumes/nginx/logs

65
docker/init-volumes.bat Normal file
View File

@@ -0,0 +1,65 @@
@echo off
REM ============================================
REM 初始化 Docker Volumes 目录 (Windows)
REM ============================================
echo ========================================
echo 初始化 Docker Volumes 目录
echo ========================================
echo.
REM 创建所有卷目录(分层结构)
echo 创建数据目录...
if not exist "volumes" mkdir "volumes"
if not exist "volumes\mysql\data" mkdir "volumes\mysql\data"
if not exist "volumes\redis\data" mkdir "volumes\redis\data"
if not exist "volumes\redis\config" mkdir "volumes\redis\config"
if not exist "volumes\serv\config" mkdir "volumes\serv\config"
if not exist "volumes\serv\logs" mkdir "volumes\serv\logs"
if not exist "volumes\serv\uploads" mkdir "volumes\serv\uploads"
REM if not exist "volumes\serv\crawler" mkdir "volumes\serv\crawler" REM 可选,如需运行时更新爬虫可取消注释
if not exist "volumes\web\config" mkdir "volumes\web\config"
if not exist "volumes\web\logs" mkdir "volumes\web\logs"
if not exist "volumes\nginx\config" mkdir "volumes\nginx\config"
if not exist "volumes\nginx\logs" mkdir "volumes\nginx\logs"
REM 复制配置文件模板
echo 复制配置文件模板...
if exist "redis\redis.conf" (copy /Y "redis\redis.conf" "volumes\redis\config\" >nul) else (echo ⚠️ redis.conf 不存在)
if exist "config\application.yml" (copy /Y "config\application.yml" "volumes\serv\config\" >nul) else (echo ⚠️ application.yml 不存在)
if exist "config\log4j2-spring.xml" (copy /Y "config\log4j2-spring.xml" "volumes\serv\config\" >nul) else (echo ⚠️ log4j2-spring.xml 不存在)
if exist "config\web-app-config.js" (copy /Y "config\web-app-config.js" "volumes\web\config\app-config.js" >nul) else (echo ⚠️ web-app-config.js 不存在)
if exist "nginx\nginx.conf" (xcopy /E /Y "nginx\*" "volumes\nginx\config\" >nul) else (echo ⚠️ nginx配置 不存在)
REM if exist "..\schoolNewsCrawler" (xcopy /E /Y "..\schoolNewsCrawler\*" "volumes\serv\crawler\" >nul) else (echo ⚠️ 爬虫脚本 不存在) REM 可选
echo.
echo ✅ 目录创建完成:
dir /b volumes
echo.
echo ========================================
echo 目录结构说明:
echo ========================================
echo volumes\
echo ├── mysql\
echo │ └── data\ - MySQL数据库数据
echo ├── redis\
echo │ ├── data\ - Redis缓存数据
echo │ └── config\ - Redis配置文件
echo ├── serv\
echo │ ├── config\ - 后端配置文件
echo │ ├── logs\ - 后端服务日志
echo │ ├── uploads\ - 后端上传文件
echo │ └── crawler\ - 爬虫脚本(可选,默认在镜像内)
echo ├── web\
echo │ ├── config\ - 前端配置文件
echo │ └── logs\ - 前端服务日志
echo └── nginx\
echo ├── config\ - Nginx配置文件
echo └── logs\ - Nginx访问日志
echo.
echo ✅ 初始化完成!现在可以启动服务了:
echo docker-compose up -d
echo ========================================
pause

69
docker/init-volumes.sh Normal file
View File

@@ -0,0 +1,69 @@
#!/bin/bash
##############################################
# 初始化 Docker Volumes 目录
# 用途:创建所有命名卷需要的本地目录
##############################################
echo "========================================"
echo "初始化 Docker Volumes 目录"
echo "========================================"
# 获取脚本所在目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
VOLUMES_DIR="${SCRIPT_DIR}/volumes"
echo "创建目录: ${VOLUMES_DIR}"
# 创建所有卷目录(分层结构)
echo "创建数据目录..."
mkdir -p "${VOLUMES_DIR}/mysql/data"
mkdir -p "${VOLUMES_DIR}/redis/data"
mkdir -p "${VOLUMES_DIR}/redis/config"
mkdir -p "${VOLUMES_DIR}/serv/config"
mkdir -p "${VOLUMES_DIR}/serv/logs"
mkdir -p "${VOLUMES_DIR}/serv/uploads"
mkdir -p "${VOLUMES_DIR}/serv/crawler" # 可选,如需运行时更新爬虫可取消注释
mkdir -p "${VOLUMES_DIR}/web/config"
mkdir -p "${VOLUMES_DIR}/web/logs"
mkdir -p "${VOLUMES_DIR}/nginx/config"
mkdir -p "${VOLUMES_DIR}/nginx/logs"
# 复制配置文件模板
echo "复制配置文件模板..."
[ -f redis/redis.conf ] && cp redis/redis.conf "${VOLUMES_DIR}/redis/config/" || echo " ⚠️ redis.conf 不存在"
[ -f config/application.yml ] && cp config/application.yml "${VOLUMES_DIR}/serv/config/" || echo " ⚠️ application.yml 不存在"
[ -f config/log4j2-spring.xml ] && cp config/log4j2-spring.xml "${VOLUMES_DIR}/serv/config/" || echo " ⚠️ log4j2-spring.xml 不存在"
[ -f config/web-app-config.js ] && cp config/web-app-config.js "${VOLUMES_DIR}/web/config/app-config.js" || echo " ⚠️ web-app-config.js 不存在"
[ -f nginx/nginx.conf ] && cp -r nginx/* "${VOLUMES_DIR}/nginx/config/" || echo " ⚠️ nginx配置 不存在"
[ -d ../schoolNewsCrawler ] && cp -r ../schoolNewsCrawler/* "${VOLUMES_DIR}/serv/crawler/" || echo " ⚠️ 爬虫脚本 不存在" # 可选
echo ""
echo "✅ 目录创建完成:"
tree -L 2 "${VOLUMES_DIR}" 2>/dev/null || ls -la "${VOLUMES_DIR}"
echo ""
echo "========================================"
echo "目录结构说明:"
echo "========================================"
echo "volumes/"
echo "├── mysql/"
echo "│ └── data/ - MySQL数据库数据"
echo "├── redis/"
echo "│ ├── data/ - Redis缓存数据"
echo "│ └── config/ - Redis配置文件"
echo "├── serv/"
echo "│ ├── config/ - 后端配置文件"
echo "│ ├── logs/ - 后端服务日志"
echo "│ ├── uploads/ - 后端上传文件"
echo "│ └── crawler/ - 爬虫脚本(可选,默认在镜像内)"
echo "├── web/"
echo "│ ├── config/ - 前端配置文件"
echo "│ └── logs/ - 前端服务日志"
echo "└── nginx/"
echo " ├── config/ - Nginx配置文件"
echo " └── logs/ - Nginx访问日志"
echo ""
echo "✅ 初始化完成!现在可以启动服务了:"
echo " docker-compose up -d"
echo "========================================"

View File

@@ -0,0 +1,74 @@
# ====================================
# 校园新闻系统 - Nginx反向代理配置
# ====================================
# 上游服务定义
upstream web_backend {
server school-news-web:4173;
}
upstream api_backend {
server school-news-serv:8081;
}
server {
listen 80;
server_name localhost;
# 日志配置
access_log /var/log/nginx/school-news-access.log;
error_log /var/log/nginx/school-news-error.log;
# 客户端上传大小限制
client_max_body_size 100M;
# 根路径重定向到前端
location = / {
return 301 /schoolNewsWeb/;
}
# 前端应用代理Node Vite Preview
location /schoolNewsWeb/ {
proxy_pass http://web_backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket支持如果需要HMR
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 后端API代理
location /schoolNewsServ/ {
proxy_pass http://api_backend/schoolNewsServ/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 缓冲设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
# 错误页面
error_page 404 /schoolNewsWeb/;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

44
docker/nginx/nginx.conf Normal file
View File

@@ -0,0 +1,44 @@
# ====================================
# Nginx主配置文件
# 可通过docker-compose.yml挂载自定义配置
# ====================================
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss
application/rss+xml font/truetype font/opentype
application/vnd.ms-fontobject image/svg+xml;
# 包含站点配置
include /etc/nginx/conf.d/*.conf;
}

View File

@@ -1,15 +1,14 @@
#!/bin/sh
set -e
#!/bin/bash
echo "========================================"
echo "校园新闻管理系统 - 前端服务启动"
echo "[INFO] 校园新闻系统 - 前端Web服务启动"
echo "========================================"
# 确保日志目录存在
# 创建日志目录
mkdir -p /app/logs
# 处理配置文件
CONFIG_TARGET="/usr/share/nginx/html/schoolNewsWeb/app-config.js"
CONFIG_TARGET="/app/dist/app-config.js"
if [ -f /app/config/app-config.js ]; then
echo "[INFO] 检测到外部配置文件,替换默认配置"
@@ -29,12 +28,15 @@ else
fi
echo "========================================"
echo "[INFO] Nginx版本: $(nginx -v 2>&1)"
echo "[INFO] 前端路径: /usr/share/nginx/html/schoolNewsWeb"
echo "[INFO] Node版本: $(node --version)"
echo "[INFO] Vite版本: $(vite --version)"
echo "[INFO] 前端路径: /app/dist"
echo "[INFO] 配置文件: $CONFIG_TARGET"
echo "[INFO] 日志路径: /app/logs"
echo "[INFO] 监听端口: 4173"
echo "========================================"
echo "[INFO] 启动Nginx..."
echo "[INFO] 启动Vite Preview服务器..."
# 启动Nginx
exec nginx -g "daemon off;"
# 启动Vite Preview前台运行
cd /app
vite preview --host 0.0.0.0 --port 4173