部署脚本

前言

开发工作做好后,我们经常要发布到其它的服务器上,外网的服务器配置是不一样。
所以我们把配置做成模版是有必要的,把需要变更部分用脚本把它替换掉。

有时间也学习python脚本,python脚本现在都成linux标配脚本了,这是一门很
强大的脚本语言。

既然现在用的markdown生成的html都不支持shell高亮,只支持bash

模版变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash
# 这里的变量用于替换模版配置需要替换的值
#
# 游戏服ip
GAME_IP="127.0.0.1"
# 游戏服端口
GAME_PORT=":7206"
# 游戏服地址
GAME_HOST="${GAME_IP}${GAME_PORT}"
# 大厅IP地址(只有IP)
HALL_IP="127.0.0.1"
# 网关地址
GATEWAY_HOST="127.0.0.1:7208"
# 数据库连接
DB_HOST="postgres://postgres:qingyuan,123@192.168.1.1.123:5432/platform_test?sslmode=disable"
# redis服务器
REDIS_HOST="39.108.10.12:26310"
# redis密码
REDIS_PASSWD="af623spo"
# 七牛回放文件的存放目录
QINIU_DIR="playback_dev"
# 微信订单回调配置
NOTIFYURL="http://127.0.0.1:8090/paynotify"
# 统计服地址
ROUNDPATH="rank/rankRoundDev" #局数榜的7牛地址 默认为rank/rankRound
CHARGEPATH="rank/rankChargeDev" #充值榜的7牛地址 默认为rank/rankCharge
# 声明一个键值对数组
declare -A STR_ARR
STR_ARR=([DB_HOST]=${DB_HOST} [REDIS_HOST]=${REDIS_HOST} [REDIS_PASSWD]=${REDIS_PASSWD} \
[HALL_IP]=${HALL_IP} [GATEWAY_HOST]=${GATEWAY_HOST} [GAME_PORT]=${GAME_PORT} \
[GAME_HOST]=${GAME_HOST} [QINIU_DIR]=${QINIU_DIR} [NOTIFYURL]=${NOTIFYURL} \
[ROUNDPATH]=${ROUNDPATH} [CHARGEPATH]=${CHARGEPATH} )
for key in ${!STR_ARR[*]}
do
echo "${key} -----> ${STR_ARR[$key]}"
done

替换模版的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash
CUR_DIR=$(dirname $(readlink -f $0))
# 用模版文件生成FILES里面的配置
COLOR_RED='\033[0;31m'
COLOR_GREEN='\033[0;32m'
COLOR_RESET='\033[0m'
if [ ! -f $CUR_DIR/public_conf.sh ]; then
echo -e "$COLOR_RED file $CUR_DIR/public_conf.sh not exit $COLOR_RESET"
exit 2
fi
source $CUR_DIR/public_conf.sh
read -p "请确认下是否正确,确认输入 yes : " var
if [ ! -n "$var" ] || [ "$var"x != "yes"x ] ; then
echo -e "$COLOR_RED 错误的输入:$var $COLOR_RESET"
exit 3
fi
FILES=(
config.toml \
)
function copyFile(){
file=$1
name=${file%%.*}
if [ ! -f "$CUR_DIR/$file" ]; then
cp -f "$CUR_DIR/${name}_template.toml" "$CUR_DIR/$file"
if [ $file == "config.toml" ]; then
for key in ${!STR_ARR[*]}
do
sed -i "s#${key}#${STR_ARR[$key]}#g" "$CUR_DIR/$file"
done
fi
fi
}
for file in ${FILES[*]} ; do
copyFile $file
done