經過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

相關文章
相關標籤/搜索