fix: 修复 Dockerfile 中 chown 目录可能导致用户权限的问题;

refs #20
This commit is contained in:
sundapeng.sdp
2025-10-16 11:45:28 +08:00
parent 2a79935b7a
commit e8a543e1d1
13 changed files with 109 additions and 155 deletions

View File

@@ -9,8 +9,9 @@ services:
context: ../ftp/build
dockerfile: Dockerfile
args:
FTP_UID: ${FTP_UID:-2133}
FTP_GID: ${FTP_GID:-2015}
ARGUS_BUILD_UID: ${ARGUS_BUILD_UID:-2133}
ARGUS_BUILD_GID: ${ARGUS_BUILD_GID:-2015}
USE_INTRANET: ${USE_INTRANET:-false}
image: argus-metric-ftp:latest
container_name: argus-ftp
restart: unless-stopped
@@ -18,9 +19,9 @@ services:
- TZ=Asia/Shanghai
- FTP_BASE_PATH=/private/argus/ftp
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- DOMAIN=${FTP_DOMAIN:-prom.ftp.argus.com}
- FTP_UID=${FTP_UID:-2133}
- FTP_GID=${FTP_GID:-2015}
- DOMAIN=${FTP_DOMAIN:-ftp.metric.argus.com}
- ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
- ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
ports:
- "${FTP_PORT:-21}:21"
- "${FTP_DATA_PORT:-20}:20"
@@ -44,8 +45,8 @@ services:
context: ../prometheus/build
dockerfile: Dockerfile
args:
PROMETHEUS_UID: ${PROMETHEUS_UID:-2133}
PROMETHEUS_GID: ${PROMETHEUS_GID:-2015}
ARGUS_BUILD_UID: ${ARGUS_BUILD_UID:-2133}
ARGUS_BUILD_GID: ${ARGUS_BUILD_GID:-2015}
USE_INTRANET: ${USE_INTRANET:-false}
image: argus-metric-prometheus:latest
container_name: argus-prometheus
@@ -53,8 +54,8 @@ services:
environment:
- TZ=Asia/Shanghai
- PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus
- PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
- PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
- ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
- ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
ports:
- "${PROMETHEUS_PORT:-9090}:9090"
volumes:
@@ -76,16 +77,16 @@ services:
context: ../grafana/build
dockerfile: Dockerfile
args:
GRAFANA_UID: ${GRAFANA_UID:-2133}
GRAFANA_GID: ${GRAFANA_GID:-2015}
ARGUS_BUILD_UID: ${ARGUS_BUILD_UID:-2133}
ARGUS_BUILD_GID: ${ARGUS_BUILD_GID:-2015}
image: argus-metric-grafana:latest
container_name: argus-grafana
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- GRAFANA_BASE_PATH=/private/argus/metric/grafana
- GRAFANA_UID=${GRAFANA_UID:-2133}
- GRAFANA_GID=${GRAFANA_GID:-2015}
- ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
- ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
- GF_SERVER_HTTP_PORT=3000
- GF_LOG_LEVEL=warn
- GF_LOG_MODE=console

View File

@@ -1,19 +1,15 @@
# 用户和组配置
FTP_UID=2133
FTP_GID=2015
PROMETHEUS_UID=2133
PROMETHEUS_GID=2015
GRAFANA_UID=2133
GRAFANA_GID=2015
# 统一用户和组配置
ARGUS_BUILD_UID=1048
ARGUS_BUILD_GID=1048
# 数据根目录
DATA_ROOT=/private/argus
DATA_ROOT=/private
# FTP 配置
FTP_PORT=2122
FTP_DATA_PORT=2022
FTP_PORT=21
FTP_DATA_PORT=20
FTP_PASSWORD=ZGClab1234!
FTP_DOMAIN=prom.ftp.argus.com
FTP_DOMAIN=ftp.metric.argus.com
# Prometheus 配置
PROMETHEUS_PORT=9090

View File

