Repository navigation
Expand file tree
/
Copy pathDockerfile.cn
More file actions
138 lines (108 loc) · 4.64 KB
/
Copy pathDockerfile.cn
File metadata and controls
138 lines (108 loc) · 4.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Build sqlbot
FROM ghcr.io/1panel-dev/maxkb-vector-model:v1.0.1 AS vector-model
FROM --platform=${BUILDPLATFORM} registry.cn-qingdao.aliyuncs.com/dataease/sqlbot-base:latest AS sqlbot-ui-builder
ENV SQLBOT_HOME=/opt/sqlbot
ENV APP_HOME=${SQLBOT_HOME}/app
ENV UI_HOME=${SQLBOT_HOME}/frontend
ENV DEBIAN_FRONTEND=noninteractive
ENV CI=true
ENV PNPM_FORCE=true
# 二进制包镜像
ENV npm_config_sharp_binary_host=https://registry.npmmirror.com/-/binary/sharp
ENV SASS_BINARY_SITE=https://registry.npmmirror.com/-/binary/node-sass
ENV ELECTRON_MIRROR=https://registry.npmmirror.com/-/binary/electron
RUN mkdir -p ${APP_HOME} ${UI_HOME}
COPY frontend /tmp/frontend
RUN npm config set registry https://registry.npmmirror.com \
&& npm install -g pnpm@10.14.0 \
&& pnpm config set registry https://registry.npmmirror.com \
&& cd /tmp/frontend \
&& pnpm install \
&& pnpm run build \
&& mv dist ${UI_HOME}/dist
FROM registry.cn-qingdao.aliyuncs.com/dataease/sqlbot-base:latest AS sqlbot-builder
# Set build environment variables
ENV PYTHONUNBUFFERED=1
ENV SQLBOT_HOME=/opt/sqlbot
ENV APP_HOME=${SQLBOT_HOME}/app
ENV UI_HOME=${SQLBOT_HOME}/frontend
ENV PYTHONPATH=${SQLBOT_HOME}/app
ENV PATH="${APP_HOME}/.venv/bin:$PATH"
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
ENV DEBIAN_FRONTEND=noninteractive
ENV UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/
ENV UV_EXTRA_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/
ENV UV_TIMEOUT=3000
ENV UV_HTTP_TIMEOUT=3000
ENV UV_RETRIES=5
# Create necessary directories
RUN mkdir -p ${APP_HOME} ${UI_HOME}
WORKDIR ${APP_HOME}
COPY --from=sqlbot-ui-builder ${UI_HOME} ${UI_HOME}
# Install dependencies
RUN test -f "./uv.lock" && \
--mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=backend/uv.lock,target=uv.lock \
--mount=type=bind,source=backend/pyproject.toml,target=pyproject.toml \
uv sync --frozen --no-install-project || echo "uv.lock file not found, skipping intermediate-layers"
COPY ./backend ${APP_HOME}
# Final sync to ensure all dependencies are installed
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --extra cpu
# Build g2-ssr
FROM registry.cn-qingdao.aliyuncs.com/dataease/sqlbot-base:latest AS ssr-builder
ENV npm_config_build_from_source=true
ENV npm_config_canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas
ENV npm_config_python_mirror=https://registry.npmmirror.com/-/binary/python
ENV npm_config_electron_mirror=https://registry.npmmirror.com/-/binary/electron
ENV npm_config_sass_binary_site=https://registry.npmmirror.com/-/binary/node-sass
# 设置 node-gyp 使用国内镜像
ENV NODEJS_ORG_MIRROR=https://registry.npmmirror.com/-/binary/node
ENV NODE_GYP_FORCE_PYTHON=python3
WORKDIR /app
# 配置 npm 镜像源和网络设置
RUN npm config set fund false \
&& npm config set audit false \
&& npm config set progress false \
&& npm config set registry https://registry.npmmirror.com
# 安装系统依赖
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential python3 pkg-config \
libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev \
libpixman-1-dev libfreetype6-dev \
&& rm -rf /var/lib/apt/lists/*
# 先只复制 package.json 进行依赖安装(利用 Docker 缓存)
COPY g2-ssr/package.json /app/
RUN npm install
# 再复制其他文件
COPY g2-ssr/app.js /app/
COPY g2-ssr/charts/* /app/charts/
# Runtime stage
FROM --platform=${BUILDPLATFORM} registry.cn-qingdao.aliyuncs.com/dataease/sqlbot-python-pg:latest
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# Set runtime environment variables
ENV PYTHONUNBUFFERED=1
ENV SQLBOT_HOME=/opt/sqlbot
ENV PYTHONPATH=${SQLBOT_HOME}/app
ENV PATH="${SQLBOT_HOME}/app/.venv/bin:$PATH"
ENV POSTGRES_DB=sqlbot
ENV POSTGRES_USER=root
ENV POSTGRES_PASSWORD=Password123@pg
ENV LD_LIBRARY_PATH="/opt/sqlbot/db_client/oracle_instant_client:${LD_LIBRARY_PATH}"
# Copy necessary files from builder
COPY start.sh /opt/sqlbot/app/start.sh
COPY g2-ssr/*.ttf /usr/share/fonts/truetype/liberation/
COPY --from=sqlbot-builder ${SQLBOT_HOME} ${SQLBOT_HOME}
COPY --from=ssr-builder /app /opt/sqlbot/g2-ssr
COPY --from=vector-model /opt/maxkb/app/model /opt/sqlbot/models
WORKDIR ${SQLBOT_HOME}/app
RUN mv ${SQLBOT_HOME}/app/data/models ${SQLBOT_HOME}/models
RUN mkdir -p /opt/sqlbot/images /opt/sqlbot/g2-ssr
EXPOSE 3000 8000 8001 5432
# Add health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8000 || exit 1
ENTRYPOINT ["sh", "start.sh"]