天天看點

騰訊TARS架構安裝腳本騰訊TARS架構安裝腳本

騰訊TARS架構安裝腳本

  • 騰訊TARS架構安裝腳本
    • 依賴環境的安裝
    • JDK的安裝
    • TARS架構編譯
    • TARS資料庫初始化
    • TARS核心服務安裝
    • TarsWeb管理平台安裝
    • TARS架構安裝總控腳本

騰訊TARS架構安裝腳本

本文主要記錄騰訊TARS架構安裝的腳本,目前時間為2019-03-27,如果騰訊的TARS架構的源碼做了結構上或者大的改動,腳本可能需要适當修改。

依賴環境的安裝

software_install.sh

#!/bin/bash

echo "========DEPENDENCE SOFTWARE INSTALL START=========="

# 安裝軟體源,為了後續軟體的成功安裝,特别是mysql-server、mysql-devel
yum -y install https://repo.mysql.com/mysql-community-release-el7-7.noarch.rpm
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 安裝管理repository及擴充包的工具
yum -y install yum-utils
# 安裝依賴的軟體
yum -y install gcc gcc-c++
yum -y install git
yum -y install cmake
yum -y install flex
yum -y install bison
yum -y install glibc-devel
yum -y install ncurses-devel
yum -y install zlib-devel
yum -y install mysql-server mysql-devel
# expect不是安裝tars必要的工具,本地mysql初始化時需要
yum -y install expect

# 清除已安裝的rpm
yum clean all && rm -rf /var/cache/yum

echo "========DEPENDENCE SOFTWARE INSTALL END=========="
           

JDK的安裝

運作tars-java需要依賴JDK,此處我已經将一個固定版本的JDK放在了git上

jdk_install.sh

#!/bin/bash

echo "========START INSTALL JDK=========="

# 擷取傳入的GIT賬戶使用者名密碼
GitUser=$1
GitPass=$2

echo "删除原有的JDK環境變量和包"

# 删除原有的JDK環境變量
sed -i '/JAVA_HOME/d' /etc/profile
# 删除原有的JDK安裝包
rm -rf /usr/JDK

echo "從GIT下載下傳安裝JDK,并設定環境變量"

# 從GIT下載下傳JDK
cd /usr
git clone https://${GitUser}:${GitPass}@git.xxxx.xxx.xxx.git
cd JDK
tar zxvf jdk-8u191-linux-x64.tar.gz
rm -rf jdk-8u191-linux-x64.tar.gz

# 設定JDK環境變量
echo "export JAVA_HOME=/usr/JDK/jdk1.8.0_191" >> /etc/profile
echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile

# 重新整理環境變量
source /etc/profile

echo "========END INSTALL JDK=========="
           

TARS架構編譯

framework_install.sh

#!/bin/bash

echo "========FRAMEWORK INSTALL START=========="

echo "固定mysql的頭檔案和開發庫"

# 連接配接mysql的頭檔案和庫到固定的目錄,用于tars編譯
mkdir -p /usr/local/mysql
ln -s /usr/lib64/mysql /usr/local/mysql/lib
ln -s /usr/include/mysql /usr/local/mysql/include
# 確定mysql的動态庫能夠被系統加載
echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf && ldconfig

echo "TarsFramework源碼下載下傳"

# TarsFramework源碼下載下傳
cd /root
git clone https://github.com/TarsCloud/TarsFramework.git

echo "TarsFramework編譯"

# 編譯TarsFramework
cd TarsFramework/build
chmod u+x build.sh
./build.sh prepare
./build.sh all

echo "TarsFramework安裝"

# 安裝TarsFramework(C++開發環境也在上面)
mkdir -p /usr/local/tars
./build.sh install

echo "Tars基礎服務打包"

# 架構核心基礎服務打包
make framework-tar

# 架構普通基礎服務打包
make tarsstat-tar
make tarsnotify-tar
make tarsproperty-tar
make tarslog-tar
make tarsquerystat-tar
make tarsqueryproperty-tar

echo "========FRAMEWORK INSTALL END=========="
           

TARS資料庫初始化

setup_database.sh

本地MySQL版

# 資料庫初始化必要的參數
DBIP=$1
DBPort=$2
DBUser=$3
DBPassword=$4
DBTarsPass=$5

MachineIp=$(ip addr | grep inet | grep eth0 | awk '{print $2;}' | sed 's|/.*$||')
MachineName=$(hostname)

echo "啟動mysql服務,初始化root使用者密碼,授權root@%使用者"

# 啟動mysql服務
systemctl enable mysqld
systemctl start mysqld

