diff --git a/build.sh b/build.sh index 13bf200..dde7a2d 100755 --- a/build.sh +++ b/build.sh @@ -335,14 +335,18 @@ save_image() { } # ================================================ -# 主流程控制 +# 主流程控制(函数化) # ================================================ -# Git更新(可选) -if [ "${DO_BUILD}" = true ]; then +git_update_if_needed() { + # Git更新(可选) + if [ "${DO_BUILD}" != true ]; then + return + fi + log_step "Git Pull" cd "${PROJECT_ROOT}" - + if [[ $(git status --porcelain) ]]; then log_warn "检测到未提交的更改" read -p "是否继续拉取代码?(y/n): " -n 1 -r @@ -356,73 +360,97 @@ if [ "${DO_BUILD}" = true ]; then git pull origin main 2>/dev/null || git pull origin master 2>/dev/null || true fi echo "" -fi +} + +run_compile() { + # 执行编译 + if [ "${DO_BUILD}" != true ]; then + return + fi -# 执行编译 -if [ "${DO_BUILD}" = true ]; then case ${BUILD_TARGET} in - serv|all) + serv) + compile_serv + ;; + web) + compile_web + ;; + all) compile_serv - ;& # fallthrough - web|all) compile_web ;; esac -fi +} -# 执行镜像构建 -case ${BUILD_TARGET} in - base-serv) - build_base_serv - ;; - mysql) - build_mysql - ;; - serv) - build_serv - ;; - web) - build_web - ;; - all) - build_mysql - build_serv - build_web - ;; - *) - log_error "未知的构建目标: ${BUILD_TARGET}" - echo "" - echo "可用的构建目标:" - echo " base-serv - 构建后端基础镜像(包含Python依赖)" - echo " mysql - 构建MySQL镜像" - echo " serv - 构建后端服务镜像" - echo " web - 构建前端服务镜像(基于node:20-alpine)" - echo " all - 构建所有应用镜像(默认)" - echo "" - echo "注意:" - echo " - Nginx使用官方镜像 nginx:alpine,无需构建" - echo " - Web基于官方Node镜像 node:20-alpine,无需base-web" - exit 1 - ;; -esac +run_build_images() { + # 执行镜像构建 + case ${BUILD_TARGET} in + base-serv) + build_base_serv + ;; + mysql) + build_mysql + ;; + serv) + build_serv + ;; + web) + build_web + ;; + all) + build_mysql + build_serv + build_web + ;; + *) + log_error "未知的构建目标: ${BUILD_TARGET}" + echo "" + echo "可用的构建目标:" + echo " base-serv - 构建后端基础镜像(包含Python依赖)" + echo " mysql - 构建MySQL镜像" + echo " serv - 构建后端服务镜像" + echo " web - 构建前端服务镜像(基于node:20-alpine)" + echo " all - 构建所有应用镜像(默认)" + echo "" + echo "注意:" + echo " - Nginx使用官方镜像 nginx:alpine,无需构建" + echo " - Web基于官方Node镜像 node:20-alpine,无需base-web" + exit 1 + ;; + esac +} -# 查看镜像信息 -log_info "Docker镜像列表:" -docker images | grep -E "school-news-" | head -15 -echo "" +show_images_info() { + # 查看镜像信息 + log_info "Docker镜像列表:" + docker images | grep -E "school-news-" | head -15 + echo "" +} -# 保存镜像 -if [ "${DO_SAVE}" = true ]; then - save_images -fi +print_summary() { + # 构建完成 + echo "==========================================" + log_info "✅ 构建完成!" + echo "==========================================" + log_info "构建目标: ${BUILD_TARGET}" + log_info "构建版本: ${IMAGE_VERSION}" + log_info "输出目录: ${BUILD_OUTPUT}" + echo "==========================================" +} + +main() { + git_update_if_needed + run_compile + run_build_images + show_images_info + + # 保存镜像(可选) + if [ "${DO_SAVE}" = true ]; then + save_images + fi + + print_summary +} + +main -# ================================================ -# 构建完成 -# ================================================ -echo "==========================================" -log_info "✅ 构建完成!" -echo "==========================================" -log_info "构建目标: ${BUILD_TARGET}" -log_info "构建版本: ${IMAGE_VERSION}" -log_info "输出目录: ${BUILD_OUTPUT}" -echo "==========================================" diff --git a/docker/Dockerfile.base-serv b/docker/Dockerfile.base-serv index d864ab4..05dfed9 100644 --- a/docker/Dockerfile.base-serv +++ b/docker/Dockerfile.base-serv @@ -33,6 +33,8 @@ COPY schoolNewsCrawler/requirements.txt /tmp/requirements.txt RUN echo "========================================" && \ echo "安装Python爬虫依赖到基础镜像" && \ echo "========================================" && \ + # 配置pip使用国内镜像源(清华源) + python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && \ python3 -m pip --version && \ echo "" && \ # Python 3.12 引入了 PEP 668 规范,需要添加 --break-system-packages diff --git a/docker/Dockerfile.web b/docker/Dockerfile.web index 9c9c366..54a8b3e 100644 --- a/docker/Dockerfile.web +++ b/docker/Dockerfile.web @@ -9,8 +9,10 @@ FROM node:20-alpine ENV TZ=Asia/Shanghai \ NODE_ENV=production -# 安装基础工具 -RUN apk add --no-cache tzdata bash curl && \ +# 配置国内镜像源并安装基础工具 +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \ + apk update && \ + apk add --no-cache tzdata bash curl && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone @@ -24,7 +26,8 @@ RUN mkdir -p /app/dist /app/config /app/logs COPY schoolNewsWeb/package*.json ./ # 安装生产依赖(包括vite用于preview) -RUN npm ci --only=production && \ +RUN npm config set registry https://registry.npmmirror.com && \ + npm ci --only=production && \ npm install -g vite # 从主机复制已构建的dist目录