Files
integral-shop/deploy/docker/scripts/deploy-step1.sh
danaisuiyuan fb76270882 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>
2026-05-17 17:24:08 +08:00

205 lines
7.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# =============================================================
# 寄卖商城integral-resell一键部署脚本
# 目标服务器116.62.83.240
# 使用方式bash deploy/docker/scripts/deploy-step1.sh
# =============================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
STEP1_DIR="${PROJECT_ROOT}/deploy/docker/step1-integral"
# ---------- 读取服务器配置 ----------
if [ -f "$SCRIPT_DIR/server.env" ]; then
set -a; . "$SCRIPT_DIR/server.env"; set +a
else
echo "[!] 未找到 server.env请先创建"; exit 1
fi
SERVER_HOST="${SERVER_HOST:?}"
SERVER_USER="${SERVER_USER:-root}"
SERVER_PORT="${SERVER_PORT:-22}"
REMOTE_DIR="${REMOTE_DIR:-/root/integral-shop}"
REMOTE_STEP1="${REMOTE_DIR}/deploy/docker/step1-integral"
REDIS_PASS="LeileiRedis@8899"
DB_PASS="5Fn8eWrbYFtAhCZw"
# ---------- SSH / rsync 通道 ----------
export SSHPASS="${SSHPASS:?缺少 SSHPASS}"
SSH_OPTS="-p $SERVER_PORT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
SSH=(sshpass -e ssh $SSH_OPTS)
RSYNC_SSH="sshpass -e ssh $SSH_OPTS"
RSYNC_BIN="/opt/homebrew/bin/rsync"
[ -x "$RSYNC_BIN" ] || RSYNC_BIN="rsync"
remote() { "${SSH[@]}" "${SERVER_USER}@${SERVER_HOST}" "$@"; }
echo ""
echo "══════════════════════════════════════════════════════"
echo " 寄卖商城 Docker 一键部署 → ${SERVER_HOST}"
echo "══════════════════════════════════════════════════════"
# ─── 1. 生成本地临时 env 文件 ─────────────────────────────────
echo ""
echo "▶ [1/6] 生成临时 .env / houtai.env ..."
TMPENV=$(mktemp -d)
trap 'rm -rf "$TMPENV"' EXIT
cat > "$TMPENV/.env" <<EOF
TZ=Asia/Shanghai
REDIS_PASSWORD=${REDIS_PASS}
INTEGRAL_TITLE=池州雷蕾商贸
INTEGRAL_API_PUBLIC_URL=https://leileiadmin.czchunfang.com
INTEGRAL_IMG_PUBLIC_URL=https://leileiadmin.czchunfang.com
INTEGRAL_H5_PUBLIC_URL=https://leilei.czchunfang.com/
INTEGRAL_SN_ID=17533260260517
INTEGRAL_APP_STR=ZFyTNQTWEkCBczKzyUDJWE9Ecx260517
INTEGRAL_CONTRACT_PAGE=10012
INTEGRAL_H5_PORT=18080
RESELL_API_PORT=18085
RESELL_H5_DIR=/www/wwwroot/leilei.czchunfang.com
RESELL_HOUTAI_DIR=/www/wwwroot/leileiadmin.czchunfang.com
EOF
cat > "$TMPENV/houtai.env" <<EOF
DB_HOST = 'rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com'
DB_PORT = 3306
DB_DATABASE = 'yangtangyoupin'
DB_USERNAME = 'yangtangyoupin'
DB_PASSWORD = '${DB_PASS}'
REDIS_HOST = 'redis'
REDIS_PORT = 6379
REDIS_PASSWORD = '${REDIS_PASS}'
SMS_CHANNEL = 'alibaba'
SMS_SIGNNAME = '池州雷蕾商贸'
SMS_TEMPLATE = 'SMS_334320185'
SMS_KEYID = 'LTAI5t7CfS15hZGdNLLEMUwG'
SMS_KEYSECRET = 'ikfTvHbMMg5sStGgdvLNL8iuVYdner'
SMS_SDKAPPID = ''
FILE_STORAGE = 'public'
OSS_ACCESS_ID = ''
OSS_ACCESS_SECRET = ''
OSS_BUCKET = ''
OSS_ENDPOINT = ''
OSS_URL = ''
APP_SIGN = '1'
APP_SECRET = 'ZFyTNQTWEkCBczKzyUDJWE9Ecx260517'
EOF
echo " ✓ 临时文件已生成"
# ─── 2. rsync 项目文件 ────────────────────────────────────────
echo ""
echo "▶ [2/6] rsync 项目文件 → ${SERVER_USER}@${SERVER_HOST}:${REMOTE_DIR}/"
remote "mkdir -p '${REMOTE_DIR}'"
"$RSYNC_BIN" -avz --partial \
-e "$RSYNC_SSH" \
--exclude '.git/' \
--exclude '.DS_Store' \
--exclude '*.log' \
--exclude '**/.idea/' \
--exclude '**/.cursor/' \
--exclude '**/.vscode/' \
--exclude '**/node_modules/' \
--exclude '**/target/' \
--exclude '**/unpackage/cache/' \
--exclude '**/unpackage/dist/dev/' \
--exclude 'integral-resell/houtai/runtime/' \
--exclude 'single-shop-22/backend/logs/' \
--exclude 'single-shop-22/backend/crmebimage/' \
--exclude 'MER-2.2_2601/' \
--exclude 'db/' \
--exclude 'deploy/docker/scripts/server.env' \
--exclude 'deploy/docker/step1-integral/.env' \
--exclude 'deploy/docker/step1-integral/houtai.env' \
"${PROJECT_ROOT}/" "${SERVER_USER}@${SERVER_HOST}:${REMOTE_DIR}/"
echo " ✓ 项目文件同步完成"
# ─── 3. 上传 env 文件 ─────────────────────────────────────────
echo ""
echo "▶ [3/6] 上传 .env 和 houtai.env ..."
"$RSYNC_BIN" -avz \
-e "$RSYNC_SSH" \
"$TMPENV/.env" \
"${SERVER_USER}@${SERVER_HOST}:${REMOTE_STEP1}/.env"
"$RSYNC_BIN" -avz \
-e "$RSYNC_SSH" \
"$TMPENV/houtai.env" \
"${SERVER_USER}@${SERVER_HOST}:${REMOTE_STEP1}/houtai.env"
echo " ✓ env 文件上传完成"
# ─── 4. 创建宿主机挂载目录 + 同步 H5 到 wwwroot ──────────────
echo ""
echo "▶ [4/6] 创建宿主机目录 & 同步 H5 静态文件 ..."
remote "
set -e
mkdir -p /www/wwwroot/leilei.czchunfang.com
mkdir -p /www/wwwroot/leileiadmin.czchunfang.com/public/upload
mkdir -p /www/wwwroot/leileiadmin.czchunfang.com/runtime/logs
mkdir -p /www/wwwroot/leileiadmin.czchunfang.com/runtime/sessions
echo ' ✓ 宿主机目录已就绪'
# 同步 H5 静态文件
rsync -a --delete \
'${REMOTE_DIR}/integral-resell/h5/' \
'/www/wwwroot/leilei.czchunfang.com/'
echo ' ✓ H5 静态文件已同步到 /www/wwwroot/leilei.czchunfang.com/'
# 同步 webman 应用文件webman.bin / public / index.html到宿主机
# 容器启动后直接从此目录运行FTP 更新文件后 restart 即可生效
rsync -a --exclude='runtime/' --exclude='.env' \
'${REMOTE_DIR}/integral-resell/houtai/' \
'/www/wwwroot/leileiadmin.czchunfang.com/'
chmod +x /www/wwwroot/leileiadmin.czchunfang.com/webman.bin
echo ' ✓ webman 应用文件已同步到 /www/wwwroot/leileiadmin.czchunfang.com/'
ls /www/wwwroot/leileiadmin.czchunfang.com/ | head -8
"
# ─── 5. docker compose build & up ────────────────────────────
echo ""
echo "▶ [5/6] docker compose build --no-cache ..."
echo " (首次构建耗时 5-15 分钟,请耐心等待)"
remote "
set -e
cd '${REMOTE_STEP1}'
docker compose --env-file .env build --no-cache
echo ' ✓ 镜像构建完成'
"
echo ""
echo "▶ [6/6] docker compose up -d ..."
remote "
set -e
cd '${REMOTE_STEP1}'
docker compose --env-file .env up -d
echo ''
docker compose --env-file .env ps
"
# ─── 完成 ─────────────────────────────────────────────────────
echo ""
echo "══════════════════════════════════════════════════════"
echo " ✅ 寄卖商城部署完成!"
echo ""
echo " H5 前台: http://${SERVER_HOST}:18080"
echo " API 端口: http://${SERVER_HOST}:18085"
echo ""
echo " 查看日志:"
echo " cd ${REMOTE_STEP1} && docker compose --env-file .env logs -f"
echo ""
echo " 查看容器状态:"
echo " docker compose --env-file .env ps"
echo "══════════════════════════════════════════════════════"