Compare commits

...

12 Commits

Author SHA1 Message Date
269dc501d0 针对 TEST 流水线,不检查文件变更,默认更新所有 2026-07-10 09:39:03 +08:00
117d4caafd fix bug 2026-07-09 20:05:20 +08:00
fd6511d061 bak 2026-07-09 19:53:22 +08:00
343ee78a31 bak 2026-07-09 19:28:44 +08:00
d3edc6d78a x 2026-07-08 18:22:50 +08:00
1700ab99b2 清理镜像 2026-07-08 16:39:16 +08:00
074aaac982 部署备份 2026-07-08 11:08:45 +08:00
2ef6762785 ok 2026-07-06 17:06:48 +08:00
9293fe4e59 基本完美 2026-07-03 14:10:48 +08:00
d4f9607034 bak 2026-07-03 11:06:25 +08:00
89fc6d65f9 顺利 2026-07-02 12:00:07 +08:00
53d6cc5620 ok 2026-07-01 17:12:52 +08:00
5 changed files with 396 additions and 126 deletions

View File

@@ -7,18 +7,16 @@ clone:
steps:
- name: build-and-run-apps
image: docker:dind
image: docker:cli
pull: if-not-exists
volumes:
- name: docker_sock
path: /var/run/docker.sock
- name: docker_lib
path: /var/lib/docker
- name: configs_dir
path: /bluetti/frontend_project/bluetti-shop-configs
environment:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
DOCKER_BUILDKIT: "1"
COMPOSE_DOCKER_CLI_BUILD: "1"
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
@@ -26,6 +24,9 @@ steps:
PROJECT_NAME:
from_secret: PROJECT_NAME
commands:
- docker version
- docker info
- docker buildx version || true
- |
if [ "${DRONE_BUILD_EVENT}" = "pull_request" ] || [ "${DRONE_BUILD_EVENT}" = "merge_request" ]; then
# 如果是 MR直接对比目标分支假设是 dev
@@ -51,6 +52,24 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
compose_services=$(docker compose -p "$PROJECT_NAME" config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0
@@ -63,13 +82,15 @@ steps:
export TRAEFIK_PREFIX="shoptest"
for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
echo ">>>>>> 开始增量构建部署服务: $svc <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-development.env apps/$svc/.env.development
docker compose -p "$PROJECT_NAME" up -d "$svc" --build
fi
docker compose -p "$PROJECT_NAME" build $svc
done
echo ">>>>>> 正在启动所有服务... <<<<<<"
docker compose -p "$PROJECT_NAME" up -d $build_list
docker image prune -f
volumes:
- name: pnpm_store
host:
@@ -106,22 +127,17 @@ type: docker
name: TEST-frontend-monorepo-ci
clone:
depth: 50
depth: 22
steps:
- name: build-and-run-apps
image: docker:dind
image: docker:cli
volumes:
- name: docker_sock
path: /var/run/docker.sock # 允许在容器内调用宿主机的 Docker
- name: configs_dir
path: /bluetti/frontend_project/bluetti-shop-configs
- name: docker_lib
path: /var/lib/docker
environment:
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
DOCKER_BUILDKIT: "1"
COMPOSE_DOCKER_CLI_BUILD: "1"
PROJECT_NAME:
@@ -129,43 +145,20 @@ steps:
# SHOP_AU: shop-test-au.bluettipower.com
commands:
- |
# 1. 路径变动检测逻辑
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
fi
# 2. 判断构建范围
echo "本次变更文件:"
echo "$changed_files"
full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l)
PROJECT_NAME_TEST="${PROJECT_NAME}test"
COMPOSE_FILE="docker-compose-test.yml"
if [ "$full_build_changes" -gt 0 ]; then
echo "检测到关键共享变动,准备全量构建..."
build_list=$(docker compose -f "$COMPOSE_FILE" config --services)
else
echo "执行定向增量构建..."
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
echo "准备构建并启动 docker-compose 中定义的所有服务: $build_list"
if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0
fi
# 3. test 环境
export BUILD_ENV="test"
for svc in $build_list; do
if docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" config --services | grep -q "^$svc$"; then
echo ">>>>>> 构建服务: $svc $PROJECT_NAME_TEST <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-test.env apps/$svc/.env.test
# docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" build "$svc"
docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d "$svc" --build
fi
docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" build $svc
done
echo ">>>>>> 正在启动所有服务... <<<<<<"
docker compose -f "$COMPOSE_FILE" -p "$PROJECT_NAME_TEST" up -d $build_list
docker image prune -f
volumes:
- name: pnpm_store
@@ -196,6 +189,7 @@ trigger:
- "pnpm-workspace.yaml"
- "turbo.json"
- "docker-compose*.yml"
- ".dockerignore"
---
@@ -204,14 +198,12 @@ type: docker
name: RC-frontend-monorepo-ci
clone:
depth: 50
depth: 22
steps:
- name: build-and-push-apps
image: docker:dind
image: docker:cli
volumes:
- name: docker_lib
path: /var/lib/docker
- name: docker_sock
path: /var/run/docker.sock
- name: configs_dir
@@ -242,6 +234,24 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
compose_services=$(docker compose -f docker-compose.yml config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0
@@ -249,10 +259,12 @@ steps:
> .deploy_list
docker login 127.0.0.1:5000 -u bluetti -p cjJXBbkHlvVWH2B
echo ">>>>>> 并行构建服务: $build_list <<<<<<"
docker compose -p "$PROJECT_NAME" build $build_list
for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
echo ">>>>>> 构建服务: $svc <<<<<<"
docker compose -p "$PROJECT_NAME" build "$svc"
harbor_tag="127.0.0.1:5000/bluetti-frontend/$svc:${DRONE_COMMIT:0:10}"
docker tag "$svc:latest" "$harbor_tag"
echo ">>>>>> 推送服务: $svc <<<<<<"
@@ -280,10 +292,11 @@ steps:
- git pull origin release
- docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B
- |
diff_failed=0
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER}) || diff_failed=1
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER}) || diff_failed=1
fi
export TARGET_SITES="shopify-australia shopify-x"
@@ -306,6 +319,10 @@ steps:
export BUILD_ENV="production"
export COMMIT_SHA=${DRONE_COMMIT:0:10}
echo "本次变更文件:"
if [ "$diff_failed" -eq 1 ]; then
echo "⚠️ 变更范围计算失败,回退为全量部署。"
changed_files="packages/__force_full_deploy__"
fi
echo "$changed_files"
full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l)
@@ -316,19 +333,40 @@ steps:
deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
compose_services=$(docker compose -f docker-compose-release.yml config --services)
original_deploy_list="$deploy_list"
deploy_list=""
skipped_list=""
for svc in $original_deploy_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
deploy_list="$deploy_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
deploy_list=$(echo "$deploy_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$deploy_list" ]; then
echo "未命中可部署服务(仅文档或非关键文件改动),跳过远程部署。"
exit 0
fi
for svc in $deploy_list; do
if docker compose -f docker-compose-release.yml config --services | grep -q "^$svc$"; then
echo ">>>>>> 远程更新服务: $svc <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-production.env apps/$svc/.env.production
docker compose -f docker-compose-release.yml pull "$svc"
done
echo ">>>>>> 远程并行拉取镜像: $deploy_list <<<<<<"
docker compose -f docker-compose-release.yml pull $deploy_list
for svc in $deploy_list; do
echo ">>>>>> 远程更新服务: $svc <<<<<<"
docker compose -f docker-compose-release.yml up -d --force-recreate "$svc"
echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
fi
done
volumes:
- name: pnpm_store
@@ -365,14 +403,13 @@ type: docker
name: PROD-frontend-monorepo-ci
clone:
depth: 50
depth: 22
steps:
- name: build-and-push-apps
image: docker:dind
image: docker:cli
pull: if-not-exists
volumes:
- name: docker_lib
path: /var/lib/docker
- name: docker_sock
path: /var/run/docker.sock
- name: configs_dir
@@ -383,6 +420,9 @@ steps:
DRONE_COMMIT: ${DRONE_COMMIT}
DRONE_COMMIT_BEFORE: ${DRONE_COMMIT_BEFORE}
DRONE_COMMIT_AFTER: ${DRONE_COMMIT_AFTER}
DRONE_BUILD_EVENT: ${DRONE_BUILD_EVENT} # 引入事件类型判断
PROJECT_NAME:
from_secret: PROJECT_NAME
commands:
- |
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
@@ -403,6 +443,24 @@ steps:
build_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
compose_services=$(docker compose -f docker-compose.yml config --services)
original_build_list="$build_list"
build_list=""
skipped_list=""
for svc in $original_build_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
build_list="$build_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
build_list=$(echo "$build_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$build_list" ]; then
echo "未命中可构建服务(仅文档或非关键文件改动),跳过构建。"
exit 0
@@ -410,10 +468,12 @@ steps:
> .deploy_list
docker login 127.0.0.1:5000 -u bluetti -p cjJXBbkHlvVWH2B
echo ">>>>>> 并行构建服务: $build_list <<<<<<"
docker compose -p "$PROJECT_NAME" build $build_list
for svc in $build_list; do
if docker compose -p "$PROJECT_NAME" config --services | grep -q "^$svc$"; then
echo ">>>>>> 构建服务: $svc <<<<<<"
docker compose -p "$PROJECT_NAME" build "$svc"
harbor_tag="127.0.0.1:5000/bluetti-frontend/$svc:${DRONE_COMMIT:0:10}"
docker tag "$svc:latest" "$harbor_tag"
echo ">>>>>> 推送服务: $svc <<<<<<"
@@ -439,13 +499,14 @@ steps:
script:
- echo ">>>>>> 开始连接远程服务器 <<<<<<"
- cd /bluetti/frontend_project/bluetti-shop
- git pull origin release
- git pull origin main
- docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B
- |
diff_failed=0
if [ "${DRONE_COMMIT_BEFORE}" = "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER})
changed_files=$(git diff-tree --no-commit-id --name-only -r ${DRONE_COMMIT_AFTER}) || diff_failed=1
else
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER})
changed_files=$(git diff --name-only ${DRONE_COMMIT_BEFORE} ${DRONE_COMMIT_AFTER}) || diff_failed=1
fi
export TARGET_SITES="shopify-australia shopify-x"
@@ -455,6 +516,10 @@ steps:
export BUILD_ENV="production"
export COMMIT_SHA=${DRONE_COMMIT:0:10}
echo "本次变更文件:"
if [ "$diff_failed" -eq 1 ]; then
echo "⚠️ 变更范围计算失败,回退为全量部署。"
changed_files="packages/__force_full_deploy__"
fi
echo "$changed_files"
full_build_changes=$(echo "$changed_files" | grep -E "^(package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml|turbo\.json|docker-compose.*\.ya?ml|packages/|patches/)" | wc -l)
@@ -465,19 +530,38 @@ steps:
deploy_list=$(echo "$changed_files" | grep "^apps/" | cut -d/ -f2 | sort -u)
fi
compose_services=$(docker compose -f docker-compose-prod.yml config --services)
original_deploy_list="$deploy_list"
deploy_list=""
skipped_list=""
for svc in $original_deploy_list; do
if echo "$compose_services" | grep -q "^$svc$"; then
deploy_list="$deploy_list $svc"
else
skipped_list="$skipped_list $svc"
fi
done
deploy_list=$(echo "$deploy_list" | xargs)
skipped_list=$(echo "$skipped_list" | xargs)
if [ -n "$skipped_list" ]; then
echo "以下 apps 变更未在 docker-compose 中定义,已跳过: $skipped_list"
fi
if [ -z "$deploy_list" ]; then
echo "未命中可部署服务(仅文档或非关键文件改动),跳过远程部署。"
exit 0
fi
for svc in $deploy_list; do
if docker compose -f docker-compose-prod.yml config --services | grep -q "^$svc$"; then
echo ">>>>>> 远程更新服务: $svc <<<<<<"
cp /bluetti/frontend_project/bluetti-shop-configs/"$svc"-production.env apps/$svc/.env.production
docker compose -f docker-compose-prod.yml pull "$svc"
done
echo ">>>>>> 远程并行拉取镜像: $deploy_list <<<<<<"
docker compose -f docker-compose-prod.yml pull $deploy_list
for svc in $deploy_list; do
echo ">>>>>> 远程更新服务: $svc <<<<<<"
docker compose -f docker-compose-prod.yml up -d --force-recreate "$svc"
echo ">>>>>> 部署完成: $svc 版本号: $COMMIT_SHA, 环境: $BUILD_ENV <<<<<<"
fi
done
volumes:
@@ -522,6 +606,17 @@ depends_on:
- RC-frontend-monorepo-ci
- PROD-frontend-monorepo-ci
trigger:
event:
- push
- promote
- rollback
branch:
- dev
- test
- release
- main
steps:
- name: send-dingtalk-notification
image: lddsb/drone-dingtalk-message
@@ -543,15 +638,6 @@ steps:
status:
- success
- failure
event:
- push
- promote
- rollback
branch:
- dev
- test
- release
- main
volumes:
- name: dingtalk-tpl

