微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

教你怎么使用shell脚本实现服务器快速设置附代码

之前的文章一文讲解css3实现椭圆轨迹旋转(总结)》中,给大家介绍了如何用css3实现椭圆轨迹旋转的方法。下面本篇文章给大家怎么使用shell脚本实现服务器快速设置,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。

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

现在企业出海已经是常态,我们面临更多的国家地区服务器安装的工作。虽然云服务已经普及,还有各种SaaS可以快速使用,但定制化需求会一直存在,那么快速部署的方法就很有必要。

目前与那些快速部署方法

  • 服务器镜像——最快,但必须在同一个供应商内,出海可能会不同地区用不同的云服务商,就无法实现。

  • docker——可以通过镜像方式快速部署,应对复杂环境;

  • shell脚本——可以简化大多数复杂应用的安装,适合系统环境变化不大的情况,例如可以用同一个版本系统。

虽然shell脚本的方式不如docker和镜像好使,但如果你还没有尝试过,可以试一下,作为一个工具,可以极大提高效率,因为我们也看到,很多的linux安装包也提供了类似的一键安装脚本

在上脚本之前,先要说明一下我的服务器软件内容

  • gitlab-runner集成部署

  • nodeJS环境

  • nodeJS标准的跑在gitlab-runner用户

  • 使用nvm管理nodejs版本

  • 使用pm2管理进程

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

#!/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的时候记得字符串中的转义。

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

推荐学习:Linux教程

原文地址:https://www.jb51.cc/linux/1196206.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