快速部署开源商城
目标
使用Docker容器技术,快速部署一套可运行的SiC B2B2C Shop商城系统。
准备Docker环境
如果你使用Windows系统,我们需要安装使用Docker Desktop(Docker 桌面)。
如果你使用Linux系统,我们需要安装Docker Engine(Docker 引擎\ Docker CE )。
安装Docker环境
DcokerHub镜像仓库列表
你可以使用Docker容器快速部署一套B2B2C电商系统。以下镜像都是经过测试的,可以直接使用。
https://hub.docker.com/u/sichengtech DcokerHub镜像仓库列表
https://hub.docker.com/r/sichengtech/b2b2c-shop-open-cn Shop主程序镜像(简体中文商城)
https://hub.docker.com/r/sichengtech/b2b2c-shop-open-en Shop主程序镜像(英文国际商城)
https://hub.docker.com/r/sichengtech/b2b2c-shop-mysql56 MySQL镜像(包含中英两个数据库)
https://hub.docker.com/r/sichengtech/b2b2c-shop-minio Minio对象存储镜像(包含中英两套图片)
https://hub.docker.com/r/sichengtech/b2b2c-shop-solr8 Solr搜索引擎镜像(包含中英两套索引)
Deploy by docker 使用Docker部署
1、拉取镜像:
#拉取镜像-简体中文商城主程序
docker pull sichengtech/b2b2c-shop-open-cn
#拉取镜像-英文国际商城主程序
docker pull sichengtech/b2b2c-shop-open-en
#拉取镜像-MySQL镜像(包含中英两个数据库)
docker pull sichengtech/b2b2c-shop-mysql56
#拉取镜像-Solr搜索引擎镜像(包含中英两套索引)
docker pull sichengtech/b2b2c-shop-solr8
#拉取镜像-Minio对象存储镜像(包含中英两套图片)
docker pull sichengtech/b2b2c-shop-minio
刚刚下载的5个镜像
2、创建网络
Docker容器分配静态ip,并使用自定义网络的示例。下面使用一个叫my-net 的自定义网络,使用172.28.0.0/16网段
创建一个网络172.28.0.0/16
docker network create --subnet=172.28.0.0/16 my-net
3、启动容器
#启动Minio对象存储(初次启动请等1分钟)
docker run -d -p 9000:9000 -p 9090:9090 --name b2b2c-shop-minio --ip 172.28.0.102 --network my-net sichengtech/b2b2c-shop-minio server /data2 --console-address ":9090"
#启动MySQL容器(初次启动需要3~5分钟初始化数据,一定要耐心等待)
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --ip 172.28.0.105 --network my-net --name b2b2c-shop-mysql56 sichengtech/b2b2c-shop-mysql56
#启动Solr8搜索引擎
docker run -d -p 8983:8983 -t --name b2b2c-shop-solr8 --ip 172.28.0.101 --network my-net sichengtech/b2b2c-shop-solr8
#简体中文商城主程序(需要等1~2分钟MySQL容器初始化完成再启动)
docker run -d -p 8080:8080 --name b2b2c-shop-open-cn --ip 172.28.0.10 --network my-net sichengtech/b2b2c-shop-open-cn
#英文国际商城主程序(需要等1~2分钟前一个容器启动完成再启动)
docker run -d -p 8081:8080 --name b2b2c-shop-open-en --ip 172.28.0.11 --network my-net sichengtech/b2b2c-shop-open-en
刚刚启动的5个容器
常见容器启动失败原因:
1、商城主程序容器启动时日志报错,可能是因为MySQL容器还未初始化数据完成,就急于启动商城主程序容器。请等待3~5分钟初始化数据,再重启商城主程序容器。
2、Minio对象存储容器启动后看不到两个桶,可能是因为同时急于启动多个容器造成的,请先单独启动Minio对象存储容器并请等1分钟。
4、手动生成SOLR索引
登录商城的管理后台,手动生成SOLR索引。因为这是刚刚部署的新系统,所以要手动全量生成SOLR索引一次。
登录管理台:http://localhost:8080/admin/index.do 账号在之前的文档中的获取。 登录账号
按下图操作
5、访问商城
以简体中文商城为例:
前台:http://localhost:8080/
会员中心:http://localhost:8080/member/index.htm
商家后台:http://localhost:8080/seller/index.htm
账号在之前的文档中的获取。 登录账号
管理后台:http://localhost:8080/admin/index.do
账号在之前的文档中的获取。 登录账号
以国际文商城为例(账号同上):
前台:http://localhost:8081/
会员中心:http://localhost:8081/member/index.htm
商家后台:http://localhost:8081/seller/index.htm
管理后台:http://localhost:8081/admin/index.do
Solr搜索引擎后台
Solr搜索引擎后台:http://localhost:8983/solr/#/
无需要账号密码
Minio对象存储后台
Minio后台:http://localhost:9090/login
Minio的管理账号是: admin/admin123
MySQL数据
ip='127.0.0.1'
port='3306'
user='root'
password='123456'
Docker容器运行的Tomcat的catalina.out文件在哪里?
服务器环境是使用docker运行的tomcat服务。
但是进入docker容器找到tomcat,在logs目录下并没有常见的/usr/local/tocmat/logs/catalina.out文件。
在/usr/local/tocmat/logs目录下,发现其文件结构如下:
catalina.2020-04-03.log
host-manager.2020-04-03.log
localhost_access_log.2020-04-03.txt
localhost.2020-04-03.log
manager.2020-04-03.log
Docker容器运行的Tomcat,catalina.out文件在哪里?
深入分析发现,只有在使用命令catalina.sh start来启动tomcat的时候才会创建catalina.out文件。
但docker容器的启动tomcat执行命令就是sh /usr/local/tocmat/bin/catalina.sh run。
这样启动tomcat时候,是不会创建catalina.out文件的,而是日志将会托管给docker容器。
这样做的目的就是把日志托管给docker容器,更符合容器的规范。
可使用命令 docker logs -f 容器名 查看日志。
如何开机自启动Docker容器?
如果你需要开机时自启动Docker可使用以下命令
sudo systemctl enable docker 或 systemctl enable docker
如果你需要Docker启动之后,也自动启动其中某个容器,可使用以下命令对已存在的容器配置自启动。
docker update --restart=always b2b2c-shop-minio
docker update --restart=always b2b2c-shop-mysql56
docker update --restart=always b2b2c-shop-solr8
docker update --restart=always b2b2c-shop-open-cn
docker update --restart=always b2b2c-shop-open-en
如何得到MySQL数据库初始化脚本文件?
shop-cn.sql 中文商城的MySQL数据库
shop-en.sql 英文商城的MySQL数据库
本系统的MySQL数据库初始化脚本文件在Docker容器中,你直接启动容器就可得到一个参数优化过的MySQL数据库。
如果你需要拿到MySQL数据库初始化脚本文件,可以从Docker容器下载文件。
在宿主机上执行以下命令,可从一个叫b2b2c-shop-mysql56的容器内下载2个sql文件到宿主机的当前目录。
docker cp b2b2c-shop-mysql56:/docker-entrypoint-initdb.d/shop-cn.sql ./
docker cp b2b2c-shop-mysql56:/docker-entrypoint-initdb.d/shop-en.sql ./
为什么sql文件放在容器的/docker-entrypoint-initdb.d目录?
当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。