新增两步独立 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>
89 lines
2.9 KiB
Docker
89 lines
2.9 KiB
Docker
# =============================================================
|
||
# 寄卖商城 管理后台前端 (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
|