07111103
This commit is contained in:
parent
30702119bc
commit
d313f16b8a
|
@ -0,0 +1,8 @@
|
||||||
|
Dockerfile
|
||||||
|
.dockerignore
|
||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
dist
|
||||||
|
test
|
||||||
|
.md
|
||||||
|
volumes
|
116
Dockerfile
116
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"]
|
|
@ -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
|
Loading…
Reference in New Issue