69
bluetti-tools/Dockerfile Normal file
View File

@@ -0,0 +1,69 @@
# Monorepo: pnpm + Turbo仅构建 apps/web
FROM node:20-bookworm-slim AS builder
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends openssl ca-certificates
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
COPY apps/web/package.json ./apps/web/
COPY packages/ui/package.json ./packages/ui/
COPY packages/shopify-admin/package.json ./packages/shopify-admin/
RUN --mount=type=cache,id=pnpm-store,target=/pnpm/store \
pnpm config set store-dir /pnpm/store \
&& pnpm install --frozen-lockfile
COPY apps/web ./apps/web
COPY packages ./packages
ENV TURBO_TELEMETRY_DISABLED=1
RUN --mount=type=cache,id=turbo-cache,target=/app/node_modules/.cache/turbo \
pnpm turbo build --filter=web
# 产出仅含 web 生产依赖的独立部署目录(比 runner 内 monorepo install 更小)
RUN pnpm --filter=web deploy --prod /app/deploy
# prisma CLI 为 devDep用 web 包内已安装的 prisma 在 deploy 目录 generate
RUN --mount=type=cache,id=prisma-cache,target=/root/.cache/prisma \
pnpm --filter=web exec prisma generate --schema=/app/deploy/prisma/schema.prisma
# 运行时不需要源码与构建配置
RUN rm -rf /app/deploy/app /app/deploy/.turbo /app/deploy/.react-router /app/deploy/components /app/deploy/hooks /app/deploy/lib \
/app/deploy/vite.config.ts /app/deploy/tsconfig.json /app/deploy/components.json /app/deploy/react-router.config.ts \
/app/deploy/Dockerfile /app/deploy/.dockerignore
# 运行镜像deploy 产物 + 全局 prisma CLImigrate deploy
FROM node:20-bookworm-slim AS runner
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends openssl ca-certificates
RUN --mount=type=cache,id=npm-cache,target=/root/.npm \
npm install -g prisma@6.19.0
WORKDIR /app
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=3000
COPY --from=builder /app/deploy ./
COPY docker/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \
CMD node -e "fetch('http://127.0.0.1:' + (process.env.PORT || 3000)).then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -0,0 +1,32 @@
# 博客图片资源 WebReact Router + Prisma SQLite
#
# 使用:
# 1. 复制 apps/web/.env.example 为 apps/web/.env填写 SHOPIFY_*、SESSION_SECRET 等
# 2. docker compose up -d --build
# 3. 浏览器访问 http://localhost:30001 ,无用户时打开 /setup
# 说明compose 会注入 DATABASE_URL=file:/data/prod.db覆盖 .env 里本地 SQLite 路径)
#
# 数据库文件持久化在卷 prisma-data 中;更换主机或备份请挂载/拷贝该卷。
services:
web:
image: bluetti-tools-web:latest
ports:
- "30001:3000"
env_file:
- apps/web/.env
environment:
# 覆盖 .env 中的本地路径,使用容器内持久化卷
DATABASE_URL: file:/data/prod.db
HOST: 0.0.0.0
PORT: "3000"
# 生产必须设置(与 apps/web/.env 中一致);未设置会导致登录时报错
# SESSION_SECRET: 请用 openssl rand -hex 32 生成后写入 apps/web/.env 或此处
# 公网访问时请改为实际 HTTPS 地址OAuth 回调、邮件链接)
# SHOPIFY_APP_URL: https://your-domain.com
volumes:
- /bluetti/frontend_project/bluetti-tools-configs/data:/data
restart: unless-stopped
# volumes:
# prisma-data:

