918bbed0fc
- 修复 deps.py 中 get_vn_service 的引用错误 (vn_service.vn_service -> vn_service) - 移除登录页面上的明文密码提示 - 改进前端错误处理,避免数据加载失败导致登录显示错误
161 lines
3.2 KiB
Bash
Executable File
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 "$@"
|