> 技术文档 > 使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)

使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)


1.项目背景:

本项目作为小商场系统,涵盖内容如下:
litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端

1.1项目架构:

使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)

1.2项目技术栈:

使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
本项目可以使用window运行jar包本地部署,也可以实现服务器直接打包部署,也可以实现docker打镜像部署运行。本篇主要介绍如何在docker上打镜像部署,docker镜像部署有点有很多,最主要的一点还是对环境和架构要求较少,可以直接使用自己开发时定义的版本。那么话不多说直接开始介绍。

2.Docker部署

2.1准备环境

首先我们需要安装docker以及docker-compose 这些步骤我就不多赘述,网上很多教程,新手小白可以跳转下面连接边安装边学习:docker安装详细介绍
本项目除了配置文件的服务,还需要安装mysql,如果安装过拉取过mysql镜像则可以直接把docker-compose的mysql拉取配置删除即可 (像我这样):
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)

2.2 项目打包

1. 在服务器或者开发机打包项目到docker;

 cd litemall cat ./litemall-db/sql/litemall_schema.sql > ./docker/db/init-sql/litemall.sql cat ./litemall-db/sql/litemall_table.sql >> ./docker/db/init-sql/litemall.sql cat ./litemall-db/sql/litemall_data.sql >> ./docker/db/init-sql/litemall.sql cd ./litemall-admin npm install --registry=https://registry.npm.taobao.org npm run build:dep cd .. mvn clean package cp -f ./litemall-all/target/litemall-all-*-exec.jar ./docker/litemall/litemall.jar

这里的工作是:
把数据库文件拷贝到docker/db文件夹
修改litemall文件夹下面的*.yml外部配置文件,当litemall-all模块启动时会 加载外部配置文件,而覆盖默认jar包内部的配置文件。 例如,配置文件中一些地方需要设置成远程服务器的IP地址
编译litemall-admin项目
编译litemall-all模块,同时把litemall-admin编译得到的静态文件拷贝到 litemall-all模块的static目录(因为我是直接通过sftp上传的dist包,所以这里没有给出,大家自己把打好的dist包上传到服务器就行)
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
此时docker部署包结构如下:

  • bin:
    存放远程服务器运行的脚本,包括deploy.sh脚本和reset.sh脚本
  • db:
    存放litemall数据库文件
  • litemall:
    存放远程服务器运行的代码,包括litemall-all二进制可执行包和litemall外部配置文件
  • util:
    存放开发服务器运行的脚本,包括package.sh脚本和lazy.sh脚本。 由于是本地开发服务器运行,因此开发者可以不用上传到远程服务器。
  • docker-compose.yml:
    docker-compose配置脚本,运行docker-compose命令会
    2. 打一个本地镜像以便生产环境部署(更稳定安全)
    首先进到docker文件夹
    使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
    由于我的Dockerfile在litemall文件夹里存放,所以打镜像命令要这样写:
docker bulidx build -t litemall:1.0.0 ./litemall

打成镜像如下
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
litemal-front代表前端镜像,后面就不在重复写了。
docker-compose文件配置如下:

version: \'3\'services: litemall: image: litemall:1.0.0 #使用已经打好的镜像 container_name: litemall ports: - \"8080:8080\" volumes: - ./litemall/storage:/storage - ./litemall/logs:/logs - ./litemall/backup:/backup - /etc/localtime:/etc/localtime environment: - TZ=Asia/Shanghai restart: always #自启动

2.3启动:

docker compose up -d
查看成功如下:
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
到这里后端服务已经部署好了,接下来是前端服务,我通过nginx代理,然后再把nginx打到镜像启动。

3.Nginx代理前端

3.1 Nginx安装

这里还是不提供安装方法,提供链接如下:Nginx安装实战

3.2 上传dist包

默认在/usr/share/nginx/html,后面配置文件路径要保持一致
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)

3.3 Nginx配置

如果通过yum安装nginx,默认在/etc/nginx/nginx.conf配置,主要是替换代理server:

server { listen 80; server_name 192.168.136.160; # 管理后台:访问 http://ip/admin/  location /admin { alias /usr/share/nginx/html/admin/dist; index index.html; try_files $uri $uri/ /index.html; } # 商城前端:访问 http://ip/shop/  location /shop { alias /usr/share/nginx/html/shop/dist; index index.html; try_files $uri $uri/ /index.html; } # 后端接口转发:访问 http://ip/api/...  location /api/ { proxy_pass http://192.168.136.160:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } error_page 404 =200 /admin/index.html; }

这时启动nginx已经可以访问

systemctl start nginx

接下来使用docker compose up -d
打到镜像中
访问http:/ip/shop如下:
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
访问http:/ip/admin如下:
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
至此已经完成,但是项目仍有一点小bug,应该是我自己的问题,如下:
使用Docker+Nginx部署电商平台项目(服务端+管理端+商城)
正在跟进中,如果有大佬懂这个问题,可以帮帮我,谢谢。祝大家每日都好运,每天都进步,加油!