feat: add mise base
This commit is contained in:
@@ -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
@@ -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 \
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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)"
|
||||
|
||||
# ============================
|
||||
# 启动应用
|
||||
|
||||
Reference in New Issue
Block a user