Files
sanguo_vnpy_v2/docker/build.sh
T
claude_dev 918bbed0fc fix: 修复登录500错误和移除明文密码提示
- 修复 deps.py 中 get_vn_service 的引用错误 (vn_service.vn_service -> vn_service)
- 移除登录页面上的明文密码提示
- 改进前端错误处理,避免数据加载失败导致登录显示错误
2026-07-02 12:23:55 +08:00

161 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# Sanguo VeighNa 分层构建脚本
# 用法: ./docker/build.sh [base|app|all|clean]
set -e
# 配置
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
REGISTRY="${REGISTRY:-sanguo_vnpy}"
BASE_TAG="${REGISTRY}:base"
APP_TAG="${REGISTRY}:latest"
# 颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 Docker
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装"
exit 1
fi
log_info "Docker 版本: $(docker --version)"
}
# 构建基础镜像
build_base() {
log_info "开始构建基础镜像..."
log_info "预计时间: 20-30 分钟"
cd "$PROJECT_DIR"
docker build \
-f docker/Dockerfile.base \
-t "$BASE_TAG" \
--build-arg PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple \
--build-arg PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn \
.
log_info "基础镜像构建完成: $BASE_TAG"
docker images "$BASE_TAG"
}
# 构建应用镜像
build_app() {
log_info "开始构建应用镜像..."
log_info "预计时间: 3-5 分钟"
cd "$PROJECT_DIR"
# 检查基础镜像
if ! docker image inspect "$BASE_TAG" &> /dev/null; then
log_warn "基础镜像不存在,先构建基础镜像"
build_base
fi
docker build \
-f docker/Dockerfile.nas \
-t "$APP_TAG" \
.
log_info "应用镜像构建完成: $APP_TAG"
docker images "$APP_TAG"
}
# 全量构建
build_all() {
log_info "开始全量构建..."
build_base
build_app
}
# 清理旧镜像
clean_images() {
log_info "清理旧镜像..."
# 删除悬空镜像
docker image prune -f
# 询问是否删除旧版本
read -p "是否删除旧版本镜像? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker images "$REGISTRY" --format "{{.ID}} {{.Tag}}" | \
grep -v "$BASE_TAG\|$APP_TAG" | \
awk '{print $1}' | \
xargs -r docker rmi
log_info "旧镜像已清理"
fi
}
# 显示帮助
show_help() {
cat << EOF
Sanguo VeighNa 分层构建脚本
用法: $0 [命令]
命令:
base 构建基础镜像 (依赖层,约30分钟)
app 构建应用镜像 (应用层,约5分钟)
all 全量构建 (base + app)
clean 清理旧镜像
help 显示此帮助
示例:
$0 base # 首次构建或依赖更新时
$0 app # 代码更新后快速重建
$0 all # 完整构建
$0 clean # 清理旧镜像
环境变量:
REGISTRY 镜像前缀 (默认: sanguo_vnpy)
EOF
}
# 主逻辑
main() {
check_docker
case "${1:-help}" in
base)
build_base
;;
app)
build_app
;;
all)
build_all
;;
clean)
clean_images
;;
help|--help|-h)
show_help
;;
*)
log_error "未知命令: $1"
show_help
exit 1
;;
esac
}
main "$@"