This commit is contained in:
vipg
2025-11-12 17:10:40 +08:00
parent f5277b087b
commit 8fba06bca3
4 changed files with 119 additions and 2 deletions

View File

@@ -19,7 +19,7 @@ IMAGE_NAME="country-api"
IMAGE_TAG="1.0.0"
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
COMPOSE_PROJECT_NAME="country_service"
DOCKER_COMPOSE_FILE="./docker-compose.yaml" # ✅ 关键修复:等号两侧无空格
DOCKER_COMPOSE_FILE="./docker-compose.yaml"
SRC_DIR="./src"
DOCKERFILE_PATH="${SRC_DIR}/Dockerfile"
@@ -83,4 +83,4 @@ else
exit 1
fi
log_info "===== 构建脚本执行完成 ====="
log_info "===== 构建脚本执行完成 ====="

View File

@@ -0,0 +1,17 @@
# 生产阶段:使用指定版本的 Nginx Alpine 镜像(大小写统一)
FROM nginx:1.29.3-alpine AS production-stage
# 清除 Nginx 默认静态文件
RUN rm -rf /usr/share/nginx/html/*
# 复制项目所有文件到 Nginx 静态文件目录(适配你的项目结构)
COPY . /usr/share/nginx/html
# 复制自定义 Nginx 配置(解决 SPA 路由刷新 404 问题,必须添加)
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
# 暴露 80 端口
EXPOSE 80
# 启动 Nginx前台运行
CMD ["nginx", "-g", "daemon off;"]

View File

@@ -0,0 +1,63 @@
#!/bin/bash
set -euo pipefail # 更严格的错误检查:未定义变量报错、管道错误传递
# 定义日志函数(带时间戳和级别)
log_info() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1"
}
log_warn() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [WARN] $1" >&2
}
log_error() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2
}
# 定义配置常量(等号两侧无空格!集中管理,便于修改)
IMAGE_NAME="asset-assistant-frontend-system"
IMAGE_TAG="1.0.0"
FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}"
DOCKERFILE_PATH="./Dockerfile"
SERVICE_NAME="asset-assistant-frontend" # 服务容器名称,便于管理
HOST_PORT=8080 # 主机映射端口
CONTAINER_PORT=80 # 容器内部端口
log_info "===== 开始执行构建脚本 ====="
# 步骤1停止并删除现有容器忽略不存在的情况
log_info "检查并停止现有容器: ${SERVICE_NAME}"
if sudo docker rm -f "${SERVICE_NAME}" >/dev/null 2>&1; then
log_info "容器 ${SERVICE_NAME} 已停止并删除"
else
log_warn "容器 ${SERVICE_NAME} 不存在,跳过删除步骤"
fi
# 步骤2删除现有镜像忽略不存在的情况
log_info "尝试删除现有镜像: ${FULL_IMAGE}"
if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then
log_info "镜像 ${FULL_IMAGE} 删除成功"
else
log_warn "镜像 ${FULL_IMAGE} 不存在或无法删除,跳过删除步骤"
fi
# 步骤3构建新镜像
log_info "开始构建新镜像: ${FULL_IMAGE}Dockerfile位于${DOCKERFILE_PATH}"
if sudo docker build -t "${FULL_IMAGE}" -f Dockerfile .; then
log_info "镜像 ${FULL_IMAGE} 构建成功"
else
log_error "镜像 ${FULL_IMAGE} 构建失败"
exit 1
fi
# 步骤4启动服务
log_info "启动新容器: ${SERVICE_NAME}${HOST_PORT}:${CONTAINER_PORT}"
# 启动容器(后台运行、端口映射、命名容器)
if sudo docker run -d -p "${HOST_PORT}:${CONTAINER_PORT}" --name "${SERVICE_NAME}" "${FULL_IMAGE}"; then
log_info "容器 ${SERVICE_NAME} 启动成功,访问地址: http://localhost:${HOST_PORT}"
else
log_error "容器 ${SERVICE_NAME} 启动失败"
exit 1
fi
log_info "===== 构建脚本执行完成 ====="

View File

@@ -0,0 +1,37 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html; # 入口文件指向项目根目录的 index.html
# 支持 SPA 路由重写关键解决刷新404
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-cache"; # 入口文件不缓存
}
# 静态资源缓存配置JS/CSS/图片等)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|otf)$ {
expires 7d; # 缓存7天
add_header Cache-Control "public, max-age=604800";
add_header Access-Control-Allow-Origin "*"; # 允许跨域(可选)
}
# 禁止访问隐藏文件(如 .git、.env 等)
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# 优化 Nginx 响应速度
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# 关闭不必要的日志
access_log off;
error_log /var/log/nginx/error.log warn;
}