From d313f16b8a173760e55476651fed76f59a92316f Mon Sep 17 00:00:00 2001 From: longdayi <13477510+longdayilongdayi@user.noreply.gitee.com> Date: Thu, 11 Jul 2024 11:03:11 +0800 Subject: [PATCH] 07111103 --- .dockerignore | 8 +++ Dockerfile | 116 ++++++++++++++++++++++++++++++++++++++ apps/server/entrypoint.sh | 24 ++++++++ 3 files changed, 148 insertions(+) create mode 100755 apps/server/entrypoint.sh diff --git a/.dockerignore b/.dockerignore index e69de29..4378c27 100644 --- a/.dockerignore +++ b/.dockerignore @@ -0,0 +1,8 @@ +Dockerfile +.dockerignore +node_modules +npm-debug.log +dist +test +.md +volumes diff --git a/Dockerfile b/Dockerfile index e69de29..ac1ab22 100644 --- a/Dockerfile +++ b/Dockerfile @@ -0,0 +1,116 @@ +# 基础镜像 +FROM node:20-alpine as base + +# 设置 npm 镜像源 +RUN yarn config set registry https://registry.npmmirror.com + +# 全局安装 pnpm 并设置其镜像源 +RUN yarn global add pnpm && pnpm config set registry https://registry.npmmirror.com + +# 设置工作目录 +WORKDIR /app + +# 复制 pnpm workspace 配置文件 +COPY pnpm-workspace.yaml ./ + +# 首先复制 package.json, package-lock.json 和 pnpm-lock.yaml 文件 +COPY package*.json pnpm-lock.yaml* ./ + +COPY tsconfig.json . +# 利用 Docker 缓存机制,如果依赖没有改变则不会重新执行 pnpm install + + +FROM base As server-build +WORKDIR /app +COPY packages/common /app/packages/common +COPY apps/back-worker /app/apps/back-worker +RUN pnpm install --filter back-worker +RUN pnpm install --filter common +RUN pnpm --filter common build +RUN pnpm run build:server + +FROM base As server-prod-dep +WORKDIR /app +COPY packages/common /app/packages/common +COPY apps/back-worker /app/apps/back-worker +RUN pnpm install --filter back-worker --prod +RUN pnpm install --filter common --prod + + +FROM server-prod-dep as server +WORKDIR /app +ENV NODE_ENV production +COPY --from=server-build /app/packages/common/dist ./packages/common/dist +COPY --from=server-build /app/apps/back-worker/dist ./apps/back-worker/dist +COPY apps/back-worker/entrypoint.sh ./apps/back-worker/entrypoint.sh + +RUN chmod +x ./apps/back-worker/entrypoint.sh +RUN apk add postgresql-client + +EXPOSE 3010 + +ENTRYPOINT [ "/app/apps/back-worker/entrypoint.sh" ] + + + +FROM base AS front-app-build +# 复制其余文件到工作目录 +COPY . . +RUN pnpm install +RUN pnpm run build:web +# 第二阶段,使用 nginx 提供服务 +FROM nginx:stable-alpine as front-app +# 设置工作目录 +WORKDIR /usr/share/nginx/html +# 设置环境变量 +ENV NODE_ENV production +# 将构建的文件从上一阶段复制到当前镜像中 +COPY --from=front-app-build /app/apps/front-app/build . +# 删除默认的nginx配置文件并添加自定义配置 +RUN rm /etc/nginx/conf.d/default.conf +COPY apps/front-app/nginx.conf /etc/nginx/conf.d +# 添加 entrypoint 脚本,并确保其可执行 +COPY apps/front-app/entrypoint.sh /usr/bin/ +RUN chmod +x /usr/bin/entrypoint.sh +# 安装 envsubst 以支持环境变量替换 +RUN apk add envsubst +# 暴露 80 端口 +EXPOSE 80 + +CMD ["/usr/bin/entrypoint.sh"] + + +FROM python:3.10-slim as aiservice + +# 设置工作目录 +WORKDIR /app + +# 将 pip.conf 文件复制到镜像中 +# COPY apps/ai-service/config/pip.conf /etc/pip.conf + +# 将 requirements.txt 复制到工作目录 +COPY apps/ai-service/requirements.txt . +# 设置 pip 使用国内源,并安装依赖 +RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && pip install --no-cache-dir -r requirements.txt +# 暴露端口 +EXPOSE 8000 + +# 使用 entrypoint.sh 作为入口点 +ENTRYPOINT ["/app/entrypoint.sh"] + +FROM base As prisma-build +WORKDIR /app +COPY packages/common /app/packages/common +RUN pnpm install --filter common +RUN pnpm --filter common build + +FROM base As prisma-prod-dep +WORKDIR /app +COPY packages/common /app/packages/common +RUN pnpm install --filter common --prod + +FROM prisma-prod-dep as prisma-client +WORKDIR /app +ENV NODE_ENV production +COPY --from=prisma-build /app/packages/common/dist ./packages/common/dist +CMD ["pnpm", "prisma", "migrate", "deploy"] \ No newline at end of file diff --git a/apps/server/entrypoint.sh b/apps/server/entrypoint.sh new file mode 100755 index 0000000..b9ba71b --- /dev/null +++ b/apps/server/entrypoint.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +# 从 DATABASE_URL 环境变量中提取主机名、端口和用户名 +DB_HOST=$(echo $DATABASE_URL | cut -d '@' -f 2 | cut -d ':' -f 1) +DB_PORT=$(echo $DATABASE_URL | cut -d ':' -f 4 | cut -d '/' -f 1) +DB_USER=$(echo $DATABASE_URL | cut -d '/' -f 3 | cut -d ':' -f 1) + +# 检查数据库是否就绪 +until pg_isready -h $DB_HOST -p $DB_PORT -U $DB_USER; do + echo "Database is unavailable - sleeping" + sleep 1 +done + +echo "Database is up" + +# 检查标记文件是否存在,如果不存在,则执行 prisma deploy 并创建标记文件 +# if [ ! -f "/app/prisma-deployed" ]; then +# pnpm prisma generate +# pnpm prisma migrate deploy +# touch /app/prisma-deployed +# fi + +# 启动主应用 +exec node apps/back-worker/dist/main