@@ -1,14 +1,12 @@
#!/bin/bash
set -e
FTP_DOMAIN="${FTP_DOMAIN:-ftp.metric.argus.com}"
FTP_SERVER="${FTP_SERVER:-172.30.0.40}"
FTP_USER="${FTP_USER:-ftpuser}"
FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}"
FTP_PORT="${FTP_PORT:-21}"
# 优先使用域名,如果域名不可用则使用 IP
FTP_HOST="${FTP_DOMAIN:-$FTP_SERVER}"
FTP_HOST="${FTP_SERVER}"
echo "[03] 进入测试节点执行安装..."
echo "[03] 使用 FTP 地址: ${FTP_HOST}:${FTP_PORT}"

View File

@@ -1,7 +1,6 @@
#!/bin/bash
# 初始化目录脚本
# 用于创建所有必要的数据目录并设置正确的权限
set -e
@@ -16,61 +15,47 @@ if [ -f .env ]; then
fi
# 默认配置
FTP_UID=${FTP_UID:-2133}
FTP_GID=${FTP_GID:-2015}
PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
GRAFANA_UID=${GRAFANA_UID:-2133}
GRAFANA_GID=${GRAFANA_GID:-2015}
ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133}
ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015}
DATA_ROOT=${DATA_ROOT:-/private}
echo "开始初始化目录结构..."
echo "数据根目录: ${DATA_ROOT}"
echo ""
echo "统一 UID: ${ARGUS_BUILD_UID}"
echo "统一 GID: ${ARGUS_BUILD_GID}"
# 创建基础目录结构
echo "创建基础目录结构..."
sudo mkdir -p ${DATA_ROOT}/argus/metric
sudo mkdir -p ${DATA_ROOT}/argus/etc
sudo mkdir -p ${DATA_ROOT}/argus/agent
# 创建 FTP 目录
echo "创建 FTP 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/metric/ftp/share
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/metric/ftp
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/ftp
# 创建 Prometheus 目录
echo "创建 Prometheus 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/metric/prometheus/{data,rules,targets}
# 统一设置 Prometheus 目录权限
sudo chown -R ${PROMETHEUS_UID}:${PROMETHEUS_GID} ${DATA_ROOT}/argus/metric/prometheus
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/prometheus
# 创建 Grafana 目录
echo "创建 Grafana 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/metric/grafana/{data,logs,plugins,provisioning/datasources,provisioning/dashboards,data/sessions,data/dashboards,config}
sudo chown -R ${GRAFANA_UID}:${GRAFANA_GID} ${DATA_ROOT}/argus/metric/grafana
sudo chmod -R 755 ${DATA_ROOT}/argus/metric/grafana
# 创建公共配置目录
echo "创建公共配置目录..."
sudo mkdir -p ${DATA_ROOT}/argus/etc
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/etc
sudo chmod -R 755 ${DATA_ROOT}/argus/etc
# 创建 Agent 目录
echo "创建 Agent 目录..."
sudo mkdir -p ${DATA_ROOT}/argus/agent
sudo chown -R ${FTP_UID}:${FTP_GID} ${DATA_ROOT}/argus/agent
sudo chmod -R 755 ${DATA_ROOT}/argus/agent
# 统一设置所有目录权限
echo "设置目录权限..."
sudo chown -R ${ARGUS_BUILD_UID}:${ARGUS_BUILD_GID} ${DATA_ROOT}/argus/metric
sudo chmod -R 755 ${DATA_ROOT}/argus/metric
echo "目录初始化完成!"
echo ""
echo "目录结构:"
echo " ${DATA_ROOT}/"
echo " ├── argus/"
echo " ├── argus/ (UID:${ARGUS_BUILD_UID}, GID:${ARGUS_BUILD_GID})"
echo " │ ├── metric/"
echo " │ │ ├── ftp/ (UID:${FTP_UID}, GID:${FTP_GID})"
echo " │ │ ├── prometheus/ (UID:${PROMETHEUS_UID}, GID:${PROMETHEUS_GID})"
echo " │ │ └── grafana/ (UID:${GRAFANA_UID}, GID:${GRAFANA_GID})"
echo " │ ├── etc/ (UID:${FTP_UID}, GID:${FTP_GID})"
echo " │ └── agent/ (UID:${FTP_UID}, GID:${FTP_GID})"
echo " │ │ ├── ftp/"
echo " │ │ ├── prometheus/"
echo " │ │ └── grafana/"
echo ""
echo "您现在可以运行 'docker-compose up -d' 来启动所有服务"

