之前的文章《一文講解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教程