天天看点

tars 快速安装手册与手动安装梳理

tars 小白安装必成手册

最近开始了解和学习 ​​TarsCloud/Tars​​,如果可能的话,准备在实践中使用。 官方文档虽然内容不少,但是对于初学者来说似乎缺乏系统的指导,导致不少像我这样的菜鸟小白四处碰壁, 起步过程充满了挫折。

这里把本人在开始安装试用过程中遇到的问题以及解决的办法做个记录,主要是自己备忘, 同时也希望能帮到有需要的朋友。

知识准备

需要对 CentOS 系统有一定的使用经验,至少像 yum 安装软件包、ifconfig 查看网卡名称、sed 修改文本文件内容 这些要知道如何操作。我们对 tars 是小白,但对于 Linux 系统的日常操作不完全是小白,对吧?

另外,对 tars 的几个概念要有所了解,比如对下面这几个词,都要给自己提一个问题:什么是 XX?XX 有什么用? 如果暂时不是特别清楚的话,就带着这些问题做后面的实验。

基础服务, 核心基础服务, web管理系统, 服务模板, 服务发布      

系统环境准备

本文使用的是 ​​VirtualBox​​ + ​​CentOS 7​​, 网络连接方式设置为桥接网卡,虚拟机系统就像局域网上一台单独的电脑一样,可以通过 IP 地址跟宿主系统互相访问。

小白上手,最重要的是成功一次,建立信心。为了避免环境差异产生的各种障碍,建议你先建立一套与本文相同的系统环境。 实验成功之后,你对 tars 的安装和运行都有了一个初步的感性认识,然后就可以在你实际使用的目标环境中着手构建安装了, 如果再遇到什么问题的话,至少你还有一个成功环境可以用来参考对比。

关于如何安全地使用 Linux 系统不是本文的议题。为了减少不必要的干扰,操作系统安装好之后,请检查并 ​​关闭 SELinux​​,​​关闭 firewalld​​。 以下所有操作都以 root 帐号来完成。

软件环境准备

# 安装编译环境(用于编译 tars 基础服务)
yum install gcc gcc-c++ cmake yasm glibc-devel flex bison ncurses-devel zlib-devel autoconf python-requests

# 安装 mysql client 依赖项(用于编译 tars 基础服务和执行 mysql 命令)
yum install mariadb mariadb-devel mariadb-libs

# 安装 nodejs 和 npm(用于安装运行 web 管理系统)
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum install nodejs

# 安装 docker(选项:用于 docker 方式启动 mysql server)
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
yum install docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
systemctl enable docker
systemctl start docker

# 设置环境变量(这里的 IP 地址和网卡名称是 CentOS 7 系统中的实际值,【请根据实际情况修改】)
export MY_TARS_IP=192.168.1.140
export MY_MYSQL_IP=192.168.1.140
export MY_MYSQL_ROOT_PASSWORD=password
export MY_NIC_NAME=enp0s3      

注:如果喜欢用 docker 方式运行 tars 框架,可以从这里直接跳到 ​​基于 docker 运行 tars 框架​​。

安装 mysql 数据库服务

使用 CentOS 7 自带的 mariadb

# 安装并启动 mariadb (使用上等同于 mysql)
yum install mariadb-server
systemctl enable mariadb
systemctl start mariadb

# mysql server 初始化安全设置(root 密码设置为 password)
mysql_secure_installation      

注:CentOS 7 自带的 mariadb 只能更新到 5.5.59-MariaDB-38.11,而 ​​TarsCloud/TarsWeb​​​ 提供的用户体系模块(​​demo​​)需要数据库版本不低于 5.6.5, 建议使用 docker 方式启动 mysql server。

使用 docker 启动 mysql server

参考资料:​​docker​​​ ​​mysql​​

mkdir -p /var/run/mysqld
chmod 777 /var/run/mysqld
docker run --name tars-mysqld --detach \
  --publish=3306:3306 \
  -v /var/run/mysqld:/var/run/mysqld \
  -e MYSQL_ROOT_PASSWORD=${MY_MYSQL_ROOT_PASSWORD} \
  mysql:5.7
echo "socket=/var/run/mysqld/mysqld.sock" >> /etc/my.cnf.d/client.cnf      

【坑】tars 的安装脚本(包括快速部署用的 py 程序)在调用 mysql 命令访问数据库的时候,都没有指定 --host 参数, 如果这种方式不能正确连接到 mysql server 的话,安装过程将会失败。所以一般来说本机直接安装的 mysql server 还好办, 如果是运行在另外一台服务器上,或者用 docker 启动 mysql server 的话,就会有一点麻烦。上面用 docker 启动 mysql server 容器的时候做的一些额外设置就是为了避免这个问题。

下载 Tars 源代码

注:如果你的电脑无法直接访问 github,请​​设置适当的代理服务器​​。

