介绍
本地安装方式一般用于搭建开发环境,在服务器上部署好基础服务后,开发人员在本地只需关注自己的服务,进行API测试。本文将在一台空的 CentOS 7.2
的机器上一步步安装为例介绍本地安装方式,有些步骤根据情况跳过即可。本地安装可以参考培训视频 培训资料 中 HZERO安装部署
部分。
前置工作
在开始安装部署前,首先确认项目或产品的基本信息,例如以合同产品为例
- 产品简称: HCBM,产品一般四个字母,以 “H”开头;项目可根据项目名称取四个字母做项目简称。
- 服务坐标:com.contract,坐标一般为组织域名倒写
- HZERO版本:新安装时一般选择目前最新版本
- 服务版本:根据企业是否需要多租户,选择SaaS或OP版本,这里选择SAAS版本
- 标准服务名称:hcbm-gateway,产品名称-标准服务名称
- 父项目:hcbm-parent,用于统一管理所有服务版本,便于升级
基础环境安装
安装清单
组件 | 描述 | 版本 |
---|---|---|
JDK | Java运行环境 | 1.8.0_172 |
Nginx | 前端代理 | 1.8.1 |
Node | JavaScript 运行环境 | 10.15.0 |
Docker | 应用容器引擎 | 18.09.0 |
Git | 源码管理 | 2.9.4 |
Maven | 项目构建 | 3.3.9 |
yum 源更新
-
进入源目录:
cd /etc/yum.repos.d/
-
下载163源:
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
-
把文件里面的$releasever全部替换为版本号6:
sed -i 's#$releasever#6#g' CentOS6-Base-163.repo
-
清除原有缓存:
yum clean all
-
重建缓存,以提高搜索安装软件的速度:
yum makecache
-
更新系统:
yum update
-
gcc等环境安装,后续有些软件安装需要这些基础环境
gcc安装:yum install gcc-c++ PCRE pcre-devel 安装:yum install -y pcre pcre-devel zlib 安装:yum install -y zlib zlib-devel OpenSSL 安装:yum install -y openssl openssl-devel
JDK
-
由于jdk下载需要接受条款的原因,建议下载后使用FlashFXP从本地上传到服务器。
-
进入/usr/local/src,解压jdk:
# tar -zxvf jdk-8u172-linux-x64.tar.gz
-
将解压的jdk移动到/usr/local/:
# mv jdk1.8.0_172 /usr/local/
-
配置环境变量:
# vim /etc/profile
,在最后添加如下环境变量export JAVA_HOME=/usr/local/jdk1.8.0_172 export JRE_HOME=/usr/local/jdk1.8.0_172/jre export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
-
保存退出后输入命令使配置生效:
# source /etc/profile
-
验证jdk:
# java -version
Nginx
- 准备nginx:
下载:# wget http://nginx.org/download/nginx-1.8.1.tar.gz
解压:# tar -zxvf nginx-1.8.1.tar.gz
进入目录:# cd nginx-1.8.1
- 配置nginx:
# ./configure --prefix=/usr/src/nginx --with-http_stub_status_module --with-http_ssl_module
- 编译安装:
# make && make install
- 查看nginx版本:
进入安装目录:# cd /usr/src/nginx/sbin
查看版本:# ./nginx -v
- 设置开机启动
编辑/etc/rc.local:# vim /etc/rc.local
添加一行:/usr/src/nginx/sbin/nginx
,之后,开机会自动启动nginx - nginx 命令
进入nginx目录:# cd /usr/src/nginx/sbin
启动服务:# ./nginx
停止服务:# ./nginx -s stop
重启服务:# ./nginx -s reopen
重新载入配置文件:# ./nginx -s reload
Node
-
准备 Node
下载:# wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.xz
解压:# tar -xvf node-v10.15.0-linux-x64.tar.xz
移动到/usr/local/:# mv node-v10.15.0-linux-x64 /usr/local/node-v10.15.0
-
创建软链接:
# ln -s /usr/local/node-v10.15.0/bin/node /usr/local/bin/node # ln -s /usr/local/node-v10.15.0/bin/npm /usr/local/bin/npm # ln -s /usr/local/node-v10.15.0/bin/npx /usr/local/bin/npx 验证: # node -v # npm -v # npx -v
Docker
- 卸载旧版本:
# yum remove docker docker-common docker-selinux
- 安装需要的依赖包:
# yum install -y yum-utils device-mapper-persistent-data
- 配置稳定仓库:
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装:
# yum install docker-ce
- 启动docker:
# systemctl start docker
- 加入开机启动:
# systemctl enable docker
- 验证安装是否成功:
# docker -v
Git
-
准备Git
下载:wget https://www.kernel.org/pub/software/scm/git/git-2.9.4.tar.gz
解压:tar -zxvf git-2.9.4.tar.gz
-
安装编译Git时需要的包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc perl-ExtUtils-MakeMaker
-
删除已有的git:
# yum remove git
-
编译安装
进入根目录:cd /usr/local/src/git-2.9.4 安装到/usr/local/git目录:./configure --prefix=/usr/local/git 编译安装:make && make install
-
创建软链:
# ln -s /usr/local/git/bin/* /usr/local/bin/
-
检查安装是否成功:
# git --version
-
生成 ssh-key:
# ssh-keygen -t rsa -C "xxx@hand-china.com"
-
拷贝 id_rsa.pub 的SSH-Key 到 git
Maven
-
准备maven
下载:# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
解压:# tar -zxvf apache-maven-3.3.9-bin.tar.gz
移动到/usr/local:# mv apache-maven-3.3.9 /usr/local/maven3
-
添加环境变量:
# vim /etc/profile
,在最后添加如下两行export MAVEN_HOME=/usr/local/maven3 export PATH=$MAVEN_HOME/bin:$PATH
-
保存退出后输入命令使配置生效:
# source /etc/profile
-
检验是否安装成功:
# mvn -v
数据服务安装
安装清单
组件 | 描述 | 版本 |
---|---|---|
Redis | 缓存数据库 | 4.0.2 |
Mysql | 数据库 | 5.7.17 |
Minio | 对象存储服务 | RELEASE.2018-05-25T19-49-13Z |
-
创建数据目录:
# mkdir -p /hzero/data-server/redis/data # mkdir -p /hzero/data-server/mysql/{mysql_cnf,mysql_data}
Redis
-
拉取镜像:
# docker pull redis
-
启动容器:
# docker run -d -p 6379:6379 --name redis -v /hzero/data-server/redis/data:/data redis
MySql
-
拉取镜像:
# docker pull registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql:5.7.17
-
数据库配置
设置数据库表名不区分大小写,在/hzero/data-server/mysql/mysql_cnf
下新建my.cnf
文件,增加lower_case_table_names=1
,其它配置可自行根据需求添加。[mysqld] lower_case_table_names=l max_connections=1000
-
启动容器:
# docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -v /hzero/data-server/mysql/mysql_data/:/var/lib/mysql/:rw -v /hzero/data-server/mysql/mysql_cnf:/etc/mysql/:rw --privileged=true 954
-
创建用户:
create user 'hzero'@'%' identified by 'hzero'; flush privileges;
Minio
部署了文件服务且使用 Minio 的存储方式可安装 Minio。
- 拉取镜像:
# docker pull minio/minio:RELEASE.2018-05-25T19-49-13Z
- 启动容器,端口 9000:
# docker run -d -p 9000:9000 --name minio -v /hzero/data-server/minio/data:/data -v /hzero/data-server/minio/config:/root/.minio 324b server /data
- 获取用户名和密钥:
# docker logs minio
域名映射
程序中基于域名映射各个服务器IP地址,因此需要在服务器和本地开发环境 hosts
文件中配置域名映射
192.168.xx.xxx db.hzero.org
192.168.xx.xxx redis.hzero.org
192.168.xx.xxx dev.hzero.org
Jenkins 安装配置
-
拉取镜像:
# docker pull jenkins/jenkins:latest
-
启动容器,端口 9090:
# docker run -d --name jenkins -p 9090:8080 -p 50000:50000 -v /hzero/data-server/jenkins:/home/jenkins_home --privileged=true jenkins/jenkins
-
获取初始密码:
# docker logs jenkins
-
访问 ip:9090 进入 jenkins 配置
-
安装插件
-
设置用户
-
安装
Publish Over SSH
和SSH
插件,用于连接各个服务 -
创建软链:Jenkins 通过shell脚本调用 java、mvn 等命令的时候,是从 /usr/bin 文件夹中找命令的,这个时候需要做个软链接
ln -s /usr/local/maven3/bin/mvn /usr/bin/mvn ln -s /usr/local/jdk1.8.0_172/bin/jps /usr/bin/jps ln -s /usr/local/jdk1.8.0_172/bin/java /usr/bin/java ln -s /usr/local/jdk1.8.0_172/bin/javac /usr/bin/javac
表及数据初始化
hzero-resource
表结构及初始数据在 hzero-resource 项目下,请自行下载,并切换到对应版本分支上进行安装。
- groovy:表结构 groovy 脚本,提供了每个服务的表结构
- init-data:初始化数据,按服务划分基础数据
- tool-jar:执行初始化安装的工具
- database-init.sh:交互式执行初始化的脚本
运行安装工具
-
hzero-resource 下提供了交互式脚本启动安装工具。
- 在根目录下打开 bash 窗口,运行 database-init.sh 脚本
- 按步骤选择安装的数据库类型、数据库连接信息、项目版本
- 在浏览器中打开输出的地址
-
安装页面
- 安装页面展示了当前版本及可以安装的服务和对应的数据,服务后显示的是对应的数据库schema。
- 首先更新数据库,选择要更新的服务,再点击
更新数据库
即可,如果数据库不存在对应的 schema,会自动创建。 - 数据库更新成功后,选择要更新的数据,再点击
导入数据
即可。
-
Schema不一致处理
如果数据库 schema 名称与标准的不一致,可以修改
docs/mapping/service-mapping.xml
文件中的映射关系- name: 服务名称
- filename: 标准schema名称
- schema: 实际schema名称,如果更改了名称,可修改此属性
<service name="hzero-platform" filename="hzero_platform" schema="hzero_platform" description="平台服务"/>
-
注意:如果是合到一个库中,需手动执行如下SQL删除数据权限中的表前缀数据,避免跨库查询。
DELETE FROM HPFM_PERMISSION_RULE WHERE RULE_TYPE_CODE = 'PREFIX'; DELETE FROM HPFM_PERMISSION_REL R WHERE NOT EXISTS (SELECT 1 FROM HPFM_PERMISSION_RULE WHERE R.RULE_ID = RULE_ID);
默认登录用户
hzero-iam 的数据初始化好之后,默认的用户名密码为 [admin/Admin@123],可使用此用户密码登陆系统。安装完成后建议立即在个人中心修改默认密码。
服务初始化
服务初始化前,请先确定项目或产品是使用SaaS版还是OP版,SaaS 版本支持多租户,OP版本没有租户概念。
接下来将通过服务选配平台快速创建HZERO依赖服务。
批量创建HZERO服务
-
所有服务的父项目都应该是自建的父项目,批量创建时,选择自定义父项目,并输入父项目坐标,会自动创建父项目
-
配置中心、注册中心、项目类型按实际情况选择,新服务前缀一般为项目简称
-
HZERO 服务至少包含必选的基础服务,基础服务列表可参考服务列表中平台基础服务部分
-
创建完成的服务
父项目
-
父项目(hcbm-parent)定义了 HZERO 的版本,通过更改parent版本快速升级所有服务,并且可在
dependencyManagement
中定义具体依赖的版本,例如某些服务或组件升级小版本,定义后所有的服务就会自动升级。也可以加入一些自定义的组件或三方依赖,便于统一管理版本。 -
需自行申请或搭建可用的 maven 私服,并修改pom中的仓库地址,便于发布服务到仓库。
新服务
- 创建项目的新服务,父项目同样选择自定义的父项目
- 输入服务的坐标,组件至少包含基础定义组件和平台客户端组件
- 输入服务的基础信息,服务名默认和 ArtifactID 一致;设置服务简码、路由等信息
加入Git管理
-
服务创建完成后,需将服务加入到 Gitlab 中进行管理
cd hcbm-register git init git remote add origin git@xxxxxx:contract/hcbm-register.git git add . git commit -m "Initial commit" git push -u origin master
部署后端服务
后端服务主要包括基础服务和平台通用服务,因为服务间有依赖,服务需按一定顺序安装,可根据下面的列表按装HZERO平台必备服务。
服务 | 简码 | 默认端口 | 描述 |
---|---|---|---|
hzero-register | HREG | 8000 | 注册中心 |
hzero-gateway | HGWY | 8080 | 网关服务 |
hzero-oauth | HOTH | 8020 | 认证服务 |
hzero-iam | HIAM | 8030 | IAM服务 |
hzero-platform | HPFM | 8100 | 平台服务 |
hzero-swagger | HSWG | 8050 | Swagger测试服务(开发环境可装) |
hzero-config | HCFG | 8010 | 配置服务(可换成其它配置中心) |
hzero-admin | HADM | 8060 | 平台治理服务 |
Note: hzero-admin服务应在hzero-iam、(可选)hzero-swagger服务启动成功后启动
下面以注册中心为例,利用jenkins启动服务(注意拉取自己创建服务的源码)。
-
以SSH方式拉取项目源码:
# git clone git@xxxx/hcbm-register.git
-
下载 run.sh 脚本放到 hcbm-register 根目录下
-
修改 run.sh,
MPORT
为配置文件中management.port
的端口。该脚本会拉取最新代码、打包、停止原服务、启动新服务。 -
设置 run.sh 可执行:
# chmod +x run.sh
-
Jenkins 添加 SSH 服务器:在系统管理>系统配置下,用于连接部署的服务器
-
创建项目
-
基础配置
-
增加构建配置
-
构建并启动服务
-
服务都部署成功后,可以查看注册中心上的服务是否都注册成功
注册中心地址:
http://dev.hzero.org:8000
-
访问 swagger 页面,测试API是否可用
-
Swagger地址:
http://dev.hzero.org:8080/swagger/swagger-ui.html
-
查看服务列表:
- 例如以IAM服务的API进行测试,首先需要授权,默认会跳转到 oauth 登录页面进行登录授权。之后便可访问API测试。
-
版本升级
小版本升级
-
HZERO小版本升级会递增修订版本号,版本以 hzero-parent 为准
-
升级时可修改父项目中 hzero-parent 的版本号即可
-
如果只想升级某些组件,可在 dependencyManagement 中定义组件的版本
-
小版本升级正常情况下无需升级脚本和数据,只做兼容性的问题修复和新服务的预发布
-
小版本升级会发布版本更新文档,可通过版本更新文档查看此次修复了哪些内容
大版本升级
-
HZERO大版本升级会递增次版本号或主版本号,版本以 hzero-parent 为准
-
大版本升级时会发布版本更新文档,可通过版本更新文档查看此版本新增、优化或修复了哪些功能,以及新发布的服务、组件等
-
大版本升级时会发布升级文档,高版本基本会兼容低版本,也通常会伴随着表结构和数据的升级,可按照升级文档逐步升级服务
部署前端
-
请确保如下环境变量已配置完成
-
node.js: v10.x or v8.x(>= v8.10)
关于node.js请参考: https://nodejs.org/en/
-
内存:
-
开发者模式运行内存: >4GB
-
生产环境编译运行内存: >4GB
-
yarn: 推荐使用yarn管理本项目
执行如下命令全局安装yarn:
$ npm install --global yarn
关于
yarn
请参考 https://yarnpkg.com -
lerna: 用于管理具有多个
package
的JavaScript
项目的工具。A tool for managing JavaScript projects with multiple packages.
执行如下命令全局安装:
$ npm install --global lerna
关于
lerna
请参考https://lernajs.io/请注意安装完lerna,在linux服务器可能需要执行如下命令,才能使lerna生效
ln -s /usr/local/node-v10.15.0/bin/yarn /usr/local/bin/yarn ln -s /usr/local/node-v10.15.0/bin/lerna /usr/local/bin/lerna
-
-
前端工程创建及部署请参考:前端开发部署