经过shell脚本实现服务器快速设置

如今企业出海已是常态,咱们面临更多的国家地区服务器安装的工做。虽然云服务已经普及,还有各类SaaS能够快速使用,但定制化需求会一直存在,那么快速部署的方法就颇有必要。node

目前与那些快速部署方法?linux

  • 服务器镜像——最快,但必须在同一个供应商内,出海可能会不一样地区用不一样的云服务商,就没法实现。
  • docker——能够经过镜像方式快速部署,应对复杂环境;
  • shell脚本——能够简化大多数复杂应用的安装,适合系统环境变化不大的状况,例如能够用同一个版本系统。

虽然shell脚本的方式不如docker 和镜像好使,但若是你尚未尝试过,能够试一下,做为一个工具,能够极大提升效率,由于咱们也看到,不少的linux安装包也提供了相似的一键安装脚本。nginx

在上脚本以前,先要说明一下个人服务器软件内容:git

  • gitlab-runner 集成部署
  • nodeJS环境
  • nodeJS标准的跑在gitlab-runner用户下
  • 使用nvm管理nodejs版本
  • 使用pm2管理进程

下面是以我在游戏出海时使用的shell脚本,简单说明如何经过shell脚本快速部署:github

#!/bin/sh #第一句,基本是全部sh脚本的标准开头
# Centos 7.8 #说明这个脚本适用的系统和版本,给人看的

#硬盘目录:#变量声明
DISK_PATH="/data" #以前已经mount好的硬盘路径
#hostname:
HOSTNAME="my_server_name" #服务器名字,方便登陆后区分
#gitlab-runner:
GITLAB_RUNNER="https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh"
#nodejs version
NODE_VERSION="v8.17.0"

#NVM #nvm安装脚本
NVM_SCRIPT="https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh"
#PM2 #pm2版本
PM2="pm2"
#pm2 data path: #pm2日志路径,咱们不但愿放到系统盘中
PM2_DATA_DIR="pm2Data" # 下方会组合成完整的路径 DISK_PATH+/PM2_DATA_DIR

echo "开始安装SDK channel套件============"

if [ -n "$HOSTNAME" ] # if的使用方式,你们须要去了解一下,-n是若是不为空的意思
then
  echo "修改hostname为:$HOSTNAME"
  hostnamectl set-hostname "$HOSTNAME"
else
  echo "可使用 'hostnamectl set-hostname newHostname' #设置当前hostname,当即生效,重启也生效"
fi
echo "准备开始,当前hostname:" 
hostname

# 下面是一连串的安装和处理了

echo "基础准备:"
yum install epel-release -y
yum update -y

echo "安装 htop:"
yum install htop -y

echo "安装 ngnix:"
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
systemctl enable nginx
systemctl start nginx
touch "/etc/nginx/conf.d/virtual.conf"

echo "安装gitlab-runner:"
# For RHEL/CentOS/Fedora
curl -L "$GITLAB_RUNNER" | sudo bash
yum install gitlab-runner -y
echo "alias lg='su -l gitlab-runner'" >> "$HOME/.bashrc"
source "$HOME/.bashrc"

echo "创建pm2Data目录:"
PM2_FINALDIR="$DISK_PATH/$PM2_DATA_DIR"
if [ ! -d "$PM2_FINALDIR" ]; then #-d是判断是否是目录,不是就建立
  mkdir "$PM2_FINALDIR"
fi
chown gitlab-runner:gitlab-runner "$PM2_FINALDIR" #修改目录owner

# 我会生成一个新的脚本到gitlab-runner目录,为何这样作呢?
# 由于须要在gitlab-ruuner用户跑服务,但愿环境在目标用户那里。
# 另外的缘由是,以其余用户身份安装pm2会出现问题,那我就跑2次脚本咯

echo "切换用户安装 node 套件"
######## nodejs.sh Start########
NODE_SHELL='/home/gitlab-runner/nodejs.sh'

echo "#!/bin/sh # Centos 7.8 #硬盘目录: #nodejs version NODE_VERSION=\"$NODE_VERSION\" PM2_FINALDIR=\"$PM2_FINALDIR\" #NVM NVM_SCRIPT=\"$NVM_SCRIPT\" #PM2 PM2=\"$PM2\" echo \"安装 nvm\" curl -o- $NVM_SCRIPT | bash echo \"安装 node $NODE_VERSION:\" source \"\$HOME/.bashrc\" nvm install $NODE_VERSION nvm use $NODE_VERSION echo \"安装pm2: $PM2\" npm i $PM2 -g npm install --global coffeescript npm install --global gulp # pm2 目录的骚操做 PM2_HOME=\"\$HOME/.pm2\" if [ -d \$PM2_HOME ]; then echo '处理.pm2目录' pwd ll mv \$PM2_HOME $PM2_FINALDIR rm \$PM2_HOME -r ln -s $PM2_FINALDIR/ \$PM2_HOME else echo -e '.pm2 目录不存在' ln -s $PM2_FINALDIR/ \$PM2_HOME fi source \"\$HOME/.bashrc\" echo \"NodeJS 套件结束\"" > "$NODE_SHELL"

chown gitlab-runner:gitlab-runner "$NODE_SHELL"
chmod +x "$NODE_SHELL" # 让脚本能够运行
# sudo -H -u gitlab-runner bash -c "$NODE_SHELL" #没法跑pm2安装
echo "将切换到gitlab-runner 用户,而后运行./nodejs.sh"
######## nodejs.sh End ########
su -l gitlab-runner #切换用户,跑./nodejs.sh,就能够安装好nodejs环境

sudo gitlab-runner register # 注册gitlab-runner

echo "完成"
exit 0
复制代码

这个脚本里遇到的最大问题是,咱们目前没法在root中安装pm2,会报错。固然也能够经过研究解决,但万一之后pm2版本更新了呢?研究出来的方法是否是不能用?因此干脆脚本生成脚本,再跑一次。coding的时候记得字符串中的转义。docker

经过这个方式,我实现了另外2个共3个为一组的服务群快速安装。中间发生了一次,安装了一半的时候,发现供应商给错服务器了,只能3个服务器都须要从新安装!还好有脚本,不然真的是灾难!shell

若是你以为本文对你有帮助,请点赞和转发哦。npm

相关文章
相关标签/搜索