feat: add mise base

This commit is contained in:
engigu
2026-02-12 12:10:44 +08:00
parent 5e1ea6b93f
commit be6a490a19
8 changed files with 87 additions and 77 deletions
+11 -4
View File
@@ -97,19 +97,25 @@ deps:
# Docker build
docker-build:
docker build -t $(BINARY) -f docker/Dockerfile .
docker build -t baihu:dev -f docker/Dockerfile .
# Docker run
docker-run:
docker run -p 8052:8052 $(BINARY)
docker run -p 8052:8052 baihu:dev
# Docker compose up
docker-up:
docker-compose -f docker/docker-compose.yml up -d
docker-compose up -d
# Docker compose down
docker-down:
docker-compose -f docker/docker-compose.yml down
docker-compose down
# Build and run in development mode (foreground with logs)
docker-dev:
docker-compose down
docker-compose build
docker-compose up
# Help
help:
@@ -124,4 +130,5 @@ help:
@echo " docker-run - Run Docker container"
@echo " docker-up - Start Docker Compose stack"
@echo " docker-down - Stop Docker Compose stack"
@echo " docker-dev - Build and run Docker Compose in foreground"
@echo " help - Show this help message"
@@ -1,6 +1,8 @@
services:
baihu:
build: .
build:
context: .
dockerfile: docker/Dockerfile
ports:
- "8052:8052"
volumes:
+1 -2
View File
@@ -115,8 +115,7 @@ FROM ghcr.io/engigu/baihu:${BASE_TAG}
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
ENV NODE_PATH="/app/envs/node/lib/node_modules"
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
# # 安装必要系统工具 + Node + Python
# RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
+16 -15
View File
@@ -1,24 +1,25 @@
FROM alpine:3.19
ENV TZ=Asia/Shanghai
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
ENV NODE_PATH="/app/envs/node/lib/node_modules"
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
# 安装必要系统工具 + Node + Python
# 安装必要系统工具
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache \
tzdata \
git \
gcc \
musl-dev \
curl \
wget \
vim \
nodejs \
npm \
python3 \
py3-pip \
htop \
tzdata git bash curl wget vim htop ca-certificates rsync \
# Python build dependencies
build-base libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev ncurses-dev xz-dev \
&& cp /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo "${TZ}" > /etc/timezone \
&& rm -rf /var/cache/apk/*
# 安装 mise
RUN curl https://mise.run | MISE_INSTALL_PATH=/usr/local/bin/mise sh
# 使用 mise 安装最新版本的 Node.js 和 Python
# 暂时安装到 /opt/mise-base,启动时会复制到 /app/envs/mise
ENV MISE_DATA_DIR=/opt/mise-base
ENV MISE_CONFIG_DIR=/opt/mise-base
ENV MISE_HTTP_TIMEOUT=300
RUN (mise use -g node@latest python@latest || mise use -g node@latest python@latest || mise use -g node@latest python@latest) \
&& mise prune -- -f
+17 -4
View File
@@ -1,15 +1,28 @@
FROM debian:bookworm-slim
ENV TZ=Asia/Shanghai
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
ENV NODE_PATH="/app/envs/node/lib/node_modules"
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
# 安装必要系统工具 + Node + Python
# 安装必要系统工具
RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
&& sed -i 's@security.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
&& echo "${TZ}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
tzdata git gcc curl wget vim nodejs htop npm python3 python3-venv python3-pip \
tzdata git gcc curl wget vim htop ca-certificates rsync \
build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev libncursesw5-dev \
xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 mise
RUN curl https://mise.run | MISE_INSTALL_PATH=/usr/local/bin/mise sh
# 使用 mise 安装最新版本的 Node.js 和 Python
# 暂时安装到 /opt/mise-base,启动时会复制到 /app/envs/mise
ENV MISE_DATA_DIR=/opt/mise-base
ENV MISE_CONFIG_DIR=/opt/mise-base
ENV MISE_HTTP_TIMEOUT=300
RUN (mise use -g node@latest python@latest || mise use -g node@latest python@latest || mise use -g node@latest python@latest) \
&& mise prune -- -f
+17 -4
View File
@@ -1,15 +1,28 @@
FROM debian:trixie-slim
ENV TZ=Asia/Shanghai
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
ENV NODE_PATH="/app/envs/node/lib/node_modules"
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
# 安装必要系统工具 + Node + Python
# 安装必要系统工具
RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
&& sed -i 's@security.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
&& echo "${TZ}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
tzdata git gcc curl wget vim nodejs htop npm python3 python3-venv python3-pip \
tzdata git gcc curl wget vim htop ca-certificates rsync \
build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev libncursesw5-dev \
xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 mise
RUN curl https://mise.run | MISE_INSTALL_PATH=/usr/local/bin/mise sh
# 使用 mise 安装最新版本的 Node.js 和 Python
# 暂时安装到 /opt/mise-base,启动时会复制到 /app/envs/mise
ENV MISE_DATA_DIR=/opt/mise-base
ENV MISE_CONFIG_DIR=/opt/mise-base
ENV MISE_HTTP_TIMEOUT=300
RUN (mise use -g node@latest python@latest || mise use -g node@latest python@latest || mise use -g node@latest python@latest) \
&& mise prune -- -f
+22 -47
View File
@@ -3,8 +3,7 @@ set -e
export LANG=C.UTF-8
export LC_ALL=C.UTF-8
PYTHON_VENV_DIR="/app/envs/python"
NODE_ENV_DIR="/app/envs/node"
MISE_DIR="/app/envs/mise"
echo "[entrypoint] Starting environment initialization..."
@@ -15,66 +14,42 @@ mkdir -p \
/app/data \
/app/data/scripts \
/app/configs \
/app/envs \
"$NODE_ENV_DIR"
/app/envs
# ============================
# Python 虚拟环境(后台并行)
# Mise 环境初始化
# ============================
(
if [ ! -x "$PYTHON_VENV_DIR/bin/python" ]; then
echo "[entrypoint][Python3] Creating Python virtual environment..."
python3 -m venv "$PYTHON_VENV_DIR"
"$PYTHON_VENV_DIR/bin/pip" config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
"$PYTHON_VENV_DIR/bin/pip" install --upgrade pip setuptools wheel
echo "[entrypoint][Python3] Python venv created"
else
echo "[entrypoint][Python3] Python venv exists"
fi
) &
PYTHON_PID=$!
if [ ! -d "$MISE_DIR" ] || [ -z "$(ls -A "$MISE_DIR")" ]; then
echo "[entrypoint][Mise] Initializing mise environment from base..."
mkdir -p "$MISE_DIR"
# 使用 rsync 同步,更好地处理 Mac 挂载目录的大小写冲突,并跳过已存在文件
rsync -a --ignore-existing /opt/mise-base/ "$MISE_DIR/" || true
echo "[entrypoint][Mise] Mise environment initialized"
else
echo "[entrypoint][Mise] Mise environment exists at $MISE_DIR"
fi
# ============================
# Node 环境(后台并行)
# 环境变量注入
# ============================
(
echo "[entrypoint][Nodejs] Initializing Node npm prefix..."
# npm 全局安装目录 → /app/envs/node
npm config set prefix "$NODE_ENV_DIR"
# npm 行为优化(防内存暴涨)
npm config set registry https://registry.npmmirror.com
npm config set audit false
npm config set fund false
npm config set progress false
npm config set maxsockets 2
echo "[entrypoint][Nodejs] Node npm configured"
) &
NODE_PID=$!
export MISE_DATA_DIR="$MISE_DIR"
export MISE_CONFIG_DIR="$MISE_DIR"
export PATH="$MISE_DIR/shims:$MISE_DIR/bin:$PATH"
# 等待两个后台任务完成
echo "[entrypoint] Waiting for environment initialization..."
wait $PYTHON_PID
wait $NODE_PID
echo "[entrypoint] Environment initialization completed"
# 默认启用 Python 镜像源
export PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
# Node 内存限制
export NODE_OPTIONS="--max-old-space-size=256"
# ============================
# 环境变量注入(等价 activate)
# ============================
export PATH="$PYTHON_VENV_DIR/bin:$NODE_ENV_DIR/bin:$PATH"
export NODE_PATH="$NODE_ENV_DIR/lib/node_modules"
export PYTHONPATH=/app/data/scripts:$PYTHONPATH
# ============================
# 打印确认
# ============================
echo "[entrypoint][Python3] python: $(which python)"
echo "[entrypoint][Python3] pip: $(which pip)"
echo "[entrypoint][Nodejs] node: $(which node)"
echo "[entrypoint][Nodejs] npm prefix: $(npm config get prefix)"
echo "[entrypoint][Nodejs] npm root: $(npm root -g)"
echo "[entrypoint][Mise] mise version: $(mise --version)"
echo "[entrypoint][Python3] python: $(python --version) at $(which python)"
echo "[entrypoint][Nodejs] node: $(node --version) at $(which node)"
echo "[entrypoint][Nodejs] npm: $(npm --version) at $(which npm)"
# ============================
# 启动应用