Ubuntu一鍵化部署java項(xiàng)目shell腳本

前言:前段時(shí)間澎媒,被安排編寫項(xiàng)目離線的一鍵化部署的腳本琅绅,從零開始編寫腳本,碰到了不少問題≌炭迹現(xiàn)在基本已經(jīng)完成了腳本音同,在這里分享下經(jīng)驗(yàn)。

Ubuntu需要離線安裝的軟件

需要安裝的軟件和插件主要包括:jdk秃嗜、nginx权均、mysql、redis锅锨、supervisor(進(jìn)程守護(hù))叽赊、以及python2.、ssh必搞、build-essential(C++環(huán)境)必指、update這些。
下面主要介紹jdk恕洲、nginx塔橡、mysql、redis霜第、supervisor(進(jìn)程守護(hù))的離線安裝葛家,剩余的可以去網(wǎng)上自己尋找如何安裝(運(yùn)行下面的腳本之前,請(qǐng)先確認(rèn)python2.
庶诡、ssh惦银、build-essential(C++環(huán)境)、update是否已經(jīng)安裝)末誓,或者使用下面的腳本先安裝(python自己找方法裝)

#!/bin/source
echo "在線安裝環(huán)境"
echo "更新庫索引"
apt-get update
echo "安裝vim編譯器"
apt-get install vim
echo "安裝ssh-server"
apt-get install ssh
echo "安裝GCC"
apt-get install gcc
echo "安裝make"
apt-get install make
echo "安裝zip工具"
apt-get install zip
echo "安裝C++編譯環(huán)境"
apt-get install build-essential

Shell腳本編寫注意事項(xiàng)

很重要的一點(diǎn)扯俱,由于linux系統(tǒng)和windows系統(tǒng)回車換行不是同一個(gè)字符,因此腳本最好在linux系統(tǒng)上編寫喇澡,不然執(zhí)行的時(shí)候很多文件會(huì)無法編輯迅栅。
其次,安裝部署的腳本最好要切換成root用戶執(zhí)行晴玖,避免出現(xiàn)權(quán)限不足的問題
最后读存,下面的腳本基本用source執(zhí)行

一、jdk離線安裝的shell腳本

不多說呕屎,上腳本

#!/bin/source
echo "解壓jdk..."
mkdir -p /usr/local/jvm
tar zxvf jdk-8u231-linux-x64.tar.gz -C /usr/local/jvm
#修改環(huán)境變量
echo "修改環(huán)境變量..."
echo 'export JAVA_HOME=/usr/local/jvm/jdk1.8.0_231' >>/etc/profile
echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >>/etc/profile
source /etc/profile
echo "jdk 安裝配置完成"

jdk下載:https://pan.baidu.com/s/12BMosfirRKNcrtIxFMi5HQ
腳本中让簿,mkdir 是創(chuàng)建一個(gè)文件夾,mkdir -p是表示秀睛,若有則不創(chuàng)建尔当,無則創(chuàng)建
tar zxvf xxx.tar.gz -C 路徑 指的是將和腳本同目錄下的tar文件解壓到指定路徑下

echo 'export JAVA_HOME=/usr/local/jvm/jdk1.8.0_231' >>/etc/profile
echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >>/etc/profile

這部分指的是,在 /etc/profile 這個(gè)文件的最后增加配置蹂安,配置環(huán)境變量椭迎。
jdk解壓完且配置好環(huán)境變量后锐帜,可以直接通過java -version查看當(dāng)前配置的java版本。

二畜号、mysql離線安裝并部署環(huán)境

mysql的離線安裝我當(dāng)初找了挺久的缴阎,才找到一個(gè)靠譜點(diǎn)的

#!/bin/source
echo "開始安裝mysql"
sudo dpkg -i libaio1_0.3.110-2_amd64.deb libevent-core-2.0-5_2.0.21-stable-2ubuntu0.16.04.1_amd64.deb mysql-client-5.7_5.7.25-0ubuntu0.16.04.2_amd64.deb mysql-client-core-5.7_5.7.25-0ubuntu0.16.04.2_amd64.deb mysql-common_5.7.25-0ubuntu0.16.04.2_all.deb mysql-server_5.7.25-0ubuntu0.16.04.2_all.deb mysql-server-5.7_5.7.25-0ubuntu0.16.04.2_amd64.deb mysql-server-core-5.7_5.7.25-0ubuntu0.16.04.2_amd64.deb

sudo dpkg -i mysql-server-5.7_5.7.25-0ubuntu0.16.04.2_amd64.deb
echo "mysql安裝完成"