35
bluetti-tools/drone.yaml Normal file
View File

@@ -0,0 +1,35 @@
kind: pipeline
type: docker
name: deploy-bluetti-web
steps:
# 步骤 1: 挂载宿主机 Docker 和配置目录,直接构建并启动
- name: build-and-deploy
image: docker:24.0.7 # 或者使用 docker:dind
volumes:
- name: docker_sock
path: /var/run/docker.sock # 联动宿主机 Docker
- name: configs_dir
path: /bluetti/frontend_project/bluetti-tools-configs # 映射宿主机配置目录
commands:
- |
export DOCKER_BUILDKIT=1
cp /bluetti/frontend_project/bluetti-tools-configs/tools.production.env apps/web/.env
docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t bluetti-tools-web:latest -f Dockerfile .
docker compose down --remove-orphans
docker compose up -d
echo ">>>>>> 部署成功! <<<<<<"
volumes:
- name: docker_sock
host:
path: /var/run/docker.sock
- name: configs_dir
host:
path: /bluetti/frontend_project/bluetti-tools-configs # 宿主机存放所有 .env 的绝对路径
trigger:
branch:
- main
event:
- push

View File

@@ -1,63 +1,111 @@
services:
shopify-america:
build:
context: .
dockerfile: apps/shopify-america/Dockerfile
image: shopify-america:test
container_name: shopify-america-test
restart: always
ports:
- '3032:3002'
image: harbor.bluettipower.com/bluetti-frontend/shopify-america:${COMMIT_SHA}
container_name: shopify-america
restart: unless-stopped
user: "0:0"
labels:
- traefik.http.routers.shoptestqaus.rule=Host(`shop-test-us.bluettipower.com`)
- traefik.http.routers.shoptestqaus.middlewares=shoptestqaus-cors
- traefik.http.middlewares.shoptestqaus-cors.headers.accesscontrolallowmethods=*
- traefik.http.middlewares.shoptestqaus-cors.headers.accesscontrolallowheaders=*
- traefik.http.middlewares.shoptestqaus-cors.headers.accesscontrolalloworiginlist=*
- traefik.http.middlewares.shoptestqaus-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.shoptestqaus-redirect.redirectscheme.permanent=true
- traefik.http.services.shoptestqaus.loadbalancer.server.port=3002
- traefik.http.routers.shoptestqaus.tls=true
- traefik.http.routers.shoptestqaus.tls.certresolver=myresolver
- traefik.http.routers.shopus-http.rule=Host(`shop-rc-us.bluettipower.com`)
- traefik.http.routers.shopus-http.entrypoints=http
- traefik.enable=true
- traefik.http.routers.shopus-https.rule=Host(`shop-rc-us.bluettipower.com`)
- traefik.http.routers.shopus-https.entrypoints=https
- traefik.http.routers.shopus-https.tls=true
- traefik.http.routers.shopus-https.tls.certresolver=myresolver
- traefik.http.routers.shopus-https.middlewares=shopus-cors
- traefik.http.services.shopus.loadbalancer.server.port=3002
- traefik.http.middlewares.shopus-cors.headers.accesscontrolallowmethods=*
- traefik.http.middlewares.shopus-cors.headers.accesscontrolallowheaders=*
- traefik.http.middlewares.shopus-cors.headers.accesscontrolalloworiginlist=*
- traefik.http.middlewares.shopus-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.shopus-redirect.redirectscheme.permanent=true
networks:
- traefik
env_file:
- apps/shopify-america/.env.test
- /bluetti/frontend_project/bluetti-shop-configs/shopify-america-production.env
logging:
driver: json-file
options:
max-size: '10m'
max-file: '3'
command: sh -c "npm start 2>&1 | tee -a /app/logs/app.log"
volumes:
- /var/log/shopify-america:/app/logs:rw
shopify-australia:
build:
context: .
dockerfile: apps/shopify-australia/Dockerfile
image: shopify-australia:test
container_name: shopify-australia-test
restart: always
ports:
- '3031:3001'
image: harbor.bluettipower.com/bluetti-frontend/shopify-australia:${COMMIT_SHA}
container_name: shopify-australia
restart: unless-stopped
user: "0:0"
labels:
- traefik.http.routers.shoptestqaau.rule=Host(`shop-test-au.bluettipower.com`)
- traefik.http.routers.shoptestqaau.middlewares=shoptestqaau-cors
- traefik.http.middlewares.shoptestqaau-cors.headers.accesscontrolallowmethods=*
- traefik.http.middlewares.shoptestqaau-cors.headers.accesscontrolallowheaders=*
- traefik.http.middlewares.shoptestqaau-cors.headers.accesscontrolalloworiginlist=*
- traefik.http.middlewares.shoptestqaau-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.shoptestqaau-redirect.redirectscheme.permanent=true
- traefik.http.services.shoptestqaau.loadbalancer.server.port=3001
- traefik.http.routers.shoptestqaau.tls=true
- traefik.http.routers.shoptestqaau.tls.certresolver=myresolver
# 移除 http 跳转相关的 middleware即不要为 http 路由配置 redirectscheme
- traefik.http.routers.shopau-http.rule=Host(`shop-rc-au.bluettipower.com`)
- traefik.http.routers.shopau-http.entrypoints=http
- traefik.enable=true
- traefik.http.routers.shopau-https.rule=Host(`shop-rc-au.bluettipower.com`)
- traefik.http.routers.shopau-https.entrypoints=https
- traefik.http.routers.shopau-https.tls=true
- traefik.http.routers.shopau-https.tls.certresolver=myresolver
- traefik.http.routers.shopau-https.middlewares=shopau-cors
- traefik.http.services.shopau.loadbalancer.server.port=3001
- traefik.http.middlewares.shopau-cors.headers.accesscontrolallowmethods=*
- traefik.http.middlewares.shopau-cors.headers.accesscontrolallowheaders=*
- traefik.http.middlewares.shopau-cors.headers.accesscontrolalloworiginlist=*
- traefik.http.middlewares.shopau-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.shopau-redirect.redirectscheme.permanent=true
networks:
- traefik
env_file:
- apps/shopify-australia/.env.test
- /bluetti/frontend_project/bluetti-shop-configs/shopify-australia-production.env
logging:
driver: json-file
options:
max-size: '10m'
max-file: '3'
command: sh -c "npm start 2>&1 | tee -a /app/logs/app.log"
volumes:
- /var/log/shopify-australia:/app/logs:rw
shopify-europe:
image: harbor.bluettipower.com/bluetti-frontend/shopify-europe:${COMMIT_SHA}
container_name: shopify-europe
restart: unless-stopped
user: "0:0"
labels:
# 移除 http 跳转相关的 middleware即不要为 http 路由配置 redirectscheme
- traefik.http.routers.shopeu-http.rule=Host(`shop-rc-eu.bluettipower.com`)
- traefik.http.routers.shopeu-http.entrypoints=http
- traefik.enable=true
- traefik.http.routers.shopeu-https.rule=Host(`shop-rc-eu.bluettipower.com`)
- traefik.http.routers.shopeu-https.entrypoints=https
- traefik.http.routers.shopeu-https.tls=true
- traefik.http.routers.shopeu-https.tls.certresolver=myresolver
- traefik.http.routers.shopeu-https.middlewares=shopeu-cors
- traefik.http.services.shopeu.loadbalancer.server.port=3005
- traefik.http.middlewares.shopeu-cors.headers.accesscontrolallowmethods=*
- traefik.http.middlewares.shopeu-cors.headers.accesscontrolallowheaders=*
- traefik.http.middlewares.shopeu-cors.headers.accesscontrolalloworiginlist=*
- traefik.http.middlewares.shopeu-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.shopeu-redirect.redirectscheme.permanent=true
networks:
- traefik
env_file:
- /bluetti/frontend_project/bluetti-shop-configs/shopify-europe-production.env
logging:
driver: json-file
options:
max-size: '10m'
max-file: '3'
command: sh -c "npm start 2>&1 | tee -a /app/logs/app.log"
volumes:
- /var/log/shopify-europe:/app/logs:rw
networks:
traefik: