feat(deploy): 完整 Docker 部署方案 — 寄卖商城 + 积分商城
新增两步独立 Docker 部署方案(czleilei240 环境): 步骤一 寄卖商城(integral-resell) - step1-integral/docker-compose.yml:redis(Alpine自建) + houtai(webman PHP8) + h5(Nginx) - houtai.Dockerfile:PHP 8.0 + 阿里云镜像源 + webman.bin entrypoint - h5.Dockerfile:Nginx + configs.js 环境变量动态重写 - redis.Dockerfile:Alpine + apk 构建,绕过 DockerHub 镜像源问题 - 宿主机 bind-mount:/www/wwwroot/leileiadmin.czchunfang.com(FTP可直接更新程序) 步骤二 积分商城(single-shop-22) - step2-single-shop/docker-compose.yml:redis + admin-api + front-api + admin-web + h5 - Java Dockerfiles:OpenJDK 17 + --add-opens Spring Boot 2.2.6 兼容 公共配置 - nginx/:四个域名宝塔 Nginx 反代配置(HTTP→HTTPS 301、SSL 终止) - scripts/:sync-to-server.sh / deploy-step1.sh / remote-up.sh - DOCKER_DEPLOY.md:完整部署文档 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
88
deploy/docker/single-shop/admin-web.Dockerfile
Normal file
88
deploy/docker/single-shop/admin-web.Dockerfile
Normal file
@@ -0,0 +1,88 @@
|
||||
# =============================================================
|
||||
# 寄卖商城 管理后台前端 (Vue 2 / Vue CLI 4)
|
||||
# build context = single-shop-22/backend-adminend
|
||||
# 多阶段: Node 构建 -> Nginx 运行;可通过 ARG VUE_APP_BASE_API 注入 API 域名
|
||||
#
|
||||
# 想直接使用源码里已有的 dist/: 用 --target=fast 构建
|
||||
# =============================================================
|
||||
# syntax=docker/dockerfile:1.6
|
||||
|
||||
# ---------- 构建阶段(默认) ----------
|
||||
FROM node:16-alpine AS builder
|
||||
|
||||
# 留空(默认)→ 浏览器走与 nginx 同域的 /api/;填具体 URL 则直连后端
|
||||
ARG VUE_APP_BASE_API=""
|
||||
ENV NODE_OPTIONS=--openssl-legacy-provider \
|
||||
NPM_CONFIG_REGISTRY=https://registry.npmmirror.com
|
||||
|
||||
WORKDIR /app
|
||||
COPY package.json yarn.lock* package-lock.json* ./
|
||||
RUN (yarn install --frozen-lockfile 2>/dev/null) || npm ci || npm install --legacy-peer-deps
|
||||
|
||||
COPY . .
|
||||
# 覆盖 .env.production,使用 build arg
|
||||
RUN printf "ENV='production'\nVUE_APP_BASE_API=%s\n" "$VUE_APP_BASE_API" > .env.production \
|
||||
&& npm run build:prod
|
||||
|
||||
# ---------- 运行阶段 ----------
|
||||
FROM nginx:1.25-alpine AS runtime
|
||||
ENV TZ=Asia/Shanghai
|
||||
RUN apk add --no-cache tzdata \
|
||||
&& cp /usr/share/zoneinfo/$TZ /etc/localtime \
|
||||
&& echo $TZ > /etc/timezone
|
||||
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
|
||||
RUN cat > /etc/nginx/conf.d/default.conf <<'NGX'
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
client_max_body_size 50m;
|
||||
add_header X-Frame-Options SAMEORIGIN always;
|
||||
|
||||
location ~* \.(?:js|css|png|jpg|jpeg|gif|svg|woff2?|ttf|map)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, max-age=2592000, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
# 反代到管理后台 API
|
||||
location /api/ {
|
||||
proxy_pass http://single-admin-api:30032/api/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_read_timeout 120s;
|
||||
client_max_body_size 50m;
|
||||
}
|
||||
|
||||
# CRMEB 部分接口直接命中 /adminapi (兼容)
|
||||
location /adminapi/ {
|
||||
proxy_pass http://single-admin-api:30032/adminapi/;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
}
|
||||
NGX
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# ---------- 备选: 直接复用源码已构建的 dist/(fast 模式) ----------
|
||||
# 构建命令: docker compose build --target fast single-admin-web
|
||||
FROM nginx:1.25-alpine AS fast
|
||||
ENV TZ=Asia/Shanghai
|
||||
RUN apk add --no-cache tzdata \
|
||||
&& cp /usr/share/zoneinfo/$TZ /etc/localtime \
|
||||
&& echo $TZ > /etc/timezone
|
||||
COPY dist/ /usr/share/nginx/html
|
||||
COPY --from=runtime /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
|
||||
EXPOSE 80
|
||||
Reference in New Issue
Block a user