#!/bin/bash


baseDir=`echo $PWD`
serverDir=`echo $baseDir/server`
webDir=`echo $baseDir/web`
dataDir=`echo $serverDir/data`
database=`echo "ginadmin"`
confDir=`echo $serverDir/conf`
goVersion=`echo "go1.16.4.linux-amd64"`
nodeVersion=`echo "node-v14.17.0-linux-x64"`

funcInstallGo(){
  cd /usr/local

 wget https://golang.google.cn/dl/$goVersion.tar.gz
 tar  -zxvf $goVersion.tar.gz
 rm -rf $goVersion.tar.gz
 ln -s /usr/local/go/bin/go  /usr/bin/go
 ln -s /usr/local/go/bin/gofmt  /usr/bin/gofmt
}
funcBuildServer() {
    echo 'server module building...'
    export GOPROXY=https://goproxy.cn
    export GO111MODULE=on
    cd $serverDir
    go mod tidy
    GOOS=linux GOARCH=amd64 go build -o $serverDir/gin-admin
    if [  -f $serverDir/gin-admin ]; then
        echo 'server module build  finished'
    else
        echo "server module build false" 1>&2
        exit 1
    fi


}

funcInstallNodejs(){
  cd /usr/local
wget https://nodejs.org/dist/v14.17.0/$nodeVersion.tar.xz
tar xvJf $nodeVersion.tar.xz
rm -f  $nodeVersion.tar.xz
mv $nodeVersion node
ln -s /usr/local/node/bin/node  /usr/bin/node
ln -s /usr/local/node/bin/npm  /usr/bin/npm
ln -s /usr/local/node/bin/npx  /usr/bin/npx
npm install yarn -g
ln -s /usr/local/node/bin/yarn /usr/bin/yarn
ln -s /usr/local/node/bin/yarnpkg /usr/bin/yarnpkg
}

funcBuildSite() {
    echo 'web module building...'
    cd $webDir
    yarn  install --registry https://registry.npm.taobao.org/
    yarn build
    if [ -d $webDir/dist ]; then
        echo 'site module build  finished'
    else
        echo "site module build false"
      #exit 1
    fi
}


funcInstallDokcer(){
    sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker
}

funcDockerInitMysqlAndRedis(){
    #启动mysql
    docker stop mysql
    docker rm mysql
    docker run -p 3306:3306 --name mysql  -v /data/mysql:/var/lib/mysql   -v $dataDir:/docker-entrypoint-initdb.d   -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    docker exec -it mysql /bin/bash -c "cd docker-entrypoint-initdb.d && mysql -h -P 3306 --protocol=tcp -uroot -p123456  $database < init.sql"
   
    
    #启动redis
     docker stop redis
    docker rm redis
    docker run -p 6379:6379 --name redis -v $confDir/redis/redis.conf:/etc/redis/redis.conf  -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
}
  funcStartServer(){
      #start server
    # shellcheck disable=SC2164
    cd  $serverDir
     command=`netstat -nlp |grep gin-admin| awk '{print $4}'| awk -F":" '{ print $4 }'`
   if [  "$command" == "" ]; then
     nohup ./gin-admin &
     sleep 1
     echo -e  'server start  success' ;
     local port="`netstat -nlp |grep gin-admin| awk '{print $4}'| awk -F":" '{ print $4 }'`";
     echo "listen port:$port"
   else
     ps -ef |grep gin-admin|grep -v grep|awk '{print $2}'|xargs kill -9
     nohup ./gin-admin &
     sleep 1
	   echo -e  'server start  success' ;
     local port="`netstat -nlp |grep gin-admin| awk '{print $4}'| awk -F":" '{ print $4 }'`";
     echo "listen port: $port"
   fi
   
   
  }
  #安装go环境脚本
  if ! type go >/dev/null 2>&1; then
   funcInstallGo
  fi

#go build 服务端
funcBuildServer
#安装nodejs环境
 if ! type yarn >/dev/null 2>&1; then
   funcInstallNodejs
fi

#编译nodejs
#funcBuildSite

#安装docker 环境
 if ! type docker  >/dev/null 2>&1; then
   funcInstallDokcer
fi
#初始化docker中Mysql和Redis环境
funcDockerInitMysqlAndRedis
#启动server
funcStartServer