View File

@@ -151,7 +151,7 @@ else
echo "部分镜像缺失,开始构建..."
echo "工作目录: $(pwd)"
cd "$TEST_DIR"
docker compose build
docker compose build --no-cache
# 询问是否保存镜像
echo ""

View File

@@ -22,57 +22,38 @@ if [ ! -d "$INPUT_DIR" ]; then
exit 1
fi
# 定义要加载的镜像文件和期望的镜像名称
declare -A IMAGES=(
["argus-ftp.tar"]="argus-metric-ftp:latest"
["argus-prometheus.tar"]="argus-metric-prometheus:latest"
["argus-grafana.tar"]="argus-metric-grafana:latest"
["test-node.tar"]="ubuntu:22.04"
)
# 加载镜像
# 查找所有tar文件并加载
total=0
success=0
skipped=0
failed=0
for tar_file in "${!IMAGES[@]}"; do
# 查找目录下所有.tar文件
tar_files=($(find "$INPUT_DIR" -name "*.tar" -type f 2>/dev/null | sort))
if [ ${#tar_files[@]} -eq 0 ]; then
echo "错误: 在目录 $INPUT_DIR 中未找到任何 .tar 文件"
exit 1
fi
echo "找到 ${#tar_files[@]} 个镜像文件:"
for tar_file in "${tar_files[@]}"; do
echo " - $(basename "$tar_file")"
done
echo ""
for tar_file in "${tar_files[@]}"; do
total=$((total + 1))
input_file="${INPUT_DIR}/${tar_file}"
image_name="${IMAGES[$tar_file]}"
tar_filename=$(basename "$tar_file")
echo "[$total] 处理: $tar_file"
echo "[$total] 处理: $tar_filename"
# 检查 tar 文件是否存在
if [ ! -f "$input_file" ]; then
echo " ✗ 文件不存在: $tar_file"
failed=$((failed + 1))
echo ""
continue
fi
# 检查镜像是否已存在
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image_name}$"; then
echo " ⊙ 镜像已存在: $image_name (跳过)"
skipped=$((skipped + 1))
echo ""
continue
fi
# 加载镜像
echo " → 加载镜像..."
if docker load -i "$input_file"; then
# 验证加载后的镜像
if docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image_name}$"; then
echo " ✓ 加载成功: $image_name"
success=$((success + 1))
else
echo " ⚠ 加载完成,但镜像名称可能不匹配"
echo " 请检查: docker images | grep '${image_name%:*}'"
success=$((success + 1))
fi
# 强制加载,不检查镜像是否已存在
echo " 加载镜像..."
if docker load -i "$tar_file"; then
echo " 加载成功: $tar_filename"
success=$((success + 1))
else
echo " ✗ 加载失败: $tar_file"
echo " 加载失败: $tar_filename"
failed=$((failed + 1))
fi
echo ""
@@ -85,13 +66,12 @@ echo ""
echo "统计:"
echo " 总计: $total"
echo " 成功: $success"
echo " 跳过: $skipped"
echo " 失败: $failed"
echo ""
# 显示当前的镜像
echo "当前 Argus 相关镜像:"
docker images | grep -E "REPOSITORY|argus-metric" || echo "未找到 argus-metric 镜像"
# 显示当前所有镜像
echo "当前所有镜像:"
docker images
echo ""
if [ $failed -gt 0 ]; then
@@ -100,10 +80,6 @@ if [ $failed -gt 0 ]; then
fi
if [ $success -gt 0 ]; then
echo "✓ 镜像加载成功!"
echo ""
echo "下一步:"
echo " 运行: bash scripts/common/start-all.sh"
echo " 或者: docker-compose up -d"
echo "镜像加载成功!"
fi