## 部署所需
* 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的部署已经成功
- 序言
- 开发环境准备
- 环境要求
- 环境安装
- 基础环境安装
- Nacos安装
- Sentinel安装
- 插件安装
- 导入工程
- 运行工程
- 工程测试
- JPower特性
- 系统启动器
- 多终端令牌认证
- 系统鉴权
- 鉴权API
- 鉴权配置
- API权限配置
- 接口放行配置
- 数据权限
- redis缓存
- 动态网关
- 聚合文档
- SaaS多租户
- 概念
- 使用
- Xss防注入
- 日志记录
- 操作日志&错误日志
- SQL打印
- feign请求日志&配置
- gateway日志
- 服务日志打印
- 导入导出
- 字典查询
- 系统文件上传下载
- 接口监控
- 代码生成器
- 配置文件共享
- Mybatis过滤器
- 配置说明
- 高级实战
- nacos动态配置
- Seata分布式事务
- 简介
- docker启动
- 微服务配置
- 微服务远程调用
- 声明式服务调用 Feign
- 熔断机制 Sentinel
- sentinel流控
- 简介
- 微服务配置
- 配置nacos对接
- APM监控&链路追踪
- 简介
- 安装
- 微服务接入
- SpringBootAdmin监控
- ELK分布式日志追踪系统
- ELK简介
- ELK一键部署
- 微服务日志对接ELK
- JPower-Chat
- 配置说明
- 生产部署
- docker部署
- docker安装
- docker-compose安装
- harbor安装
- 部署步骤
- 版本升级
- 1.0.1升级到2.0.0
- 2.0.0升级到2.0.2
- 2.0.2升级2.1.0
- 2.1.0升级到2.1.1
- 2.1.1升级到2.1.2
- 2.1.2升级到2.1.4