feat: add mise base
This commit is contained in:
@@ -97,19 +97,25 @@ deps:
|
|||||||
|
|
||||||
# Docker build
|
# Docker build
|
||||||
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:
|
docker-run:
|
||||||
docker run -p 8052:8052 $(BINARY)
|
docker run -p 8052:8052 baihu:dev
|
||||||
|
|
||||||
# Docker compose up
|
# Docker compose up
|
||||||
docker-up:
|
docker-up:
|
||||||
docker-compose -f docker/docker-compose.yml up -d
|
docker-compose up -d
|
||||||
|
|
||||||
# Docker compose down
|
# Docker compose down
|
||||||
docker-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
|
||||||
help:
|
help:
|
||||||
@@ -124,4 +130,5 @@ help:
|
|||||||
@echo " docker-run - Run Docker container"
|
@echo " docker-run - Run Docker container"
|
||||||
@echo " docker-up - Start Docker Compose stack"
|
@echo " docker-up - Start Docker Compose stack"
|
||||||
@echo " docker-down - Stop 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"
|
@echo " help - Show this help message"
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
services:
|
services:
|
||||||
baihu:
|
baihu:
|
||||||
build: .
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: docker/Dockerfile
|
||||||
ports:
|
ports:
|
||||||
- "8052:8052"
|
- "8052:8052"
|
||||||
volumes:
|
volumes:
|
||||||
+1
-2
@@ -115,8 +115,7 @@ FROM ghcr.io/engigu/baihu:${BASE_TAG}
|
|||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
ENV LANG=C.UTF-8
|
ENV LANG=C.UTF-8
|
||||||
ENV LC_ALL=C.UTF-8
|
ENV LC_ALL=C.UTF-8
|
||||||
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
|
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
|
||||||
ENV NODE_PATH="/app/envs/node/lib/node_modules"
|
|
||||||
|
|
||||||
# # 安装必要系统工具 + Node + Python
|
# # 安装必要系统工具 + Node + Python
|
||||||
# RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
|
# RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
FROM alpine:3.19
|
FROM alpine:3.19
|
||||||
|
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
|
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
|
||||||
ENV NODE_PATH="/app/envs/node/lib/node_modules"
|
|
||||||
|
|
||||||
# 安装必要系统工具 + Node + Python
|
# 安装必要系统工具
|
||||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
|
||||||
&& apk add --no-cache \
|
&& apk add --no-cache \
|
||||||
tzdata \
|
tzdata git bash curl wget vim htop ca-certificates rsync \
|
||||||
git \
|
# Python build dependencies
|
||||||
gcc \
|
build-base libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev ncurses-dev xz-dev \
|
||||||
musl-dev \
|
|
||||||
curl \
|
|
||||||
wget \
|
|
||||||
vim \
|
|
||||||
nodejs \
|
|
||||||
npm \
|
|
||||||
python3 \
|
|
||||||
py3-pip \
|
|
||||||
htop \
|
|
||||||
&& cp /usr/share/zoneinfo/${TZ} /etc/localtime \
|
&& cp /usr/share/zoneinfo/${TZ} /etc/localtime \
|
||||||
&& echo "${TZ}" > /etc/timezone \
|
&& echo "${TZ}" > /etc/timezone \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& 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
@@ -1,15 +1,28 @@
|
|||||||
FROM debian:bookworm-slim
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
|
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
|
||||||
ENV NODE_PATH="/app/envs/node/lib/node_modules"
|
|
||||||
|
|
||||||
# 安装必要系统工具 + Node + Python
|
# 安装必要系统工具
|
||||||
RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
|
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 \
|
&& sed -i 's@security.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
|
||||||
&& echo "${TZ}" > /etc/timezone \
|
&& echo "${TZ}" > /etc/timezone \
|
||||||
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
|
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& 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/*
|
&& 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
|
||||||
|
|||||||
@@ -1,15 +1,28 @@
|
|||||||
FROM debian:trixie-slim
|
FROM debian:trixie-slim
|
||||||
|
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
ENV PATH="/app/envs/node/bin:/app/envs/python/bin:$PATH"
|
ENV PATH="/app/envs/mise/shims:/app/envs/mise/bin:$PATH"
|
||||||
ENV NODE_PATH="/app/envs/node/lib/node_modules"
|
|
||||||
|
|
||||||
# 安装必要系统工具 + Node + Python
|
# 安装必要系统工具
|
||||||
RUN sed -i 's@deb.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
|
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 \
|
&& sed -i 's@security.debian.org@mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list.d/debian.sources \
|
||||||
&& echo "${TZ}" > /etc/timezone \
|
&& echo "${TZ}" > /etc/timezone \
|
||||||
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
|
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& 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/*
|
&& 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
@@ -3,8 +3,7 @@ set -e
|
|||||||
export LANG=C.UTF-8
|
export LANG=C.UTF-8
|
||||||
export LC_ALL=C.UTF-8
|
export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
PYTHON_VENV_DIR="/app/envs/python"
|
MISE_DIR="/app/envs/mise"
|
||||||
NODE_ENV_DIR="/app/envs/node"
|
|
||||||
|
|
||||||
echo "[entrypoint] Starting environment initialization..."
|
echo "[entrypoint] Starting environment initialization..."
|
||||||
|
|
||||||
@@ -15,66 +14,42 @@ mkdir -p \
|
|||||||
/app/data \
|
/app/data \
|
||||||
/app/data/scripts \
|
/app/data/scripts \
|
||||||
/app/configs \
|
/app/configs \
|
||||||
/app/envs \
|
/app/envs
|
||||||
"$NODE_ENV_DIR"
|
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# Python 虚拟环境(后台并行)
|
# Mise 环境初始化
|
||||||
# ============================
|
# ============================
|
||||||
(
|
if [ ! -d "$MISE_DIR" ] || [ -z "$(ls -A "$MISE_DIR")" ]; then
|
||||||
if [ ! -x "$PYTHON_VENV_DIR/bin/python" ]; then
|
echo "[entrypoint][Mise] Initializing mise environment from base..."
|
||||||
echo "[entrypoint][Python3] Creating Python virtual environment..."
|
mkdir -p "$MISE_DIR"
|
||||||
python3 -m venv "$PYTHON_VENV_DIR"
|
# 使用 rsync 同步,更好地处理 Mac 挂载目录的大小写冲突,并跳过已存在文件
|
||||||
"$PYTHON_VENV_DIR/bin/pip" config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
rsync -a --ignore-existing /opt/mise-base/ "$MISE_DIR/" || true
|
||||||
"$PYTHON_VENV_DIR/bin/pip" install --upgrade pip setuptools wheel
|
echo "[entrypoint][Mise] Mise environment initialized"
|
||||||
echo "[entrypoint][Python3] Python venv created"
|
else
|
||||||
else
|
echo "[entrypoint][Mise] Mise environment exists at $MISE_DIR"
|
||||||
echo "[entrypoint][Python3] Python venv exists"
|
fi
|
||||||
fi
|
|
||||||
) &
|
|
||||||
PYTHON_PID=$!
|
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# Node 环境(后台并行)
|
# 环境变量注入
|
||||||
# ============================
|
# ============================
|
||||||
(
|
export MISE_DATA_DIR="$MISE_DIR"
|
||||||
echo "[entrypoint][Nodejs] Initializing Node npm prefix..."
|
export MISE_CONFIG_DIR="$MISE_DIR"
|
||||||
# npm 全局安装目录 → /app/envs/node
|
export PATH="$MISE_DIR/shims:$MISE_DIR/bin:$PATH"
|
||||||
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=$!
|
|
||||||
|
|
||||||
# 等待两个后台任务完成
|
# 默认启用 Python 镜像源
|
||||||
echo "[entrypoint] Waiting for environment initialization..."
|
export PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
wait $PYTHON_PID
|
|
||||||
wait $NODE_PID
|
|
||||||
echo "[entrypoint] Environment initialization completed"
|
|
||||||
|
|
||||||
# Node 内存限制
|
# Node 内存限制
|
||||||
export NODE_OPTIONS="--max-old-space-size=256"
|
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
|
export PYTHONPATH=/app/data/scripts:$PYTHONPATH
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# 打印确认
|
# 打印确认
|
||||||
# ============================
|
# ============================
|
||||||
echo "[entrypoint][Python3] python: $(which python)"
|
echo "[entrypoint][Mise] mise version: $(mise --version)"
|
||||||
echo "[entrypoint][Python3] pip: $(which pip)"
|
echo "[entrypoint][Python3] python: $(python --version) at $(which python)"
|
||||||
echo "[entrypoint][Nodejs] node: $(which node)"
|
echo "[entrypoint][Nodejs] node: $(node --version) at $(which node)"
|
||||||
echo "[entrypoint][Nodejs] npm prefix: $(npm config get prefix)"
|
echo "[entrypoint][Nodejs] npm: $(npm --version) at $(which npm)"
|
||||||
echo "[entrypoint][Nodejs] npm root: $(npm root -g)"
|
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# 启动应用
|
# 启动应用
|
||||||
|
|||||||
Reference in New Issue
Block a user