LNMP自动安装部署脚本

2025-05-27 0 85

我们的业务使用了nginx、MySQL、php、和tomcat,写了一个自动化安装这些软件的脚本,虽然网上类似的自动安装脚本很多,但这个是自己写的,特此mark一下,希望能给别人一些参考,同时也灰常欢迎看到的朋友们提些改进意见。话不多说,直接上脚本。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354
#!/bin/sh

alias echo=\'echo -e\'

###判断系统,此脚本只适用于64位系统

machine=`uname -m`

if [ $machine != x86_64 ] ;then

echo \"\\e[1;31m \\nyour system is 32bit,but this script is only run on 64bit !\\n \\e[0m\"

exit -1

fi

###创建保存下载文件的目录

mkdir /usr/local/src/auto_install &> /dev/null

source_dir=/usr/local/src/auto_install

###定义一个交互式的选择提示

function interact {

echo \"Please input \\\"yes\\\" or \\\"no\\\"\"

read choice

case \"$choice\" in

no)

exit 0;;

yes)

echo;;

*)

echo \"\\e[1;31mInput Errot! \\e[0m\"

exit -1;;

esac

}

### 定义一个函数检查上一条命令的执行状态

function check {

if [ $? -ne 0 ];then

echo \"\\e[1;31m\\n the last commond exec failed,please check it !\\e[0m \\n\"

sleep 1

exit -1

fi

}

### 定义下载各软件的函数(此处我隐藏了我们的下载地址,需各位自行设置下载地址)

function download_install_epel {

cd $source_dir

rm -f epel* &> /dev/null

echo \"\\e[1;32m ---yum install epel repo--- \\e[0m \\n\"

sys_version=`uname -r|cut -d \'.\' -f 4`

if [ $sys_version = el7 ];then

rpm -qa|grep -i epel > /dev/null

if [ $? -ne 0 ];then

wget -nv http://www.example.com/epel-release-7-2.noarch.rpm

rpm -ivh $source_dir/epel-release-7-1.noarch.rpm

check;

fi

elif [ $sys_version = el6 ];then

rpm -qa|grep -i epel > /dev/null

if [ $? -ne 0 ];then

wget -nv http://www.example.com/epel-release-6-8.noarch.rpm

rpm -ivh $source_dir/epel-release-6-8.noarch.rpm

check;

fi

fi

}

function download_nginx {

cd $source_dir

echo \"\\e[1;32m\\n ---download nginx-1.4.7---\\e[0m \\n\"

ls nginx-1.4.7.tar.gz &> /dev/null

if [ $? -ne 0 ];then

wget -nv http://www.example.com/nginx-1.4.7.tar.gz

check;

fi

}

function download_mysql {

cd $source_dir

echo \"\\e[1;32m\\n ---download MySQL-5.5.39---\\e[0m \\n\"

ls mysql-5.5.39-linux2.6-x86_64.tar.gz &> /dev/null

if [ $? -ne 0 ];then

wget -nv http://www.example.com/mysql-5.5.39-linux2.6-x86_64.tar.gz

check;

fi

}

function download_php {

cd $source_dir

echo \"\\e[1;32m\\n ---download php-5.3.28---\\e[0m \\n\"

ls php-5.3.28.tar.gz &> /dev/null

if [ $? -ne 0 ];then

wget -nv http://www.example.com/php-5.3.28.tar.gz

check;

fi

}

function download_jre {

cd $source_dir

echo \"\\e[1;32m ---download jre-6u33-linux-x64.bin---\\e[0m\"

sleep 1

ls jre-6u33-linux-x64.bin &> /dev/null

if [ $? -ne 0 ];then

wget -nv http://www.example.com/jre-6u33-linux-x64.bin

check;

fi

}

###定义依赖包安装函数

function dependence_install {

download_install_epel;

echo \"\\e[1;32m ---yum install the Dependencies software--- \\e[0m \\n\"

sleep 1

pgrep yum|xargs kill -9 > /dev/null

rm -f /var/run/yum.pid > /dev/null

echo \"yum install gcc zlib cmake libxml2 libxml2-devel bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel pspell-devel libmcrypt libm

crypt-devel freetype pcre-devel openssl openssl-devel libaio*\"

yum -y install gcc zlib cmake libxml2 libxml2-devel bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel pspell-devel libmcrypt libmcry

pt-devel freetype pcre-devel openssl openssl-devel libaio* >/dev/null 2>&1

check;

}