# 下载全部源代码
mkdir /data
cd /data
git clone https://github.com/TarsCloud/Tars.git --recursive

# 调整与 mysql clent 依赖项安装位置相关的文件内容
# 本系统环境中 mariadb(mysql) 的安装位置跟 tars 源代码中预期的不一样,需调整。
cd /data/Tars
sed -i "s@/usr/local/mysql/include@/usr/include/mysql@g" framework/CMakeLists.txt
sed -i "s@/usr/local/mysql/lib@/usr/lib64/mysql@g"       framework/CMakeLists.txt
sed -i "s@/usr/local/mysql/include@/usr/include/mysql@g" framework/tarscpp/CMakeLists.txt
sed -i "s@/usr/local/mysql/lib@/usr/lib64/mysql@g"       framework/tarscpp/CMakeLists.txt

# 调整 mysql client 为动态连接
# 【坑】本系统环境中 mariadb(mysql) 没有提供静态连接库,需改为动态连接。
# 官方文档推荐使用静态连接,以避免可执行程序对运行环境的依赖,本实验仅限于单机,不受影响。
sed -i "s/libmysqlclient.a/libmysqlclient.so/g" cpp/test_deprecated/testUtil/CMakeLists.txt
sed -i "s/libmysqlclient.a/libmysqlclient.so/g" framework/CMakeLists.txt
sed -i "s/libmysqlclient.a/libmysqlclient.so/g" framework/tarscpp/test/testUtil/CMakeLists.txt

# 【坑】这里明显是一处笔误,后果就是使用 tars.springboot 服务模板将导致部署失败。
sed -i "s/<<server>/<server>/g" framework/sql/db_tars.sql

# 【坑】web 管理系统中有一处 BUG,将导致“接口测试”功能总是报错。
sed -i "s/setName ? setName : '')/setName ? setName : '', {})/g" web/app/service/infTest/TarsClient.js      

源代码都准备好之后,接下来你可以选择【快速部署】或者是【手工编译部署】。

如果你想两种方式都实验一下,那现在就可以在 VirtualBox 里做个系统快照了。

快速部署

官方文档:​​快速部署​​

# 调整网卡名相关的文件内容
# 【坑】tars 源代码预期网卡名为 eth0,与本系统环境的实际情况不符,需调整。
cd /data/Tars/deploy
sed -i "s/eth0/${MY_NIC_NAME}/g" comm/tarsUtil.py

# 【坑】调整数据库密码相关的文件内容
sed -i "s/tars12345/${MY_MYSQL_ROOT_PASSWORD}/g" comm.properties

# 全自动部署
python ./deploy.py all      

执行上面命令的过程时间比较长,期间陆续会看到下面这些输出:

pullFramework start ...
pullFramework success
pullWeb start ...
pullWeb success
build start ...
build sucess
initDB start ...
initDB success
deploy frameServer start ...
deploy frameServer success
deploy web start ...
install nvm start...
install nvm success
deploy web success
test fail,tarsweb cannot visit
tarweb cannot visit      

【坑】如果哪一步卡了很长时间没有动静,那很可能是因为网络原因卡死了。比如 install nvm 过程中会调用 wget 访问 ​​https://raw.githubusercontent.com/​​​ ,不行的话只能​​自己想办法​​了。 有时候重试一次也许管用(这时候你需要回滚到之前在 VirtualBox 做的系统快照重新开始,不要简单地重新运行 deploy.py,那样会有副作用)。

最末两行输出的内容貌似报错,但可以不用管它,已经安装好了。

最终的安装位置在:

# 基础服务的安装位置
/usr/local/app/tars

# 基础服务的日志文件位置
/usr/local/app/tars/app_log/tars

# web 管理系统的安装位置
/usr/local/app/web

# web 管理系统的日志文件位置
/usr/local/app/web/log      

web 管理系统访问网址:

http://192.168.1.140:3000      

【坑】此时 web 管理系统中的大部分功能都是工作正常的,只是访问“服务监控”功能的时候会报错“错误: 系统内部错误”。 这应该是系统的一个 BUG,不必在意。因为没有相关的监控数据才报错,第二天就会自愈了。

查看 tars 服务进程:

ps -ef | grep tars/      

手动安装(​​Tars 手动搭建-填掉官方 Guide 的坑​​)

注:

1.可能是原文发布时间原因,在此基础上tars目录有变化,因此以上修改过sed操作替换路径。当然后续tars目录可能继续变化因此读者在安装过程中,可能也得修改sed操作替换路径。

2.脚本快速安装,貌似没有安装"C++开发环境安装",这个编译服务的时候会报错,这个需要自己另行安装(​​详细安装过程​​)。

#开启tars基础服务
./tars_install.sh
./tarspatch/util/init.sh

#开启tars web 服务
npm run prd