Merge branch 'main' of https://gitea.zkzdht.com/Ascend/htknow
This commit is contained in:
commit
fefc5cf80a
10
Dockerfile.rust-builder
Normal file
10
Dockerfile.rust-builder
Normal file
@ -0,0 +1,10 @@
|
||||
# Pinned to Debian Bookworm so the compiled binary is compatible with the
|
||||
# Debian Bookworm runtime image used by Dockerfile (GLIBC 2.36).
|
||||
FROM rust:1-bookworm
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# lance-* generates protobuf bindings during compilation.
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends protobuf-compiler libprotobuf-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
158
build-docker.sh
Normal file → Executable file
158
build-docker.sh
Normal file → Executable file
@ -1,62 +1,114 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
# Build HTKnow on a server without installing Node.js or Rust on the host.
|
||||
#
|
||||
# Examples:
|
||||
# ./build-docker.sh
|
||||
# ./build-docker.sh --tag gwknow:v0.0.2
|
||||
# ./build-docker.sh --skip-frontend --tag gwknow:v0.0.3
|
||||
# IMAGE_TAG=v0.0.3 ./build-docker.sh
|
||||
|
||||
set -e
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Parse command line arguments
|
||||
BUILD_MODE="release"
|
||||
PROFILING_FLAG=""
|
||||
CUSTOM_IMAGE_TAG="${IMAGE_TAG:-}"
|
||||
if [ "${1:-}" = "debug" ] || [ "${1:-}" = "--debug" ]; then
|
||||
BUILD_MODE="debug"
|
||||
PROFILING_FLAG="--features profiling"
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
NODE_IMAGE="${NODE_IMAGE:-docker.1ms.run/node:22}"
|
||||
RUST_BUILDER_IMAGE="${RUST_BUILDER_IMAGE:-htknow-rust-builder:bookworm}"
|
||||
SKIP_FRONTEND=false
|
||||
REBUILD_BUILDER=false
|
||||
IMAGE_TAG="${IMAGE_TAG:-}"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: ./build-docker.sh [options]
|
||||
|
||||
Options:
|
||||
--tag IMAGE Target image tag, for example gwknow:v0.0.2.
|
||||
--skip-frontend Do not rebuild frontend/dist (safe for Rust-only changes).
|
||||
--rebuild-builder Rebuild the cached Rust + protoc builder image.
|
||||
-h, --help Show this help.
|
||||
|
||||
Environment overrides:
|
||||
IMAGE_TAG, NODE_IMAGE, RUST_BUILDER_IMAGE
|
||||
|
||||
If --tag and IMAGE_TAG are omitted, a new gwknow:YYYYmmdd-HHMMSS tag is used.
|
||||
EOF
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--tag)
|
||||
[[ $# -ge 2 ]] || { echo "--tag requires an image tag" >&2; exit 2; }
|
||||
IMAGE_TAG="$2"
|
||||
shift 2
|
||||
;;
|
||||
--skip-frontend|--backend-only)
|
||||
SKIP_FRONTEND=true
|
||||
shift
|
||||
;;
|
||||
--rebuild-builder)
|
||||
REBUILD_BUILDER=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1" >&2
|
||||
usage >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
command -v docker >/dev/null || { echo "docker is not installed or is not in PATH" >&2; exit 1; }
|
||||
docker info >/dev/null 2>&1 || { echo "Docker daemon is unavailable" >&2; exit 1; }
|
||||
|
||||
if [[ -z "$IMAGE_TAG" ]]; then
|
||||
IMAGE_TAG="gwknow:$(date +%Y%m%d-%H%M%S)"
|
||||
elif [[ "$IMAGE_TAG" != *:* ]]; then
|
||||
IMAGE_TAG="gwknow:${IMAGE_TAG}"
|
||||
fi
|
||||
|
||||
# Build frontend
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
cd ..
|
||||
HOST_UID="$(id -u)"
|
||||
HOST_GID="$(id -g)"
|
||||
mkdir -p .cargo-cache .npm-cache
|
||||
|
||||
if [ "$BUILD_MODE" = "debug" ]; then
|
||||
echo "Building htknow for debug with profiling..."
|
||||
cargo build ${PROFILING_FLAG}
|
||||
if [ -n "$CUSTOM_IMAGE_TAG" ]; then
|
||||
IMAGE_TAG="${CUSTOM_IMAGE_TAG}-debug"
|
||||
else
|
||||
IMAGE_TAG="$(date +%Y%m%d%H%M)-debug"
|
||||
fi
|
||||
DOCKERFILE="Dockerfile.debug"
|
||||
echo "Using Dockerfile.debug with jemalloc profiling tools"
|
||||
if [[ "$REBUILD_BUILDER" == true ]] || ! docker image inspect "$RUST_BUILDER_IMAGE" >/dev/null 2>&1; then
|
||||
echo "==> Building Rust builder image: $RUST_BUILDER_IMAGE"
|
||||
docker build -t "$RUST_BUILDER_IMAGE" -f Dockerfile.rust-builder .
|
||||
fi
|
||||
|
||||
if [[ "$SKIP_FRONTEND" == false ]]; then
|
||||
echo "==> Building frontend with $NODE_IMAGE"
|
||||
docker run --rm \
|
||||
--user "${HOST_UID}:${HOST_GID}" \
|
||||
-e HOME=/tmp \
|
||||
-e npm_config_cache=/npm-cache \
|
||||
-v "$ROOT_DIR":/app \
|
||||
-v "$ROOT_DIR/.npm-cache":/npm-cache \
|
||||
-w /app/frontend \
|
||||
"$NODE_IMAGE" \
|
||||
sh -c 'npm ci && npm run build'
|
||||
else
|
||||
echo "Building htknow for release (profiling disabled)..."
|
||||
cargo build --release
|
||||
if [ -n "$CUSTOM_IMAGE_TAG" ]; then
|
||||
IMAGE_TAG="${CUSTOM_IMAGE_TAG}"
|
||||
else
|
||||
IMAGE_TAG="$(date +%Y%m%d%H%M)"
|
||||
fi
|
||||
DOCKERFILE="Dockerfile"
|
||||
echo "==> Skipping frontend build (--skip-frontend)"
|
||||
fi
|
||||
|
||||
# Build Docker image
|
||||
echo "Building Docker image with ${DOCKERFILE}..."
|
||||
docker build -f "${DOCKERFILE}" -t "htknow:${IMAGE_TAG}" -t htknow:latest .
|
||||
echo "==> Building Rust release binary with $RUST_BUILDER_IMAGE"
|
||||
docker run --rm \
|
||||
--user "${HOST_UID}:${HOST_GID}" \
|
||||
-e HOME=/tmp \
|
||||
-e CARGO_HOME=/cargo-cache \
|
||||
-v "$ROOT_DIR":/app \
|
||||
-v "$ROOT_DIR/.cargo-cache":/cargo-cache \
|
||||
-w /app \
|
||||
"$RUST_BUILDER_IMAGE" \
|
||||
bash -c 'cargo build --locked --release'
|
||||
|
||||
echo "Build complete!"
|
||||
echo ""
|
||||
echo "Image tag: htknow:${IMAGE_TAG}"
|
||||
echo "Latest tag: htknow:latest"
|
||||
echo "BUILT_IMAGE=htknow:${IMAGE_TAG}"
|
||||
echo "BUILT_LATEST_IMAGE=htknow:latest"
|
||||
echo "Build mode: ${BUILD_MODE}"
|
||||
echo ""
|
||||
echo "To run the container:"
|
||||
echo " docker-compose up -d"
|
||||
echo ""
|
||||
echo "Or manually:"
|
||||
echo " docker run -d -p 8080:8080 -v \$(pwd)/data:/app/data --name htknow htknow:${IMAGE_TAG}"
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo " ./build-docker.sh # Build in release mode (default)"
|
||||
echo " ./build-docker.sh debug # Build in debug mode"
|
||||
echo " IMAGE_TAG=v1.2.3 ./build-docker.sh # Use custom image tag"
|
||||
echo "==> Building runtime image: $IMAGE_TAG"
|
||||
docker build -f Dockerfile -t "$IMAGE_TAG" .
|
||||
|
||||
echo
|
||||
echo "Build complete: $IMAGE_TAG"
|
||||
echo "To deploy, update the compose image tag and recreate only the intended service."
|
||||
|
||||
8349
src/processor.rs
8349
src/processor.rs
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user