### 定义mysql安装函数###

function mysql_install {

###判断本机是否已在运行mysql,或者开机启动项有没有mysql###

###判断机器上是否以运行mysql实例

echo \"\\e[1;32m \\n ---check if there is already installed mysql instence---\\e[0m\\n\"

ps -ef|grep -w mysqld|grep -v \"grep\" &> /dev/null

if [ $? -eq 0 ];then

mysqlbasedir=`ps -ef|grep -w \"mysqld\"|grep -v \"grep\"|awk \'{print $9}\'|tr -d \'\\-\\-\'`

mysqldatadir=`ps -ef|grep -w \"mysqld\"|grep -v \"grep\"|awk \'{print $10}\'|tr -d \'\\-\\-\'`

echo \"\\e[1;32m your system has run a mysql instance already \\n mysqlbasedir is: \"$mysqlbasedir\"\\n mysqldatadir is: \"$mysqldatadir\"\\n do you still want to install a new mysql-server? \\e[0m\\n\"

interact;

fi

###判断系统是否已经有rpm方式安装的mysql

echo \"MySQL-server-5.5.39-2.el6.x86_64.rpm\"|while read line

do

prefix=`echo \"$line\"|awk -F \"-\" \'{print $1\"-\"$2}\'` ##to get like \"MySQL-server\"

rpm -qa|grep -i \"$prefix\" &> /tmp/check_mysql.log

if [ $? -eq 0 ];then

already_install=`cat /tmp/check_mysql.log|awk -F \"-\" \'{print $1\"-\"$2\"-\"$3}\'` ##to get the already installed mysql version

echo \"\\e[1;31m ---the $already_install is already installed by rpm!--- \\n ---Do you really want to install a new mysql?--- \\e[0m\\n\"

interact;

fi

done

###判断chkconfig里面是否有mysql启动脚本并且为开机启动

chkconfig |grep mysql|awk \'{print $5\" \"$7}\'|grep -e \"启用\" -e \"on\" &> /dev/null

if [ $? -eq 0 ];then

echo \" there is a bootstart mysql script in the chkconfig,please check\"

exit 0

fi

###判断/etc/rc.local文件里是否有mysql启动命令

cat /etc/rc.local|grep \"mysqld\" &> /dev/null

if [ $? -eq 0 ];then

echo \" there is a bootstart mysql commond in the /etc/rc.local,please check it\"

exit 0

fi

######判断结束######

###检查是否有系统自带的mysql-lib-5.1,有则删除

rpm -qa|grep -i -e \"mysql.*5\\.1.*\"|xargs rpm -e --nodeps 2> /dev/null

###交互式选择mysql安装路径

echo \"\\e[1;31m where do you want to install mysql(default is /usr/local/mysql)\\e[0m\"

read mybasedir

if [ \"$mybasedir\" = \"\" ];then

mybasedir=/usr/local/mysql

fi

###选择data目录

echo \"\\e[1;31m where do you want to storage mysql data(default is /usr/local/mysql/data)\\e[0m\"

read mydatadir

if [ \"$mydatadir\" = \"\" ];then

mydatadir=/usr/local/mysql/data

fi

###开始安装mysql

echo \"\\e[1;32m ---now start to install mysql---\\e[0m\\n\"

sleep 1

#dependence_install;

echo \"\\e[1;32m ---add user mysql---\\e[0m\"

useradd mysql -s /sbin/nologin

echo \"\\e[1;32m\\n ---unpack mysql-5.5.39-linux2.6-x86_64.tar.gz---\\e[0m\"

cd $source_dir

tar zxf mysql-5.5.39-linux2.6-x86_64.tar.gz

check;

rm -rf $mybasedir

mv mysql-5.5.39-linux2.6-x86_64 $mybasedir

###判断/etc下是否有my.cnf,若有,重命名为my.cnf.bak

ls /etc/my.cnf &> /dev/null

if [ $? = 0 ];then

\\mv /etc/my.cnf /etc/my.cnf.bak

echo \"\\e[1;32m\\n ---detected /etc/my.cnf is already exit,rename it to /etc/my.cnf.bak--- \\e[0m \\n\"

fi

cp $mybasedir/support-files/my-huge.cnf /etc/my.cnf

###拷贝开机启动脚本到/etc/init.d/

ls /etc/init.d/mysql &> /dev/null

if [ $? = 0 ];then

\\mv /etc/init.d/mysql /etc/init.d/mysql.bak

echo \"\\e[1;32m ---detected /etc/init.d/mysql is already exit,rename it to /etc/init.d/mysql.bak---\\e[0m\"

fi

cp $mybasedir/support-files/mysql.server /etc/init.d/mysql

###修改/etc/init.d/mysql脚本里面basedir和datadir

sed -i -e \"/^basedir*=$/i\\basedir=$mybasedir\" -e \"/^datadir*=$/i\\datadir=$mydatadir\" /etc/init.d/mysql

sed -i -e \'/^basedir*=$/d\' -e \'/^datadir*=$/d\' /etc/init.d/mysql

###初始化数据库

echo \"\\e[1;32m\\n ---initialize mysql database---\\e[0m\"

sleep 1

chown -R mysql $mydatadir $mybasedir >/dev/null 2>&1

$mybasedir/scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql --basedir=$mybasedir --datadir=$mydatadir

check;

###将basedir/bin/添加到PATH

echo \"PATH=$PATH:$mybasedir/bin\" >> /etc/profile

export PATH=$PATH:$mybasedir/bin

echo \"\\e[1;32m install mysql success,you can run \\\"service mysql start\\\" to start the mysql \\n do not forget to set a password for mysql \\e[0m\"

###至此mysql安装完毕

}

### 定义nginx安装函数

function nginx_install {

echo

echo \"\\e[1;32m ---start installing nginx,it\'s basedir is /usr/local/nginx--- \\e[0m \\n\"

sleep 1

cd $source_dir

ls -l |grep \"^d\"|grep nginx|xargs rm -rf &> /dev/null

tar zxf nginx-1.4.7.tar.gz

check;

cd nginx-1.4.7

echo \"\\e[1;32m ---configure: configure information in /tmp/configure_nginx.log--- \\e[0m \\n\"

sleep 1

./configure --with-http_stub_status_module --prefix=/usr/local/nginx &> /tmp/configure_nginx.log

check;

echo \"\\e[1;32m ---make: make information in /tmp/make_nginx.log--- \\e[0m \\n\"

sleep 1

make &> /tmp/configure_nginx.log

check;

echo \"\\e[1;32m ---make install: install into /usr/local/nginx--- \\e[0m \\n\"

sleep 1

make install &> /tmp/make_install.log

check;

echo \"\\e[1;32m nginx is installed successfully \\e[0m \\n\"

}

### 定义php安装函数

function php_install {

dependence_install;

cd $source_dir

ls -l |grep \"^d\"|grep php|xargs rm -rf &> /dev/null

tar zxvf php-5.3.28.tar.gz &> /dev/null

check;

cd php-5.3.28

echo

echo \"\\e[1;32m ---configure php: information in /tmp/php_configure.log--- \\e[0m \\n\"

echo \"./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-iconv-dir=/usr/local --with-zlib --enable-zip --with-curl\"

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-iconv-dir=/usr/local --with-zlib --enable-zip --with-curl &> /tmp/php_configure.log

check;

###make

echo \"\\e[1;32m ---make php: information in /tmp/php_make.log--- \\e[0m \\n\"

make &> /tmp/php_make.log

check;

###make install

echo \"\\e[1;32m ---make install php: install into /usr/local/php--- \\n ---php cofigure file in the /usr/local/php/etc--- \\e[0m \\n\"

make install > /tmp/make_install_php.log

check;

echo \"\\e[1;32m ---prepare php configure files--- \\e[0m \\n\"

echo \"cp $source_dir/php-5.3.28/php.ini-production /usr/local/php/etc/php.ini\"

cp php.ini-production /usr/local/php/etc/php.ini

echo \"cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf\"

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

echo \"\\e[1;32m\\n php is installed successfully!\\n now,please start php and modification the php.ini \\e[0m\"

}

###安装jre

function jre_install {

###删除系统自带的java

rpm -qa|grep java|xargs rpm -e --nodeps

cd $source_dir

rm -rf jre1.6.0_33 &> /dev/null

chmod +x jre-6u33-linux-x64.bin &> /dev/null

./jre-6u33-linux-x64.bin >/dev/null 2>&1

check;

ls -d /usr/java

if [ $? -ne 0 ];then

mkdir /usr/java &> /dev/null

else

echo echo \"\\e[1;31m /usr/java has already exits,move to /usr/java_bak !\\e[0m\"

mkdir /usr/java_bak &> /dev/null

mv /usr/java/* /usr/java_bak/

fi

mv jre1.6.0_33 /usr/java/

echo \"\\e[1;32m\\n ---add java path to /etc/profile---\\e[0m\"

sleep 1

echo >>/etc/profile

echo \'JAVA_HOME=/usr/java/jre1.6.0_33\'>>/etc/profile

echo \'CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar\'>>/etc/profile

echo \'PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$JAVA_HOME/jre/bin\'>>/etc/profile

echo \'export PATH JAVA_HOME\'>>/etc/profile

source /etc/profile

echo \"\\e[1;32m\\n JRE is installed success !\\e[0m\"

echo \"\\e[1;32m\\n ---install cronolog---\\e[0m\"

wget -nv http://www.example.com/cronolog-1.6.2.tar.gz

dependence_install;

tar zxf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

./configure &> /tmp/cronolog_configure.log && make > /dev/null && make install > /dev/null

check;

echo \"\\e[1;32m cronolog is installed success\\e[0m\\n\"

}

###下面开始选择那些软件需要安装

echo \"\\e[1;31m\\n ---选择哪些软件需要安装--- \\e[0m \\n\"

echo \"\\e[1;32m \\\"Nginx\\\" INPUT \\\"1\\\" \\e[0m \\n\"

echo \"\\e[1;32m \\\"Mysql\\\" INPUT \\\"2\\\" \\e[0m \\n\"

echo \"\\e[1;32m \\\"Php\\\" INPUT \\\"3\\\" \\e[0m \\n\"

echo \"\\e[1;32m \\\"JRE\\\" INPUT \\\"4\\\" \\e[0m \\n\"

#echo \"\\e[1;32m \\\"Tomcat\\\" INPUT \\\"5\\\" \\e[0m \\n\"

read -p \"please choice which software do you want to install ?\" input

if [ $input = 1 ];then

download_nginx;

dependence_install;

nginx_install;

elif [ $input = 2 ];then

download_mysql;

mysql_install;

elif [ $input = 3 ];then

echo \"\\e[1;32m\\n php needs mysqlclient \\e[0m\"

echo \"\\e[1;32m so if you had already install a mysqlclient\\n please make a softlink for all \\\"libmysqlclient.so.*\\\" file to both /var/lib64 and /var/lib \\e[0m\\n\"

echo \"\\e[1;31m Please input your choice\\n\\e[0m \\e[1;32m1: go on by default\\(install mysql-client-5.5.39\\)\\n 2: I will check my \\\"libmysqlclient.so.*\\\" file and redo this script later\\n 3: I had make the softlinks and I want to going on \\e[0m\"

read choice

case \"$choice\" in

1)

cd $sourcedir

echo \"\\e[1;32m ---download mysql-client rpm files---\\e[0m\"

wget -nv http://www.example.com/MySQL-client-5.5.39-2.el6.x86_64.rpm

wget -nv http://www.example.com/MySQL-devel-5.5.39-2.el6.x86_64.rpm

wget -nv http://www.example.com/MySQL-shared-5.5.39-2.el6.x86_64.rpm

echo \"\\e[1;32m\\n ---install mysql-client in the way of rpm---\\e[0m\"

sleep 1

rpm -ivh MySQL-client-5.5.39-2.el6.x86_64.rpm MySQL-devel-5.5.39-2.el6.x86_64.rpm MySQL-shared-5.5.39-2.el6.x86_64.rpm

download_php;

###make soft link from /usr/lib64/libmysqlclient* to /usr/lib/

ls -l /usr/lib64/libmysqlclient*|grep -v \"^l\"|awk \'{print $NF}\'|while read line

do

usrlib_fulldir=`ls -l /usr/lib64/libmysqlclient*|grep -v \"^l\"|awk \'{print $NF}\'|sed \'s/lib64/lib/\'`

ln -s $line $usrlib_fulldir

done

php_install;

;;

2)

exit 0;;

3)

download_php;

php_install;

;;

*)

echo \"Input Errot!\" && exit -1;;

esac

elif [ $input = 4 ];then

download_jre;

jre_install;

else

echo \"\\e[1;31m your input is worng!\\e[0m\"

sleep 1

exit -1

fi

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 行业资讯 LNMP自动安装部署脚本 https://www.kuaiidc.com/61854.html

相关文章

发表评论
暂无评论