# 初始化root使用者密碼初始化
/usr/bin/expect << EOF
set timeout 30
spawn mysql_secure_installation
expect {
    "enter for none" { send "\r"; exp_continue}
    "Y/n" { send "Y\r" ; exp_continue}
    "password:" { send "$DBPassword\r"; exp_continue}
    "new password:" { send "$DBPassword\r"; exp_continue}
    "Y/n" { send "Y\r" ; exp_continue}
    eof { exit }
}
EOF

# mysql資料庫添加"root@%"使用者,并授權,否則在騰訊雲上連接配接本地mysql資料庫的時候指定-h為非localhost都無法連接配接
mysql -hlocalhost -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant all on *.* to 'root'@'%' identified by '${DBPassword}' with grant option;"
mysql -hlocalhost -P${DBPort} -u${DBUser} -p${DBPassword} -e "flush privileges;"

echo "mysql資料庫授權tars相關使用者"

# mysql資料庫添加tars相關使用者,并授權
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant all on *.* to 'tars'@'%' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant all on *.* to 'tars'@'localhost' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant all on *.* to 'tars'@'${MachineName}' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant all on *.* to 'tars'@'${MachineIp}' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "flush privileges;"

echo "替換資料庫操作檔案的必要參數"

# 資料庫操作檔案修改
cd /root/TarsFramework/sql
sed -i "s/192.168.2.131/${MachineIp}/g" `grep 192.168.2.131 -rl ./*`
sed -i "s/db.tars.com/${DBIP}/g" `grep db.tars.com -rl ./*`
sed -i "s/tars2015/${DBTarsPass}/g" `grep tars2015 -rl ./*`
sed -i "s/3306/${DBPort}/g" `grep 3306 -rl ./*`

sed -i "s/[email protected]/h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} /g" `grep [email protected] -rl ./exec-sql.sh`

echo "初始化資料庫"

# 執行資料庫初始化語句
chmod u+x exec-sql.sh
./exec-sql.sh

echo "========DATABASE INIT END=========="
           

騰訊雲MySQL版

#!/bin/bash

echo "========DATABASE INIT START=========="

# 資料庫初始化必要的參數
DBIP=$1
DBPort=$2
DBUser=$3
DBPassword=$4
DBTarsPass=$5

MachineIp=$(ip addr | grep inet | grep eth0 | awk '{print $2;}' | sed 's|/.*$||')
MachineName=$(hostname)

echo "mysql資料庫授權tars相關使用者"

# 使用雲資料庫,必須保證資料庫可以遠端連接配接,騰訊的mysql雲資料庫,不能賦予所有權限,需要注意
# mysql資料庫添加tars相關使用者,并授權
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,PROCESS,REFERENCES,INDEX,ALTER,SHOW DATABASES,CREATE TEMPORARY TABLES,LOCK TABLES,EXECUTE,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EVENT,TRIGGER on *.* to 'tars'@'%' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,PROCESS,REFERENCES,INDEX,ALTER,SHOW DATABASES,CREATE TEMPORARY TABLES,LOCK TABLES,EXECUTE,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EVENT,TRIGGER on *.* to 'tars'@'localhost' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,PROCESS,REFERENCES,INDEX,ALTER,SHOW DATABASES,CREATE TEMPORARY TABLES,LOCK TABLES,EXECUTE,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EVENT,TRIGGER on *.* to 'tars'@'${MachineName}' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,PROCESS,REFERENCES,INDEX,ALTER,SHOW DATABASES,CREATE TEMPORARY TABLES,LOCK TABLES,EXECUTE,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EVENT,TRIGGER on *.* to 'tars'@'${MachineIp}' identified by '${DBTarsPass}' with grant option;"
mysql -h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} -e "flush privileges;"

echo "替換資料庫操作檔案的必要參數"

# 資料庫操作檔案修改
cd /root/TarsFramework/sql
sed -i "s/192.168.2.131/${MachineIp}/g" `grep 192.168.2.131 -rl ./*`
sed -i "s/db.tars.com/${DBIP}/g" `grep db.tars.com -rl ./*`
sed -i "s/tars2015/${DBTarsPass}/g" `grep tars2015 -rl ./*`
sed -i "s/3306/${DBPort}/g" `grep 3306 -rl ./*`

sed -i "s/[email protected]/h${DBIP} -P${DBPort} -u${DBUser} -p${DBPassword} /g" `grep [email protected] -rl ./exec-sql.sh`

echo "初始化資料庫"

# 執行資料庫初始化語句
chmod u+x exec-sql.sh
./exec-sql.sh

echo "========DATABASE INIT END=========="
           

TARS核心服務安裝

tars_service_install.sh

#!/bin/bash

echo "========TARS BASIC SERVICE INSTALL START=========="

