介绍
本地安装方式一般用于搭建开发环境,在服务器上部署好基础服务后,开发人员在本地只需关注自己的服务,进行API测试。本文将在一台空的 CentOS 7.2
的机器上一步步安装为例介绍本地安装方式,有些步骤根据情况跳过即可。本地安装可可以参考培训视频 培训资料 中 HZERO安装部署
部分。
基础环境安装
安装清单
组件 | 描述 | 版本 |
---|---|---|
JDK | Java运行环境 | 1.8.0_172 |
Nginx | 前端代理 | 1.8.1 |
Node | JavaScript 运行环境 | 10.15.0 |
Docker | 应用容器引擎 | 18.09.0 |
Docker-Compose | Docker容器编排 | 1.23.2 |
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
Docker-Compose
- 安装epel-release依赖:
# yum -y install epel-release
- 安装python-pip:
# yum -y install python-pip
- 升级pip组件:
# pip install --upgrade pip
- 检查pip环境:
# pip -V
- 安装docker-compose:
# pip install docker-compose
- 检查安装是否成功:
# docker-compose -version
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 |
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_db.cnf
下新建my.cnf
文件,增加lower_case_table_names=1
,其它配置可自行根据需求添加。 -
启动容器:
# 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_db.cnf:/etc/mysql/:rw --privileged=true 954
-
创建用户:
create user 'hzero'@'%' identified by 'hzero'; flush privileges;
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
-
获取初始密码:
# 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
表及数据初始化
初次使用
如果是初始化项目,请先创建相应的数据库,接着进行表结构及数据初始化。如:
CREATE DATABASE hzero_platform DEFAULT CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON hzero_platform.* TO hzero@'%';
FLUSH PRIVILEGES;
hzero-resource
表结构及初始化数据在 hzero-resource 项目下。
- groovy:表结构 groovy 脚本
- init-data:初始化数据
- tool-jar:执行初始化的工具
- database-init.sh:执行初始化的脚本
database-init.sh
- 脚本内容如下
#!/usr/bin/env bash
mkdir -p tool-jar
if [ ! -f tool-jar/hzero-tool-liquibase.jar ]
then
curl http://nexus.saas.hand-china.com/content/repositories/Hzero-Release/org/hzero/tool/liquibase-tool/1.0.0.RELEASE/liquibase-tool-1.0.0.RELEASE.jar -o ./tool-jar/hzero-tool-liquibase.jar
fi
# 指定更新的服务,用下划线分隔
service=hzero_platform
# 更新的 schema
schema=$service
# 更新的目录,Groovy 脚本在 groovy 目录下,Excel 期初数据在 init-data 目录下
dir=init-data/$service/
java -Dspring.datasource.url="jdbc:mysql://db.hzero.org:3306/$schema?useUnicode=true&characterEncoding=utf-8&useSSL=false" \
-Dspring.datasource.username=hzero \
-Dspring.datasource.password=hzero \
-Ddata.drop=false \
-Ddata.init=true \
-Ddata.dir=$dir \
-Ddata.update.exclusion=iam_role \
-Dlogging.level.root=info \
-jar tool-jar/hzero-tool-liquibase.jar
-
需要替换以下配置
spring.datasource.url
:数据库连接URLspring.datasource.username
:数据库名称spring.datasource.password
:数据库密码data.update.exclusion
:排除数据更新的表或列service
:要初始化或升级的服务,不同的服务需更改此处执行dir
:要初始化或升级的脚本路径,不同的数据库需更改此处执行
默认登录用户
hzero-iam 的数据初始化好之后,默认的用户名密码为 [admin/Admin@123],可使用此用户密码登陆系统。
数据处理
在 部署后端服务 完成后,需调用IAM服务的初始化接口进行一些初始化操作。
- 调用 data-init-controller
[GET /v1/init/super-role-permission-sets]
将权限集分别分配到平台超级管理员和租户超级管理员上。
服务初始化
-
正常情况下依赖于 hzero 的服务进行开发,hzero 服务发新版之后可自行决定是否升级服务。注:所有HZERO服务及组件在发布时都会统一升级一个版本,升级服务时可定一个稳定版本即可。
-
以 hzero-gateway 服务为例,首先创建一个空的工程,一般以产品或编码为前缀命名,如 demo-gateway。
-
修改
pom.xml
,可以 hzero-parent 为父 pom,也可自行建一个所属产品或项目的顶级 parent 项目进行统一版本管理,接着引入依赖的服务。引用服务坐标时,可在服务清单下找到服务的坐标,SaaS 版本的 artifactId 是以 -saas 结尾的,请注意区分。
<parent> <groupId>org.hzero</groupId> <artifactId>hzero-parent</artifactId> <version>1.0.0.RELEASE</version> </parent> <dependencies> <!-- hzero-gateway --> <dependency> <groupId>org.hzero</groupId> <artifactId>hzero-gateway</artifactId> </dependency> <!-- eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- config-client --> <dependency> <groupId>io.choerodon</groupId> <artifactId>choerodon-starter-config-client</artifactId> </dependency> <!-- mysql --> <dependency> <artifactId>mysql-connector-java</artifactId> <groupId>mysql</groupId> </dependency> </dependencies>
-
第一次使用需在 pom 中加入HZERO的Maven仓库地址:
<repositories> <repository> <id>HandPublic</id> <name>Hand-Public Repository</name> <url>http://nexus.saas.hand-china.com/content/repositories/public/</url> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>HzeroRelease</id> <name>Hzero-Release Repository</name> <url>http://nexus.saas.hand-china.com/content/repositories/Hzero-Release/</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>HzeroSnapshot</id> <name>Hzero-Snapshot Repository</name> <url>http://nexus.saas.hand-china.com/content/repositories/Hzero-Snapshot/</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
-
从依赖包中复制出配置文件到
resources/
目录下,主要修改 application.yml 中的一些配置即可。 -
修改启动类,加入对应的
@EnableHZeroXxx
注解,会自动扫描依赖服务的包。 -
添加客户端依赖
需自行根据使用的注册中心、配置中心、数据库驱动不同,加入相应的依赖,具体的依赖或配置请参考 客户端依赖
-
之后就可以运行服务测试了。
部署后端服务
后端服务主要包括基础服务和平台通用服务,因为服务间有依赖,服务需按一定顺序安装,可根据下面的列表按装HZero平台必备服务。每个服务可按 服务初始化 中的流程创建自己产品或项目的服务。
服务 | 简码 | 默认端口 | 描述 |
---|---|---|---|
hzero-register | HREG | 8000 | 注册中心 |
hzero-config | HCFG | 8010 | 配置服务 |
hzero-gateway | HGWY | 8080 | 网关服务 |
hzero-oauth | HOTH | 8020 | 认证服务 |
hzero-iam | HIAM | 8030 | IAM服务 |
hzero-swagger | HSWG | 8050 | Swagger测试服务(开发环境可装) |
hzero-platform | HPFM | 8100 | 平台服务 |
下面以注册中心为例,利用jenkins启动服务(注意拉取自己创建服务的源码)。
-
以SSH方式拉取项目源码:
# git clone git@xxxx/demo-register.git
-
下载 run.sh 脚本放到 hzero-register 根目录下
-
修改 run.sh,将
JAR
设置为服务名,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
查看服务列表:
例如找平台服务的API进行测试,首先需要授权,默认会跳转到 oauth 登录页面进行登录授权。之后便可访问API测试。
部署前端
-
请确保如下环境变量已配置完成
-
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
-
-
前端工程创建及部署请参考:前端开发部署