天天看點

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