| @@ -136,6 +136,42 @@ contains_service() { | |||||
| return 1 | return 1 | ||||
| } | } | ||||
| escape_sed_replacement() { | |||||
| local value="$1" | |||||
| value="${value//\\/\\\\}" | |||||
| value="${value//&/\\&}" | |||||
| value="${value//|/\\|}" | |||||
| printf '%s\n' "$value" | |||||
| } | |||||
| apply_runtime_env_defaults() { | |||||
| local defaults_file="$SCRIPT_DIR/update-env.defaults" | |||||
| [[ -f "$defaults_file" ]] || return 0 | |||||
| local backup_file line key value escaped | |||||
| backup_file="${ENV_FILE}.bak-$(date '+%Y%m%d%H%M%S')" | |||||
| cp "$ENV_FILE" "$backup_file" | |||||
| log "Apply runtime env defaults: $defaults_file" | |||||
| log "Runtime env backup: $backup_file" | |||||
| while IFS= read -r line || [[ -n "$line" ]]; do | |||||
| [[ -n "$line" ]] || continue | |||||
| [[ "$line" == \#* ]] && continue | |||||
| [[ "$line" == *"="* ]] || continue | |||||
| key="${line%%=*}" | |||||
| value="${line#*=}" | |||||
| [[ "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || die "Invalid env key in $defaults_file: $key" | |||||
| escaped="$(escape_sed_replacement "$value")" | |||||
| if grep -q "^${key}=" "$ENV_FILE"; then | |||||
| sed -i "s|^${key}=.*|${key}=${escaped}|" "$ENV_FILE" | |||||
| else | |||||
| printf '\n%s=%s\n' "$key" "$value" >> "$ENV_FILE" | |||||
| fi | |||||
| done < "$defaults_file" | |||||
| } | |||||
| need_cmd docker | need_cmd docker | ||||
| ENV_FILE="$(resolve_runtime_file "$ENV_FILE" ".env")" | ENV_FILE="$(resolve_runtime_file "$ENV_FILE" ".env")" | ||||
| resolve_compose_files | resolve_compose_files | ||||
| @@ -147,6 +183,8 @@ mapfile -t UPDATE_SERVICES < <(read_services "$@") | |||||
| COMPOSE_CMD="$(resolve_compose_cmd)" | COMPOSE_CMD="$(resolve_compose_cmd)" | ||||
| apply_runtime_env_defaults | |||||
| log "Compose files: ${RESOLVED_COMPOSE_FILES[*]}" | log "Compose files: ${RESOLVED_COMPOSE_FILES[*]}" | ||||
| log "Load images: $IMAGE_TAR" | log "Load images: $IMAGE_TAR" | ||||
| docker load -i "$IMAGE_TAR" | docker load -i "$IMAGE_TAR" | ||||
| @@ -224,6 +224,11 @@ prepare_package() { | |||||
| cp "$SCRIPT_DIR/apply-update.sh" "$PACKAGE_DIR/apply-update.sh" | cp "$SCRIPT_DIR/apply-update.sh" "$PACKAGE_DIR/apply-update.sh" | ||||
| chmod +x "$PACKAGE_DIR/apply-update.sh" | chmod +x "$PACKAGE_DIR/apply-update.sh" | ||||
| local profile_dir="${PROFILE_DIR:-$SCRIPT_DIR/profiles/$DEPLOY_ENV}" | |||||
| if [[ -f "$profile_dir/update-env.defaults" ]]; then | |||||
| cp "$profile_dir/update-env.defaults" "$PACKAGE_DIR/update-env.defaults" | |||||
| fi | |||||
| local service | local service | ||||
| for service in "${REQUESTED_SERVICES[@]}"; do | for service in "${REQUESTED_SERVICES[@]}"; do | ||||
| compose_service_name "$service" | compose_service_name "$service" | ||||
| @@ -244,12 +244,12 @@ services: | |||||
| emp-data: | emp-data: | ||||
| <<: *app-env | <<: *app-env | ||||
| image: ${IMAGE_NAMESPACE:-emp-test}/emp-data:${IMAGE_TAG:-latest} | image: ${IMAGE_NAMESPACE:-emp-test}/emp-data:${IMAGE_TAG:-latest} | ||||
| mem_limit: ${EMP_DATA_MEM_LIMIT:-5g} | |||||
| mem_limit: ${EMP_DATA_MEM_LIMIT:-12g} | |||||
| volumes: | volumes: | ||||
| - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-data:/logs | - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-data:/logs | ||||
| environment: | environment: | ||||
| <<: *java-file-log | <<: *java-file-log | ||||
| JAVA_TOOL_OPTIONS: "${EMP_DATA_JAVA_TOOL_OPTIONS:--Xms2g -Xmx4g}" | |||||
| JAVA_TOOL_OPTIONS: "${EMP_DATA_JAVA_TOOL_OPTIONS:--Xms4g -Xmx8g}" | |||||
| LOGGING_FILE_NAME: /logs/emp-data.log | LOGGING_FILE_NAME: /logs/emp-data.log | ||||
| LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-data-%d{yyyy-MM-dd}.%i.log | LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-data-%d{yyyy-MM-dd}.%i.log | ||||
| SPRING_KAFKA_LISTENER_CONCURRENCY: ${EMP_DATA_KAFKA_CONCURRENCY:-10} | SPRING_KAFKA_LISTENER_CONCURRENCY: ${EMP_DATA_KAFKA_CONCURRENCY:-10} | ||||
| @@ -52,6 +52,8 @@ KAFKA_TOPIC=YuanJing-uat-vehicle-mock-data | |||||
| KAFKA_USER= | KAFKA_USER= | ||||
| KAFKA_PWD= | KAFKA_PWD= | ||||
| # emp-data Kafka listener 消费线程数,profiles/docker-compose.yml 会映射为 Spring Kafka concurrency。 | # emp-data Kafka listener 消费线程数,profiles/docker-compose.yml 会映射为 Spring Kafka concurrency。 | ||||
| EMP_DATA_MEM_LIMIT=12g | |||||
| EMP_DATA_JAVA_TOOL_OPTIONS=-Xms4g -Xmx8g | |||||
| EMP_DATA_KAFKA_CONCURRENCY=10 | EMP_DATA_KAFKA_CONCURRENCY=10 | ||||
| EMP_DATA_KAFKA_MAX_POLL_RECORDS=500 | EMP_DATA_KAFKA_MAX_POLL_RECORDS=500 | ||||
| @@ -0,0 +1,4 @@ | |||||
| # Runtime defaults that emp-uat incremental update packages should enforce | |||||
| # before recreating services. | |||||
| EMP_DATA_MEM_LIMIT=12g | |||||
| EMP_DATA_JAVA_TOOL_OPTIONS=-Xms4g -Xmx8g | |||||