🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 部署所需 * java环境 * mysql数据库 * redis服务 * docker服务 * docker镜像库 * nacos服务 (参考地址:[https://github.com/nacos-group/nacos-docker](https://github.com/nacos-group/nacos-docker)) (需要修改官网的docker-compose将network设置成与JPower的docker-compose设置的一致) ## Harbor部署前准备 * Harbor创建一个新的项目,命名为: jpower 。 ![](https://img.kancloud.cn/ad/d2/add21ed5d2572cc46105769213a6019a_1388x768.png) * Harbor再新建一个对应的 jpower 账号,分配好角色用于接受推送过来的镜像。 ![](https://img.kancloud.cn/53/f5/53f5df91f0023ebc1922d3c8f8d4c756_1090x748.png) ## 使用docker构建工程步骤 1. 使用harbor作为私有库,需要配置maven,找到setting.xml(linux可以使用find / -name settings.xml )加入以下配置 ``` <servers> <server> <id>192.168.0.3</id> <username>admin</username> <password>Harbor12345</password> <configuration> <email>ding931226@yeah.net</email> </configuration> </server> </servers> <pluginGroups> <pluginGroup>com.spotify</pluginGroup> </pluginGroups> ``` 2. docker开启远程访问 如果没有远程访问,会报 ``` Connect to 192.168.0.3:2375 [/192.168.0.3] failed: Connection refused: connect ``` 在 /usr/lib/systemd/system/docker.service ,配置远程访问。主要是在[Service]这个部分,在harbor服务器,加上下面两个参数: ``` [root@localhost harbor]# vi /lib/systemd/system/docker.service ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ``` 3. 配置http访问 因为docker1.3.2版本开始默认docker registry使用的是https,我们设置Harbor默认http方式,所以当执行用docker login、pull、push等命令操作非https的docker regsitry的时就会报错。 解决办法:在服务器与开发机配置 /etc/docker/daemon.json ``` [root@localhost harbor]# vi /etc/docker/daemon.json { "registry-mirrors": ["https://3dse7md.mirror.aliyuncs.com"] } ``` 将其修改为: ``` { "registry-mirrors": ["https://3dse7md.mirror.aliyuncs.com"], "insecure-registries":["192.168.0.3"] } ``` 4. 修改maven配置 * 在项目根目录的pom.xml文件下,修改如下配置 ~~~ <docker.image.prefix>jpower</docker.image.prefix> <docker.registry>219.148.186.235:99</docker.registry> ~~~ 将其修改为: ~~~ <docker.image.prefix>jpower</docker.image.prefix> <docker.registry>192.168.0.3</docker.registry> ~~~ * 在每个需要构建子项目的pom.xml下加入配置,内容可参考如下 ~~~ <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <configuration> <skip>false</skip> </configuration> </plugin> ~~~ 5. 在每个需要构建子项目的根目录下加入Dockerfile,内容可参考如下 ~~~ FROM openjdk:8-jre MAINTAINER ding RUN mkdir -p /jpower/gateway \ && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone WORKDIR /jpower/gateway ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 \ SW_AGENT_NAME=jpower-gateway EXPOSE 80 ADD ./target/jpower-gateway-exec.jar ./app.jar ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] CMD ["--spring.profiles.active=test"] ~~~ 6. 在工程/script/app/目录的docker-compose.yml下加入配置,内容可参考如下 ~~~ jpower-gateway: image: "192.168.0.3/jpower/gateway-server:1.0.1-SNAPSHOT" privileged: true restart: always networks: jpower_net: ipv4_address: 172.16.238.25 ~~~ 7. 推送项目到harbor * 在项目根目录下执行命令`mvn clean package dockerfile:build dockerfile:push` 等待推送完毕 * 推送日志如下 ![](https://img.kancloud.cn/80/4e/804e847f5e100b0b510f3d2df9e2736a_3232x1320.png) * 登录harbor查看docker镜像已经推送成功 ![](https://img.kancloud.cn/30/10/3010c527478f29db0ed2aaa2661db33a_3610x1358.png) * 点击进入jpower/gateway-server可以看到详细信息 ![](https://img.kancloud.cn/a9/a6/a9a6989a77337468548f1151621590f7_3610x1578.png) ## 配置web服务以及网关反向代理 1. 我们先看下nginx的配置文件内容,画出重点。nginx配置文件在项目根目录/script/docker/nginx/jpower/文件夹下 ![](https://img.kancloud.cn/c1/23/c1238e1bd8a3b181d1734907c1a104ac_706x556.png) ![](https://img.kancloud.cn/80/6e/806e39e8b1d87e595e996e05d60ab246_1750x1422.png) * 配置了gateway这个服务的反向代理 * 其中gateway分配为81端口 * 查看/script/app/docker-compose.yml指定了80端口的gateway(这里docker-compose不用映射端口,因为nginx和gateway在同一docker网段内,通过指定IP就可以访问,端口未服务启动的端口),与nginx的配置文件一致 ![](https://img.kancloud.cn/e9/e5/e9e5c7090830aa05bbb59432bf1d7b49_2802x604.png) ![](https://img.kancloud.cn/7d/69/7d69f8e97964f5caa8ab8822e8e4c0b7_1836x840.png) * nginx端口设置为81,那么只要宿主机放开81端口,同时映射到外网,那么对应的 http://宿主机ip:81 就是反向代理后的网关地址了,在这基础上进行域名绑定相信对于大家也不是什么难事。 ![](https://img.kancloud.cn/77/6f/776f4c44e6e1a4d6505a6445efddb73d_1362x608.png) ## 使用docker-compose启动服务 * 若有新的服务,需要在工程根目录/script/app/docker-compose.yml下加入配置,内容可参考如下 ~~~ jpower-auth: image: "192.168.0.3/jpower/auth-server:1.0.1-SNAPSHOT" privileged: true volumes: # skywalking指针得目录,需要映射到容器,如果skywalking指针得目录在宿主机上得位置改变了这里也需要修改 - /docker/skywalking/agent/:/jpower/skywalking/agent/ environment: - JAVA_TOOL_OPTIONS=-javaagent:/jpower/skywalking/agent/skywalking-agent.jar - SW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800 restart: always networks: - jpower_net ~~~ * 配置好脚本集后,将下图文件拷贝至服务器任意文件夹 ![](https://img.kancloud.cn/92/05/9205d495c1efbba6f72e624e16373f08_656x516.png) * 将下图文件夹拷贝到服务器的根目录 ![](https://img.kancloud.cn/b6/02/b60277eaee8dfa1ae2107de9e55ed78a_746x786.png) * 进入app目录,给 deploy.sh 赋予执行权限 chmod 744 deploy.sh * 执行部署之前需要先部署好elk,部署elk请参考[ELK分布式日志追踪系统](./ELK分布式日志追踪系统.md) * 如果ELK和服务部署不在一个服务器,需修改docker-compose.yml文件中以下内容为ELK服务地址 ![](https://img.kancloud.cn/d2/f6/d2f6923d4ecc9f0a792301ca5010bcaf_1442x810.png) * 进入app目录后依次执行: 1. `./deploy.sh bash`启动基础支撑服务(执行该命令先请先启动ELK); 这里会把nginx、nacos、sentinel、seata、skywalking、jpower-admin全部启动 2. `./deploy.sh core` 启动业务模块 * 再次执行 `docker ps` 查看已启动的docker服务,发现服务都已启动成功 ![](https://img.kancloud.cn/aa/23/aa239fb9feda059ce829fa456005bc90_3186x646.png) * 若都成功则打开nacos界面查看对应部署的服务 * 打开聚合文档地址(http://宿主机ip:81/doc.html)查看接口调用,网关地址为之前配置好的nginx对网关的反向代理地址(http://宿主机ip:81) * 发现调用都没有问题,基于docker的部署已经成功