1 部署总览
1.1 数据架构·
1.2 服务部署
2 服务总览
服务名称 | 服务目录 | 端口 | 服务数据映射目录 |
---|---|---|---|
mysql | ./mysql | 3306 | 数据库文件:./db 初始化脚本:./init/init.sql |
apollo-configservice | ./apollo/apollo-configservice | 8080 | 日志:./logs/100003171 |
apollo-adminservice | ./apollo/apollo-adminservice | 8090 | 日志:./logs/100003172 |
apollo-portal | ./apollo/apollo-portal | 8070 | 日志:./logs/100003173 |
rmqnamesrv | ./rmq | 9876 | 数据:./data/store 日志:./data/logs |
rmqbroker | ./rmq | 10909 10911 | 配置:./data/brokerconf/broker.conf |
rmqconsole | ./rmq | 60000 | |
elastic-search | ./es | 9200 9300 | 配置:./elasticsearch.yml 数据:./data |
es-head | ./es | 9100 | |
logstash | ./logstash | ||
zookeeper | ./zk | 21811 | |
redis | ./redis | 6379 | 数据:./data |
wanxindepository | ./wanxindepository | 55010 | 日志:./logs |
wanxinp2p-discover-server | ./wanxinp2p-discover-server | 53000 | 日志:./logs |
wanxinp2p-gateway-server | ./wanxinp2p-gateway-server | 53010 | 日志:./logs |
wanxinp2p-uaa-service | ./wanxinp2p-uaa-service | 53020 | 日志:./logs |
wanxinp2p-account-service | ./wanxinp2p-account-service | 53030 | 日志:./logs |
wanxinp2p-consumer-service | ./wanxinp2p-consumer-service | 53050 | 日志:./logs |
wanxinp2p-transaction-service | ./wanxinp2p-transaction-service | 53060 | 日志:./logs |
wanxinp2p-depository-agent-service | ./wanxinp2p-depository-agent-service | 53070 | 日志:./logs |
wanxinp2p-repayment-service | ./wanxinp2p-repayment-service | 53080 | 日志:./logs |
sailing | ./sailing | 56085 | 日志:./logs |
wanxinp2p-web | ./web | 8081 | |
wanxinp2p-admin | ./admin | 8079 |
3 部署说明
3.1 安装Docker
使用版本:Docker version 18.09.7
3.1.1 卸载旧版本(可选)
-
执行如下命令,检查是否安装了旧版本:
[root@node2-vm03 ~]# docker -v Docker version 1.13.1, build b2f74b2/1.13.1
-
卸载docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
删除docker数据文件
sudo rm -rf /var/lib/docker
3.1.2 安装启动
-
安装
sudo yum install -y docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm sudo yum install -y containerd.io-1.2.2-3.el7.x86_64.rpm sudo yum install -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm sudo yum install -y docker-ce-18.09.7-3.el7.x86_64.rpm
-
启动
# 启动 sudo systemctl start docker # 检查 docker -v
3.2 安装Docker Compose
使用版本:docker-compose version 1.22.0
#移动
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
#添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -v
#docker-compose version 1.22.0, build f46880fe
3.3 准备工作
3.3.1 新建各服务目录
使用mkdir命令新建一系列目录:
- 总目录:p2p
- 添加子目录:mysql
- 添加子目录:apollo
- 添加子目录:rmq
- 添加子目录:zk
- 添加子目录:redis
- 添加子目录:es
- 添加子目录:logstash
- 添加子目录:wanxinp2p
- 添加子目录:wanxindepository
- 添加子目录:web
- 添加子目录:admin
3.3.2 安装JDK1.8
docker load -i jdk.tar
3.4 安装MySQL
- 在mysql目录下新建init文件夹,从课件中找到init.sql并复制到该文件夹中
-- init.sql 修改允许远程登录
use mysql;
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';
- 在mysql目录下编写docker-compose.yml
version: '3'
services:
mysql:
container_name: "mysql"
image: "docker.io/mysql:5.7.21"
restart: always
network_mode: "host"
hostname: mysql
environment:
MYSQL_ROOT_PASSWORD: "123"
TZ: Asia/Shanghai
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
volumes:
- "./db:/var/lib/mysql"
- "./init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
-
MYSQL_ROOT_PASSWORD为root用户的密码
-
image为拉取镜像的地址和版本
-
volumes里面的参数为映射本地和docker容器里面的文件夹和目录
./db 用来存放了数据库表文件
./init存放初始化的脚本
- 导入mysql镜像:
docker load -i mysql.tar 或 docker-compose pull
- 在存放docker-compose.yml的文件夹下执行
#启动
docker-compose up
- 把本地p2p数据库中的所有数据导出为sql脚本,然后用SQLYog连接上边安装的mysql数据库,并执行sql脚本
3.5 安装Apollo
-
初始化Apollo数据库,把本地apollo数据库中的所有数据导出为sql脚本,然后用SQLYog连接上边安装的mysql数据库并执行脚本
-
在apollo目录下编写docker-compose.yml
version: "3" services: apollo-configservice: ##容器服务名 container_name: apollo-configservice ##容器名 build: apollo-configservice/ ##Dockerfile路径 image: apollo-configservice:1.6.0 ##镜像名 network_mode: "host" ports: - "8080:8080" restart: always volumes: - "./logs/100003171:/opt/logs/100003171" ##将/opt/logs/100003171目录挂载到宿主机的./logs/100003171方便在宿主机上查看日志 environment: spring_datasource_url: "jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8" spring_datasource_username: "root" spring_datasource_password: "123" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m" apollo-adminservice: container_name: apollo-adminservice build: apollo-adminservice/ image: apollo-adminservice:1.6.0 network_mode: "host" ports: - "8090:8090" restart: always depends_on: - apollo-configservice volumes: - "./logs/100003172:/opt/logs/100003172" environment: spring_datasource_url: "jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8" spring_datasource_username: "root" spring_datasource_password: "123" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m" apollo-portal: container_name: apollo-portal build: apollo-portal/ image: apollo-portal:1.6.0 network_mode: "host" ports: - "8070:8070" restart: always depends_on: - apollo-adminservice volumes: - "./logs/100003173:/opt/logs/100003173" environment: spring_datasource_url: "jdbc:mysql://127.0.0.1:3306/ApolloPortalDB?characterEncoding=utf8" spring_datasource_username: "root" spring_datasource_password: "123" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Ddev_meta=http://127.0.0.1:8080"
-
在apollo目录下新建apollo-adminservice目录,从课件中拷贝相关文件进来(jar+zip+Dockerfile)
-
在apollo目录下新建apollo-configservice目录,从课件中拷贝相关文件进来(jar+zip+Dockerfile)
-
在apollo目录下新建apollo-portal目录,从课件中拷贝相关文件进来(jar+zip+Dockerfile)
注意:需要挨个检查并修改Dockerfile文件中的ip地址、账号、密码等数据
-
安装Apollo
docker-compose up
- 访问管理页面:http://ip:8070
3.6 安装RocketMQ
- 在rmq目录下新建data/brokerconf子目录,并在该目录下编写broker.conf
brokerClusterName = P2PCluster
brokerName = broker-p2p1
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
- 在rmq目录下编写docker-compose.yml
version: '3.5'
services:
rmqnamesrv:
image: foxiswho/rocketmq:server
container_name: rmqnamesrv
ports:
- 9876:9876
restart: always
volumes:
- ./data/logs:/opt/logs
- ./data/store:/opt/store
networks:
rmq:
aliases:
- rmqnamesrv
rmqbroker:
image: foxiswho/rocketmq:broker
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
restart: always
volumes:
- ./data/logs:/opt/logs
- ./data/store:/opt/store
- ./data/brokerconf/broker.conf:/etc/rocketmq/broker.conf
environment:
NAMESRV_ADDR: "rmqnamesrv:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms1g -Xmx1g -Xmn512m"
command: mqbroker -c /etc/rocketmq/broker.conf
depends_on:
- rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker
rmqconsole:
image: styletang/rocketmq-console-ng
container_name: rmqconsole
ports:
- 60000:60000
restart: always
environment:
JAVA_OPTS: "-Dserver.port=60000 -Xms512m -Xmx512m -Xmn256m -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
depends_on:
- rmqnamesrv
networks:
rmq:
aliases:
- rmqconsole
networks:
rmq:
name: rmq
driver: bridge
- 导入镜像
docker load -i rmq.tar 或 docker-compose pull
- 启动RocketMQ
docker-compose up -d
- 访问管理端:http://ip:60000
3.7 安装Zookeeper
-
在zk目录下编写docker-compose.yml
version: '3' services: zookeeper: container_name: zookeeper image: zookeeper:3.4.14 restart: always ports: - 21811:2181 logging: driver: "json-file" options: max-size: "10k" max-file: "10"
-
导入镜像
docker load -i zk.tar 或 docker-compose pull
- 启动Zookeeper
docker-compose up
3.8 安装ES和Logstash
3.8.1安装ElasticSearch
-
在es目录下编写elasticsearch.yml
cluster.name: wanxinp2p node.name: wanxinp2p_node network.host: 0.0.0.0 discovery.zen.minimum_master_nodes: 1 bootstrap.memory_lock: true discovery.type: single-node http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false xpack.watcher.enabled: false xpack.monitoring.enabled: false
-
在es目录下编写docker-compose.yml
version: '3' services: elastic: container_name: "elastic" image: bachue/elasticsearch-ik:6.2.4 network_mode: "host" restart: "always" environment: - TZ='Asia/Shanghai' - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - "./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml" - "./data:/usr/share/elasticsearch/data" ports: - "9200:9200" - "9300:9300" elasticsearch-head: image: wallbase/elasticsearch-head:6-alpine network_mode: "host" container_name: "elasticsearch-head" environment: TZ: Asia/Shanghai ports: - '9100:9100'
-
在es目录下新建data文件夹,并设置权限:
chmod 777 p2p/es/data
-
导入镜像
docker load -i es.tar 或 docker-compose pull
-
启动:
docker-compose up
-
访问es-head:http://localhost:9100
3.8.2 安装Logstash
-
在logstash目录下新建config和sql文件夹
-
从课件中找到logstash.yml、mysql-ef.conf,wanxinp2p_project_template.json,并复制到config目录下
注意:需要检查上述文件的内容是否需要修改,例如ip地址、端口号、账号、密码等等
-
从课件中找到wanxinp2p-project_0.sql、wanxinp2p-project_1.sql,并复制到sql目录下
-
在logstash目录下编写docker-compose.yml
version: '3' services: logstash: container_name: logstash build: ./ image: docker.elastic.co/logstash/logstash:6.2.4 volumes: - './config/logstash.yml:/usr/share/logstash/config/logstash.yml' - './pipeline:/usr/share/logstash/pipeline' - './config/wanxinp2p_project_template.json:/usr/share/logstash/config/wanxinp2p_project_template.json' - './sql:/usr/share/logstash/sql' - './logstash_metadata:/usr/share/logstash/config/logstash_metadata' network_mode: "host" restart: "always" environment: LS_JAVA_OPTS: "-Xmx256m -Xms256m" TZ: "Asia/Shanghai"
-
导入镜像
docker load -i logstash.tar 或 docker-compose pull
- 启动:
docker-compose up
3.9 安装Redis
-
在redis目录下编写docker-compose.yml
version: '3.0' services: redis: image: redis:5.0.5 container_name: redis restart: always network_mode: "host" ports: - "6379:6379" volumes: - ./data:/data command: redis-server tty: true
-
导入镜像
docker load -i redis.tar 或 docker-compose pull
- 启动Redis
docker-compose up
3.10 部署验证码服务
-
在sailing目录下编写docker-compose.yml
version: "3" services: sailing: container_name: sailing build: . image: sailing:1.0-SNAPSHOT network_mode: "host" ports: - "56085:56085" restart: always volumes: - "./logs:/logs" environment: JAVA_OPTS: "-Xms256m -Xmx256m -Xmn128m"
-
构建镜像
docker-compose up
-
启动wanxindepository
docker-compose up -d
-
测试:http://127.0.0.1:56085/sailing/swagger-ui.html
3.11 部署银行存管系统
-
初始化数据库
从本地数据库中把银行存管系统数据导出为sql脚本,然后用SQLYog连接前面的MySQL数据并执行脚本
-
在IDEA中打包银行存管系统,并把jar文件复制到wanxindepository目录下
-
在wanxindepository目录下编写dockerFile文件
FROM openjdk:8-jre-alpine
ENV VERSION 1.0-SNAPSHOT
RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main" > /etc/apk/repositories \
&& echo "http://mirrors.aliyun.com/alpine/v3.8/community" >> /etc/apk/repositories \
&& apk update upgrade \
&& apk add --no-cache procps curl bash tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
ADD wanxindepository-${VERSION}.jar wanxindepository.jar
RUN bash -c 'touch /wanxindepository.jar'
EXPOSE 55010
ENV JAVA_OPTS=""
ENTRYPOINT ["bash", "-c", "java $JAVA_OPTS -jar /wanxindepository.jar"]
- 在wanxindepository目录下编写docker-compose.yml
version: "3"
services:
wanxindepository:
container_name: wanxindepository
build: .
image: wanxindepository:1.0-SNAPSHOT
network_mode: "host"
ports:
- "55010:55010"
restart: always
volumes:
- "./data/apollo:/config-cache"
- "./logs:/logs"
environment:
JAVA_OPTS: "-Dserver.port=55010 -Denv=dev -Dapollo.cluster=DEFAULT"
- 构建镜像
docker-compose up
- 启动wanxindepository
docker-compose up -d
3.12 部署平台
-
在wanxinp2p目录下添加对应微服务的子目录:
- wanxinp2p-discover-server
- wanxinp2p-gateway-server
- wanxinp2p-uaa-service
- wanxinp2p-account-service
- wanxinp2p-consumer-service
- wanxinp2p-transaction-service
- wanxinp2p-depository-agent-service
- wanxinp2p-repayment-service
-
在IDEA中打包各个微服务,并复制jar文件到对应的目录
-
自己编写或从课件中找到Dockerfile文件并像上图一样复制到对应目录中
-
在wanxinp2p目录下编写docker-compose.yml
version: "3" services: wanxinp2p-discover-server: container_name: wanxinp2p-discover-server build: wanxinp2p-discover-server/ image: wanxinp2p-discover-server:1.0-SNAPSHOT network_mode: "host" ports: - "53000:53000" restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53000" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m" wanxinp2p-gateway-server: container_name: wanxinp2p-gateway-server build: wanxinp2p-gateway-server/ image: wanxinp2p-gateway-server:1.0-SNAPSHOT network_mode: "host" ports: - "53010:53010" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53010" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53010 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-uaa-service: container_name: wanxinp2p-uaa-service build: wanxinp2p-uaa-service/ image: wanxinp2p-uaa-service:1.0-SNAPSHOT network_mode: "host" ports: - "53020:53020" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53020" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53020 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-account-service: container_name: wanxinp2p-account-service build: wanxinp2p-account-service/ image: wanxinp2p-account-service:1.0-SNAPSHOT network_mode: "host" ports: - "53030:53030" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53030" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53030 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-consumer-service: container_name: wanxinp2p-consumer-service build: wanxinp2p-consumer-service/ image: wanxinp2p-consumer-service:1.0-SNAPSHOT network_mode: "host" ports: - "53050:53050" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53050" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53050 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-transaction-service: container_name: wanxinp2p-transaction-service build: wanxinp2p-transaction-service/ image: wanxinp2p-transaction-service:1.0-SNAPSHOT network_mode: "host" ports: - "53060:53060" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53060" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53060 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-depository-agent-service: container_name: wanxinp2p-depository-agent-service build: wanxinp2p-depository-agent-service/ image: wanxinp2p-depository-agent-service:1.0-SNAPSHOT network_mode: "host" ports: - "53070:53070" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53070" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53070 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-repayment-service: container_name: wanxinp2p-repayment-service build: wanxinp2p-repayment-service/ image: wanxinp2p-repayment-service:1.0-SNAPSHOT network_mode: "host" ports: - "53080:53080" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53080" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53080 -Denv=dev -Dapollo.cluster=DEFAULT" wanxinp2p-reconciliation-service: container_name: wanxinp2p-reconciliation-service build: wanxinp2p-reconciliation-service/ image: wanxinp2p-reconciliation-service:1.0-SNAPSHOT network_mode: "host" ports: - "53040:53040" depends_on: - wanxinp2p-discover-server restart: always volumes: - "./logs:/logs" environment: SERVER_PORT: "53040" JAVA_OPTS: "-Xms512m -Xmx512m -Xmn256m -Dserver.port=53040 -Denv=dev -Dapollo.cluster=DEFAULT"
-
构建镜像
docker-compose up
-
启动wanxinp2p
docker-compose up -d
3.13 部署前端
-
找到提供的前端工程(不要用之前的wanxinp2p_front),复制到web目录下
-
修改后端地址和文件服务地址:src/utils/request.js
const BaseUrl = 'http://127.0.0.1:53010/'
const FileServiceUrl = 'http://127.0.0.1:56082/farming/'
- 编写docker-compose.yml
version: '3'
services:
wanxinp2p-web:
container_name: wanxinp2p-web
image: ebiven/vue-cli
command:
- /bin/sh
- -c
- |
#npm install sass-loader -D
#npm install node-sass --save-dev
npm run dev:h5
volumes:
- ./my-project:/code
network_mode: "host"
restart: always
ports:
- "8081:8081"
- 启动前端
docker-compose up -d
4 测试
通过浏览器访问:http://localhost:8081/并进行登录
注意:有些服务该文档并未提供部署说明,需要由大家自行完成部署