mysql的離線安裝挺麻煩的,需要下載挺多文件的简软,具體可見https://pan.baidu.com/s/1VvniJWr_MPTh62drsddClA
安裝mysql的時(shí)候需要手動(dòng)進(jìn)行mysql的密碼設(shè)置蛮拔,這個(gè)密碼可以登錄mysql數(shù)據(jù)庫

安裝完mysql后自然要進(jìn)行配置了

#!/bin/source
echo "mysql數(shù)據(jù)庫建表"
echo "登錄mysql,請(qǐng)輸入密碼"
mysql -uroot -p <<EOF
show databases;
create database data1 default character set utf8;
use  data1 ;
source  data1.sql;
create user 'root'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
EOF
echo "建表完成替饿,配置mysql"
echo "sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'">>/etc/mysql/mysql.conf.d/mysqld.cnf
source /etc/mysql/mysql.conf.d/mysqld.cnf
echo "重啟mysql"
sudo systemctl restart mysql

mysql -uroot -p 登錄mysql數(shù)據(jù)庫進(jìn)行建庫建表的操作语泽。

<<EOF
....
EOF

source data1.sql;是運(yùn)行與腳本同目錄下的sql文件進(jìn)行建表操作。
是在可以在shell中執(zhí)行mysql的命令视卢。

create user 'root'@'%' identified by '123456'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;

創(chuàng)建一個(gè)新的用戶并設(shè)置密碼和用戶權(quán)限。
mysql默認(rèn)不開啟對(duì)外訪問權(quán)限的廊驼,若要開啟權(quán)限据过,需要自行更改配置文件。

     vim /etc/mysql/mysql.conf.d/mysqld.cnf
     #將bind-address            = 127.0.0.1  注釋掉
     #Shift + : wq! 保存離開

mysql安裝配置完成后悔開機(jī)自啟妒挎,因此在后面的supervisor中就沒有再配置mysql了绳锅。

三、redis

相比于mysql酝掩,redis就簡單許多

#!/bin/source
echo "安裝redis....."
echo "<=====================解壓redis壓縮包======================>"
tar -zxvf redis-3.2.6.tar.gz
echo "<======================redis解壓完成======================>"
cd redis-3.2.6
echo "<======================開始安裝redis=======================>"
sudo make 
sudo make install
mkdir -p /etc/redis
cp redis.conf /etc/redis
sed -i "s/daemonize no/daemonize yes/g" "/etc/redis/redis.conf"
#cd /usr/local/bin
#redis-server /etc/redis/redis.conf
#redis-cli -p 6379
echo "redis安裝完成"

其中鳞芙, sed -i "s/daemonize no/daemonize yes/g" "/etc/redis/redis.conf" 這句是將/etc/redis/redis.conf該配置文件中的daemonize no改成daemonize yes。
對(duì)于腳本中實(shí)現(xiàn)編輯文本這一塊期虾,可以參考https://blog.csdn.net/wdz306ling/article/details/80087889等博文(網(wǎng)上找的話挺多的原朝,sed的用法)。

四镶苞、nginx

nginx的安裝和配置其實(shí)也很簡單喳坠,比較麻煩的就是你要先準(zhǔn)備好適用你項(xiàng)目的nginx配置文件,這里就主要貼一下腳本代碼

#!/bin/source
echo "<===安裝Nginx===>"
echo "解壓pcre依賴...."
tar zxvf pcre-8.35.tar.gz -C /usr/local
echo "解壓openssl依賴...."
tar zxvf openssl-1.0.1f.tar.gz -C /usr/local
echo "解壓zlib依賴...."
tar zxvf zlib-1.2.11.tar.gz -C /usr/local
echo "解壓nginx"
tar zxvf nginx-1.15.10.tar.gz -C /usr/local
cd /usr/local
echo "修改解壓后的依賴文件名"
mv pcre-8.35 pcre
mv openssl-1.0.1f openssl
mv zlib-1.2.11 zlib
echo "執(zhí)行pcer配置并安裝"
cd /usr/local/pcre
./configure
make
make install
echo "執(zhí)行openssl配置并安裝"
cd /usr/local/openssl
./configure
make
make install
echo "執(zhí)行zlib配置并安裝"
cd /usr/local/zlib
./configure
make
make install
echo "安裝配置nginx"
mkdir -p /usr/local/nginx
cd /usr/local/nginx-1.15.10
./configure --with-zlib=/usr/local/zlib --with-openssl=/usr/local/openssl --with-pcre=/usr/local/pcre
make 
make install
echo "修改nginx配置文件"
rm -rf /usr/local/nginx/conf/nginx.conf
cp -r /home/ubuntu/deployment/nginx/nginx.conf /usr/local/nginx/conf
echo "配置nginx環(huán)境變量"
echo 'export NGINX_HOME=/usr/local/nginx'>>/etc/profile
echo 'export PATH=$PATH:$NGINX_HOME/sbin'>>/etc/profile
source /etc/profile
echo "nginx安裝完成"