# 腳本必要的幾個參數
DBIP=$1
DBPort=$2
DBUser=$3
DBPassword=$4
DBTarsPass=$5

MachineIp=$(ip addr | grep inet | grep eth0 | awk '{print $2;}' | sed 's|/.*$||')

echo "解壓核心基礎服務包"

# 建立服務安裝目錄,拷貝核心基礎服務包,并解壓
mkdir -p /usr/local/app/tars
cp -f /root/TarsFramework/build/framework.tgz /usr/local/app/tars/
cd /usr/local/app/tars
tar xzfv framework.tgz
rm -rf framework.tgz

echo "修改資料庫操作必要參數"

# 修改config檔案以及其他檔案中,相關的資料庫以及主要位址等參數
sed -i "s/dbhost.*=.*192.168.2.131/dbhost=${DBIP}/g" `grep dbhost -rl ./*`
sed -i "s/192.168.2.131/${MachineIp}/g" `grep 192.168.2.131 -rl ./*`
sed -i "s/db.tars.com/${DBIP}/g" `grep db.tars.com -rl ./*`
sed -i "s/dbport.*=.*3306/dbport=${DBPort}/g" `grep dbport -rl ./*`
sed -i "s/registry.tars.com/${MachineIp}/g" `grep registry.tars.com -rl ./*`
sed -i "s/web.tars.com/${MachineIp}/g" `grep web.tars.com -rl ./*`
sed -i "s/tars2015/${DBTarsPass}/g" `grep tars2015 -rl ./*`

echo "啟動Tars架構核心基礎服務"

# 啟動tars架構服務
chmod u+x tars_install.sh
./tars_install.sh
tarspatch/util/init.sh

# crontab裡面配置tarsnodede的監控,避免不小心挂了以後會啟動
echo "* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh" >> /etc/crontab

echo "========TARS BASIC SERVICE INSTALL END=========="
           

TarsWeb管理平台安裝

web_mgr_install.sh

#!/bin/bash

echo "========START INSTALL WEB MANAGEMENT=========="

DBIP=$1
DBPort=$2
DBTarsPass=$3

MachineIp=$(ip addr | grep inet | grep eth0 | awk '{print $2;}' | sed 's|/.*$||')

# web管理系統開發環境安裝
cd /root
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
source ~/.bashrc
nvm install v8.11.3
npm install -g pm2 --registry=https://registry.npm.taobao.org

# TarsWeb源碼下載下傳
git clone https://github.com/TarsCloud/TarsWeb.git

# 修改TarsWeb配置檔案中的必要參數
cd TarsWeb
sed -i "s/db.tars.com/${DBIP}/g" config/webConf.js
sed -i "s/registry.tars.com/${MachineIp}/g" config/tars.conf
sed -i "s/3306/${DBPort}/g" config/webConf.js
sed -i "s/tars2015/${DBTarsPass}/g" config/webConf.js

# 安裝web管理頁面依賴,啟動web
npm install --registry=https://registry.npm.taobao.org
npm run prd

# 建立日志目錄(這一步暫時沒用。TarsWeb的日志還是在TarWeb源碼目錄的log目錄下)
mkdir -p /data/log/tars

echo "========END INSTALL WEB MANAGEMENT=========="
           

TARS架構安裝總控腳本

tars_install.sh

#!/bin/bash

# 資料庫位址(理論上來說使用127.0.0.1也行,建議使用内網位址)
DBIP="xxx.xxx.xxx.xxx"
# 資料庫端口
DBPort=3306
# 資料庫使用者名
DBUser=root
# 資料庫使用者的密碼
DBPassword="root"
# tars相關資料庫使用者的密碼
DBTarsPass="[email protected]"

# GIT賬戶的使用者密碼
GitUser="xxx"
GitPass="xxx"

# 授權其餘需要執行的腳本
chmod u+x jdk_install.sh
chmod u+x software_install.sh
chmod u+x framework_install.sh
chmod u+x setup_database.sh
chmod u+x tars_service_install.sh
chmod u+x web_mgr_install.sh

# 執行腳本安裝Tars架構
# 安裝依賴的第三方工具
sh ./software_install.sh
# 安裝JDK
sh ./jdk_install.sh ${GitUser} ${GitPass}
# 安裝c++ 開發環境
sh ./framework_install.sh
# 資料庫環境初始化
sh ./setup_database.sh ${DBIP} ${DBPort} ${DBUser} ${DBPassword} ${DBTarsPass}
# 架構基礎服務安裝
sh ./tars_service_install.sh ${DBIP} ${DBPort} ${DBUser} ${DBPassword} ${DBTarsPass}
# WEB管理系統安裝
sh ./web_mgr_install.sh ${DBIP} ${DBPort} ${DBTarsPass}