diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..dfa74e7 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,42 @@ +# 第一阶段:构建 +FROM docker.1ms.run/python:3.10-slim as builder + +WORKDIR /backend + +# 安装系统依赖(合并为一个RUN减少层数) +RUN apt-get update && apt-get install -y \ + bash git curl gnupg ca-certificates \ + libjpeg-dev libmariadb-dev-compat default-libmysqlclient-dev \ + build-essential libffi-dev libssl-dev zlib1g-dev libbz2-dev \ + libpcre2-dev libncurses5-dev libreadline-dev tk-dev libpq-dev unixodbc-dev \ + && rm -rf /var/lib/apt/lists/* \ + && curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg \ + && echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-focal-prod focal main" > /etc/apt/sources.list.d/mssql-release.list \ + && apt-get update \ + && ACCEPT_EULA=Y apt-get install -y msodbcsql17 \ + && rm -rf /var/lib/apt/lists/* + +# 先复制依赖文件,利用缓存 +COPY ./backend/requirements.txt . + +# 安装 Python 依赖(带缓存加速) +RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt + +# 复制剩余代码 +COPY ./backend/ . + +# 配置 +RUN ls ./conf/ \ + && awk 'BEGIN { cmd="cp -i ./conf/env.example.py ./conf/env.py "; print "n" |cmd; }' \ + && sed -i "s|DATABASE_HOST = '127.0.0.1'|DATABASE_HOST = '177.10.0.1'|g" ./conf/env.py \ + && sed -i "s|REDIS_HOST = '127.0.0.1'|REDIS_HOST = '177.10.0.1'|g" ./conf/env.py + +# 第二阶段:运行时镜像 +FROM docker.1ms.run/python:3.10-slim + +COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages +COPY --from=builder /usr/local/bin /usr/local/bin +COPY --from=builder /backend /backend + +WORKDIR /backend +CMD ["sh","docker_start.sh"] diff --git a/backend/Jenkinsfile b/backend/Jenkinsfile index 561ffaa..1ebab16 100644 --- a/backend/Jenkinsfile +++ b/backend/Jenkinsfile @@ -21,7 +21,7 @@ pipeline { def imageTag = "${HARBOR_URL}/${HARBOR_PROJECT}/${IMAGE_NAME}:${BUILD_NUMBER}" env.IMAGE_TAG = imageTag sh """ - docker build -f docker_env/django/Dockerfile \ + docker build -f backend/Dockerfile \ -t ${imageTag} . """ } diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..788847a --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,22 @@ +# 第一阶段:构建 +FROM node:20-alpine as builder + +WORKDIR /web + +# 先复制 package.json 和 yarn.lock +COPY package.json yarn.lock* ./ + +# 安装依赖(利用缓存) +RUN yarn install --registry=https://registry.npmmirror.com + +# 复制源代码 +COPY . . + +# 构建 +RUN yarn build + +# 第二阶段:Nginx 运行时 +FROM docker.1ms.run/nginx:alpine + +# nginx.conf 由 docker-compose volumes 映射,无需复制 +COPY --from=builder /web/dist /usr/share/nginx/html diff --git a/web/Jenkinsfile b/web/Jenkinsfile index a0e212e..565b769 100644 --- a/web/Jenkinsfile +++ b/web/Jenkinsfile @@ -37,7 +37,7 @@ pipeline { def imageTag = "${HARBOR_URL}/${HARBOR_PROJECT}/${IMAGE_NAME}:${BUILD_NUMBER}" env.IMAGE_TAG = imageTag sh """ - docker build -f docker_env/web/Dockerfile \ + docker build -f web/Dockerfile \ -t ${imageTag} . """ }