跳转到内容

宇宙版 · 部署指南文档

覆盖 Linux 生产环境的服务器准备、Docker 容器化、Nginx 反向代理和 SSL。B2B2C 三端后端容器化,Nginx 按用户 / 商家 / 平台拆 HTTPS 站点。推荐全程 Docker。文中域名、IP、密码均为示例,上线前必须替换。

组件 版本
JDK(镜像内) 17
MySQL 8.0
Redis 5.0+
Elasticsearch 7.x
XXL-JOB 3.0.0
Docker / Compose 当前稳定版

先在开发机把后端打好包,再放到生产机。服务器需已安装 dockerdocker compose

以模板目录 mall4j-shop 为根:

mall4j-shop
├─ mysql/initdb # 初始化 SQL
├─ mysql/my.cnf
├─ mysql/data # 数据卷,禁止删除
├─ yami-shop-api # 用户端 jar + Dockerfile
├─ yami-shop-multishop # 商家端 jar
├─ yami-shop-platform # 平台端 jar
├─ nginx/conf.d # 各站点反代
├─ nginx/html # 前端 dist(h5 / pc / vs / vp / ms)
├─ nginx/ssl # pem/crt + key
└─ docker-compose.yml

目录

  • MySQL:将后端仓库 db0schema.sql、主库脚本、2area.sql3xxl_job.sql 拷到 mysql/initdb。Compose 首次启动会自动导入。其余日期补丁只在升级时执行。
  • Javamvn clean package -DskipTests 后放入三个 jar:
    • yami-shop-api-0.0.1-SNAPSHOT.jar
    • yami-shop-multishop-0.0.1-SNAPSHOT.jar
    • yami-shop-platform-0.0.1-SNAPSHOT.jar
  • Nginxconf.d 放站点配置;html 放下面对应前端构建产物;ssl 放证书。

打包前改 Docker 环境变量(Compose 优先于 yml 文件),例如:

environment:
- MYSQL_HOST=mall4j-mysql
- MYSQL_PORT=3306
- MYSQL_USERNAME=root
- MYSQL_PASSWORD=<生产密码>
- REDIS_HOST=mall4j-redis
- REDIS_PORT=6379
- REDIS_PASSWORD=<生产密码>
- ELASTIC_ADDRESS=http://mall4j-elasticsearch:9200
- WUKONGIM_ADDRESS=http://mall4j-wukongim:5001

非 Docker 时改各模块 application-prod.ymlmysql/data 禁止删除。

Terminal window
cd mall4j-shop
docker compose up -d --build

启动

只把 80、443 映射到公网。MySQL、Redis、ES、WuKongIM 管理端口不要暴露。上线前全局搜索模板密码 hn02le.34lkdLKD 并全部替换。

每个前端一个 server_name。80 永久跳 443;443 开启 http2,证书放 nginx/ssl

conf 作用
b2b2c-api.conf 用户 API,反代 :8112
b2b2c-multishop.conf 商家后台静态 + /apis:8113
b2b2c-platform.conf 平台后台静态 + /apis → 平台 jar
b2b2c-h5.conf / b2b2c-pc.conf / b2b2c-ms.conf H5、PC、商家移动端静态
b2b2c-im.conf / minio / xxl-job 配套服务

商家后台 HTTPS 示例:

server {
listen 80;
server_name b2b2c-multishop.mall4j.com;
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl http2;
server_name b2b2c-multishop.mall4j.com;
ssl_certificate ssl/your-cert.pem;
ssl_certificate_key ssl/your-cert.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
proxy_pass http://mall4j-b2b2c-vs;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /apis {
rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://mall4j-b2b2c-multishop:8113;
proxy_cookie_path / "/; httponly; secure; SameSite=Lax";
}
location /apis/doc.html { return 404; }
}

用户端 API 只反代 Java。H5 / PC 用 root + try_files $uri $uri/ /;,Docker 里物理目录对应 Compose 的 ./nginx/html:/usr/share/nginx/html。H5 必须 HTTPS 才能使用浏览器定位。

  • uni-app:Node ≥ 18.12,pnpm install 后改 .env.production 的接口域名,发行 H5 到 nginx/html/h5
  • PC / 商家后台 / 平台后台:改生产环境 API 后 pnpm build,dist 拷到 html/pchtml/multishophtml/platform。商家移动端放入 html/ms
  • 小程序不走 Nginx,在公众平台配置 request 合法域名(必须 HTTPS)。

不推荐。若必须裸 jar:

Terminal window
java -jar -Xmx1024m -Dspring.profiles.active=prod yami-shop-api-0.0.1-SNAPSHOT.jar &
java -jar -Xmx512m -Dspring.profiles.active=prod yami-shop-multishop-0.0.1-SNAPSHOT.jar &
java -jar -Xmx512m -Dspring.profiles.active=prod yami-shop-platform-0.0.1-SNAPSHOT.jar &

XXL-JOB 需另行部署。Nginx 的 proxy_pass 改为服务器内网 IP。