前言:前段時(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ǔ)充。