Harbor v2.14.2 ARM 架构源码构建与安装指南[亲测]
·
Harbor v2.14.2 ARM 架构源码构建与安装指南
1. 环境准备
1.1 租ARM云服务器
可以在阿里云租一个香港节点的ARM云服务器来执行,构建过程中需要从github等国外网站拉取资源。
1.2 环境检查
# 检查系统架构
uname -m
# 应输出:aarch64
# 检查Docker版本
docker --version
# 检查Docker Compose版本
docker compose version
# 检查必要工具
for tool in docker make curl wget git; do
echo "Checking $tool: $(command -v $tool)"
done
2. 构建过程
2.1 准备源码
# 解压源码包
tar -xzf harbor-2.14.2.tar.gz
cd harbor-2.14.2
2.2 构建脚本
创建构建脚本 build-harbor-arm.sh:
#!/bin/bash
# Harbor 2.14.2 ARM 架构构建脚本
# 适用于 Ubuntu ARM 环境
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HARBOR_DIR="${SCRIPT_DIR}/harbor-2.14.2"
echo "========================================"
echo "Harbor 2.14.2 ARM 架构构建脚本"
echo "========================================"
# 检查是否在 ARM 环境下运行
ARCH=$(uname -m)
if [[ "$ARCH" != "aarch64" && "$ARCH" != "arm64" ]]; then
echo "错误:本脚本仅在 ARM64 环境下运行"
exit 1
fi
echo "检测到 ARM64 架构环境"
# 检查必要的工具
echo "检查必要的工具..."
MISSING_TOOLS=""
for tool in docker make curl wget git; do
if ! command -v $tool &> /dev/null; then
MISSING_TOOLS="${MISSING_TOOLS} ${tool}"
fi
done
# 检查docker compose(支持v1和v2两种形式)
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
MISSING_TOOLS="${MISSING_TOOLS} docker-compose"
fi
if [ -n "$MISSING_TOOLS" ]; then
echo "错误:缺少工具:${MISSING_TOOLS}"
echo "请安装缺失的工具后重新运行"
exit 1
fi
echo "工具检查通过"
# 检查Docker是否运行
if ! docker info &> /dev/null; then
echo "错误:Docker未运行或当前用户没有Docker权限"
echo "请确保Docker已启动并当前用户有Docker访问权限"
exit 1
fi
echo "Docker状态检查通过"
# 进入 Harbor 源码目录
cd "${HARBOR_DIR}" || {
echo "错误:无法进入 ${HARBOR_DIR} 目录"
exit 1
}
echo "已进入 Harbor 源码目录: $(pwd)"
echo "========================================"
echo "准备 ARM 特定工具"
echo "========================================"
# 下载ARM版本的spectral工具
SPECTRAL_VERSION="v6.10.0"
SPECTRAL_TOOL_PATH="${HARBOR_DIR}/tools/spectral"
if [ ! -f "${SPECTRAL_TOOL_PATH}/spectral" ]; then
echo "下载 ARM 版本的 spectral 工具..."
mkdir -p "${SPECTRAL_TOOL_PATH}"
curl -fSL "https://github.com/stoplightio/spectral/releases/download/${SPECTRAL_VERSION}/spectral-linux-arm64" \
-o "${SPECTRAL_TOOL_PATH}/spectral" || {
echo "警告:spectral工具下载失败,将使用Docker镜像替代"
}
if [ -f "${SPECTRAL_TOOL_PATH}/spectral" ]; then
chmod +x "${SPECTRAL_TOOL_PATH}/spectral"
echo "spectral 工具准备完成"
fi
else
echo "spectral 工具已存在"
fi
echo "========================================"
echo "设置 ARM 架构构建环境变量"
echo "========================================"
# ARM 特定的环境变量
export BUILD_BASE=true
export PULL_BASE_FROM_DOCKERHUB=false
export DEVFLAG=true
export BUILD_INSTALLER=true
export VERSIONTAG=dev
# ARM 架构特定的构建参数
export GOARCH=arm64
export BASEIMAGETAG=arm64
export BUILDX_PLATFORM=linux/arm64
# Go编译参数
export CGO_ENABLED=1
export GOOS=linux
echo "环境变量设置完成"
echo "- BUILD_BASE: ${BUILD_BASE}"
echo "- PULL_BASE_FROM_DOCKERHUB: ${PULL_BASE_FROM_DOCKERHUB}"
echo "- DEVFLAG: ${DEVFLAG}"
echo "- BUILD_INSTALLER: ${BUILD_INSTALLER}"
echo "- VERSIONTAG: ${VERSIONTAG}"
echo "- GOARCH: ${GOARCH}"
echo "- BASEIMAGETAG: ${BASEIMAGETAG}"
echo "- BUILDX_PLATFORM: ${BUILDX_PLATFORM}"
echo "========================================"
echo "验证基础镜像"
echo "========================================"
# 验证ARM基础镜像是否存在
PHOTON_BASE_IMAGE="photon:5.0"
if docker images "${PHOTON_BASE_IMAGE}" --format "{{.Repository}}:{{.Tag}}" 2>/dev/null | grep -q "${PHOTON_BASE_IMAGE}"; then
echo "基础镜像 ${PHOTON_BASE_IMAGE} 已存在"
else
echo "注意:基础镜像 ${PHOTON_BASE_IMAGE} 不存在,构建时将自动拉取"
echo "如果是ARM版本,请确保镜像支持ARM64架构"
fi
echo "========================================"
echo "清理旧的构建产物"
echo "========================================"
# 清理旧的构建产物
make cleanall || true
echo "清理完成"
echo "========================================"
echo "生成版本文件"
echo "========================================"
# 生成versions文件
make versions_prepare
echo "versions文件生成完成"
echo "========================================"
echo "编译核心组件 (ARM 版本)"
echo "========================================"
# 编译核心组件,指定ARM架构
make compile_core
echo "core 组件编译完成"
make compile_jobservice
echo "jobservice 组件编译完成"
make compile_registryctl
echo "registryctl 组件编译完成"
make compile_standalone_db_migrator
echo "standalone-db-migrator 组件编译完成"
echo "所有核心组件编译完成"
echo "========================================"
echo "构建 Docker 镜像 (ARM 版本)"
echo "========================================"
# 构建镜像,指定ARM参数
make build \
-e BASEIMAGETAG=${BASEIMAGETAG} \
-e BUILDX_PLATFORM=${BUILDX_PLATFORM} \
-e BUILD_BASE=${BUILD_BASE} \
-e PULL_BASE_FROM_DOCKERHUB=${PULL_BASE_FROM_DOCKERHUB} \
-e DEVFLAG=${DEVFLAG} \
-e BUILD_INSTALLER=${BUILD_INSTALLER} \
-e VERSIONTAG=${VERSIONTAG}
echo "镜像构建完成"
echo "========================================"
echo "准备配置文件"
echo "========================================"
# 复制并准备配置文件
if [ -f "${HARBOR_DIR}/make/harbor.yml.tmpl" ]; then
cp "${HARBOR_DIR}/make/harbor.yml.tmpl" "${HARBOR_DIR}/harbor.yml"
echo "配置文件已生成:harbor.yml"
echo "请编辑 harbor.yml 文件配置您的 Harbor 实例"
else
echo "警告:找不到配置文件模板 harbor.yml.tmpl"
fi
echo "========================================"
echo "打包离线安装包"
echo "========================================"
# 打包离线安装包
make package_offline \
-e BASEIMAGETAG=${BASEIMAGETAG} \
-e VERSIONTAG=${VERSIONTAG} \
-e DEVFLAG=${DEVFLAG} \
-e PULL_BASE_FROM_DOCKERHUB=false \
-e BUILD_BASE=true
echo "离线安装包打包完成"
echo "========================================"
echo "构建完成"
echo "========================================"
# 显示构建结果
echo ""
echo "构建结果文件:"
ls -lh "${SCRIPT_DIR}"/harbor-offline-installer-*.tgz 2>/dev/null || echo "未找到离线安装包"
echo ""
echo "构建的 Docker 镜像:"
docker images | grep -E "harbor|goharbor" || echo "未找到 Harbor 相关镜像"
echo ""
echo "========================================"
echo "Harbor 2.14.2 ARM 版本构建成功!"
echo "========================================"
echo ""
echo "安装说明:"
echo "1. 解压离线安装包:tar -xzf harbor-offline-installer-${VERSIONTAG}.tgz"
echo "2. 进入解压目录:cd harbor"
echo "3. 编辑配置文件:vim harbor.yml"
echo "4. 运行安装:sudo ./install.sh"
echo ""
echo "或者直接使用 docker-compose 启动:"
echo " docker-compose up -d"
echo ""
echo "访问 Harbor Web 界面:http://hostname:8080"
echo "默认管理员账号:admin"
echo "默认管理员密码:Harbor12345"
echo "========================================"
2.3 执行构建
# 给脚本添加执行权限
chmod +x build-harbor-arm.sh
# 执行构建
./build-harbor-arm.sh
2.4 构建过程中的关键步骤
- 环境检查:验证ARM64架构和必要工具
- 工具准备:下载ARM版本的spectral工具
- 核心组件编译:编译core、jobservice、registryctl、standalone-db-migrator
- Docker镜像构建:构建所有ARM64版本的组件镜像
- 离线安装包打包:生成完整的离线安装包
3. 安装说明
3.1 解压安装包
# 解压离线安装包
tar -xzf harbor-offline-installer-dev.tgz
cd harbor
3.2 配置 Harbor
编辑 harbor.yml 配置文件:
# 基本配置
hostname: your-hostname
# HTTP 配置
http:
port: 8080
# HTTPS 配置(可选)
# https:
# port: 443
# certificate: /path/to/cert.crt
# private_key: /path/to/private.key
# 数据存储
data_volume: /data
# 日志配置
log:
level: info
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
# 认证配置
auth:
mode: db_auth
db_auth:
username: root
ldap_auth:
# LDAP 配置(可选)
# Harbor 管理员密码
harbor_admin_password: Harbor12345
# 数据库配置
database:
password: root123
max_idle_conns: 50
max_open_conns: 100
# Redis 配置
redis:
host: redis
port: 6379
password:
db_index: 1
# 存储配置
storage_service:
provider_name: filesystem
filesystem:
rootdirectory: /data/registry
# 扫描器配置
scanner:
name: Trivy
url: http://trivy-adapter:8080
adapter:
enabled: true
api:
timeout: 5m
# 其他配置
jobservice:
max_job_workers: 10
chart:
absolute_url: disabled
notary:
enabled: false
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: false
security_check: vuln
secret: []
java_db_driver_path: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-2.ph4.aarch64/lib/postgresql-42.2.18.jar
3.3 安装 Harbor
# 运行安装脚本
sudo ./install.sh
3.4 启动/停止 Harbor
# 启动 Harbor
docker compose up -d
# 停止 Harbor
docker compose down
# 重启 Harbor
docker compose restart
3.5 卸载 Harbor
# 停止并移除 Harbor 容器
cd harbor
docker compose down -v
# 清理 Harbor 数据和配置
rm -rf /data/harbor # 对应 harbor.yml 中的 data_volume 配置
rm -rf /var/log/harbor # 对应 harbor.yml 中的 log.location 配置
# 清理 Harbor 镜像
docker images --format '{{.Repository}} {{.ID}}' | grep '^goharbor/' | awk '{print $2}' | xargs -r docker rmi -f
# 清理 Harbor 相关网络
docker network prune -f
# 清理 Harbor 相关卷
docker volume prune -f
3.6 访问 Harbor
- Web 界面:
http://your-hostname:8080 - 默认账号:
admin - 默认密码:
Harbor12345
4. 总结
Harbor 2.14.2 在 ARM64 架构下的构建和安装过程与 x86 架构基本相同,主要区别在于:
- 架构指定:通过环境变量指定 ARM64 架构
- 基础镜像:使用支持 ARM64 的基础镜像
- 工具准备:下载 ARM 版本的构建工具
更多推荐




所有评论(0)