nginx的安裝文件可見:https://pan.baidu.com/s/1zQkXDixQ9sObKeJs_Ui_Yg
nginx和jdk一樣茂蚓,也會(huì)配置環(huán)境變量壕鹉,nginx的配置文件請(qǐng)自行準(zhǔn)備。
安裝好后的nginx會(huì)在/usr/local 目錄下的nginx中聋涨。

五晾浴、supervisor(進(jìn)程守護(hù))

項(xiàng)目在設(shè)備上適用supervisor進(jìn)行進(jìn)程守護(hù),實(shí)現(xiàn)開機(jī)項(xiàng)目自啟牍白,以及斷線重連的操作脊凰。
離線安裝supervisor需要確保系統(tǒng)有安裝python2.*,離線安裝需要先行下載以下幾個(gè)文件淹朋。
meld依賴文件
https://files.pythonhosted.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz
supervisor安裝文件
https://files.pythonhosted.org/packages/31/7e/788fc6566211e77c395ea272058eb7
以及setuptools(之前安裝過程中出現(xiàn)過缺失這個(gè))
https://files.pythonhosted.org/packages/0f/b6/9357ac9dcbd267209621a1550ef6cf800d6055a6ed5814c75c1aa8c0dee7/setuptools-19.2.zip
安裝supervisor

#!/bin/bash
echo "--------------安裝supervisor---------------"
unzip setuptools-19.2.zip
cd setuptools-19.2
python setup.py install
cd ..
tar -zxvf meld3-1.0.2.tar.gz
cd meld3-1.0.2
python setup.py install
cd ..
tar -zxvf supervisor-3.3.3.tar.gz
cd supervisor-3.3.3
python setup.py install
cd ..

配置supervisor開機(jī)自啟

#!/bin/bash
echo "配置supervisor變量"
mkdir /etc/supervisor
cp supervisord.conf /etc/supervisor
cp -r conf.d /etc/supervisor
mkdir -p /var/log/supervisor
supervisord -c /etc/supervisor/supervisord.conf
echo "設(shè)置supervisor開機(jī)自啟"
cp supervisor.service /lib/systemd/system/
chmod 776 /lib/systemd/system/supervisor.service
systemctl daemon-reload
systemctl enable  supervisor.service

supervisor的配置文件可以自己去網(wǎng)上尋找如何修改和編輯笙各,這里就不貼了钉答。
supervisor.service

[Unit]
Description=supervisor
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

配置文件請(qǐng)根據(jù)實(shí)際情況修改。

結(jié)束語:以上就是主要的安裝配置了杈抢,項(xiàng)目啟動(dòng)腳本請(qǐng)根據(jù)實(shí)際情況編寫数尿,其中可能漏了一兩個(gè)環(huán)境或者安裝的,畢竟寫這個(gè)這的寫的頭疼惶楼,若有缺漏右蹦,歡迎補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歼捐,一起剝皮案震驚了整個(gè)濱河市何陆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豹储,老刑警劉巖贷盲,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異剥扣,居然都是意外死亡巩剖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門钠怯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佳魔,“玉大人,你說我怎么就攤上這事晦炊【舷剩” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵断国,是天一觀的道長贤姆。 經(jīng)常有香客問我,道長并思,這世上最難降的妖魔是什么庐氮? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮宋彼,結(jié)果婚禮上弄砍,老公的妹妹穿的比我還像新娘。我一直安慰自己输涕,他們只是感情好音婶,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莱坎,像睡著了一般衣式。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天碴卧,我揣著相機(jī)與錄音弱卡,去河邊找鬼。 笑死住册,一個(gè)胖子當(dāng)著我的面吹牛婶博,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荧飞,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼凡人,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了叹阔?” 一聲冷哼從身側(cè)響起挠轴,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耳幢,沒想到半個(gè)月后岸晦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睛藻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年委煤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片修档。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖府框,靈堂內(nèi)的尸體忽然破棺而出吱窝,到底是詐尸還是另有隱情,我是刑警寧澤迫靖,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布院峡,位于F島的核電站,受9級(jí)特大地震影響系宜,放射性物質(zhì)發(fā)生泄漏照激。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一盹牧、第九天 我趴在偏房一處隱蔽的房頂上張望俩垃。 院中可真熱鬧,春花似錦汰寓、人聲如沸口柳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跃闹。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間望艺,已是汗流浹背苛秕。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留找默,地道東北人艇劫。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像啡莉,于是被迫代替她去往敵國和親港准。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361