1 #!/bin/bash
2 #用于安装LAMP环境
3
4 VHOST_COM=linux.jepwei.cn #虚拟主机域名
5
6 [ ! -d /software/ ] && mkdir /software
7
8 #功能选择菜单
9 menu(){
10 echo -e "\033[31;32m LAMP编译安装脚本 \033[0m"
11 echo -e "\033[31;32m================================================================================\033[0m"
12 echo -e "\033[34m 此脚本能直接在Centos 7上成功执行 \033[0m"
13 echo -e "\033[33m 安装包版本: httpd-2.4.51 mysql-5.7.24 php-7.4.26 \033[0m"
14 echo " 相关依赖包:pcre-devel、openssl-devel、freetype-devel、libmcrypt-devel、bzip2 "
15 echo " perl-devel、libpng-devel、libxml2-devel bzip2-devel libcurl-devel "
16 echo -e "\033[47;34m------------安装需联网下载软件包,若下载地址失效,需自行更新下载地址------------\033[0m"
17 echo -e "\033[31;32m================================================================================\033[0m"
18 echo -e "\033[34m请注意:\033[0m"
19 echo -e "\033[33m httpd安装目录:/usr/local/httpd,日志目录:/usr/local/httpd/logs \033[0m"
20 echo -e "\033[33m mysql安装目录:/usr/local/mysql,数据存放目录:/data/mysql \033[0m"
21 echo -e "\033[33m php安装目录:/usr/local/php7 \033[0m"
22 echo -e "\033[31;32m================================================================================\033[0m"
23 echo -e "\033[34m请选择:\033[0m"
24 echo -e "\033[36m0、安装依赖包 1、安装httpd 2、源码编译安装mysql 3、安装php \033[0m"
25 echo -e "\033[36m4、整合httpd和php 5、启动httpd、mysql服务 \033[0m"
26 echo -e "\033[36m6、一键安装并部署lamp 7、退出脚本 \033[0m"
27 echo -e "\033[31;32m================================================================================\033[0m"
28 echo
29 read -p "请输入数字:0-5[单独安装](单独安装需要先安装依赖包),6[一键安装],7[退出脚本]: " num
30 }
31
32 #(0)安装依赖包
33 install_package(){
34 cd /software
35
36 yum install -y vim-enhanced lrzsz net-tools gcc rsync epel-release wget unzip bzip2 curl bash-completion
37 yum install -y pcre-devel perl-Data-Dumper bzip2-devel openssl-devel gnutls-devel gcc gcc-c++ cmake libaio-devel libxml2-devel freetype-devel
38 yum install -y autoconf libcurl-devel libevent libevent-devel expat-devel numactl libpng-devel libjpeg-devel libmcrypt-devel
39
40 if [ $? -eq 0 ]
41 then
42 sleep 3
43 echo -e "\033[36m==========依赖包安装成功==========\033[0m"
44 else
45 echo -e "\033[31m**********安装依赖包失败,请检查**********\033[0m"
46 fi
47 }
48
49 #(1)编译安装httpd
50 install_httpd(){
51 cd /software
52
53 #1、安装依赖包apr和apr-util
54 APR_VERS=apr-1.7.0
55 UTIL_VERS=apr-util-1.6.1
56
57 if [ ! -f $APR_VERS.tar.gz ]
58 then
59 echo -e "\033[34m==========正在下载apr依赖包==========\033[0m"
60 curl -O http://mirrors.cnnic.cn/apache/apr/$APR_VERS.tar.gz
61 fi
62
63 if [ ! -f $UTIL_VERS.tar.gz ]
64 then
65 echo -e "\033[34m==========正在下载apr-util依赖包==========\033[0m"
66 curl -O http://mirrors.cnnic.cn/apache/apr/$UTIL_VERS.tar.gz
67 fi
68
69 [ ! -d $APR_VERS ] && tar zxf $APR_VERS.tar.gz
70
71 cd $APR_VERS
72
73 ./configure --prefix=/usr/local/apr && make && make install
74
75 if [ $? -eq 0 ]
76 then
77 sleep 3
78 echo -e "\033[36m==========apr依赖包编译安装成功==========\033[0m"
79 else
80 echo -e "\033[31m**********apr依赖包编译安装失败,请检查**********\033[0m"
81 exit 1
82 fi
83
84 cd /software
85
86 [ ! -d $UTIL_VERS ] && tar zxf $UTIL_VERS.tar.gz
87
88 cd $UTIL_VERS
89
90 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
91
92 if [ $? -eq 0 ]
93 then
94 sleep 3
95 echo -e "\033[36m==========apr-util依赖包编译安装成功==========\033[0m"
96 else
97 echo -e "\033[31m**********apr-util依赖包编译安装失败,请检查**********\033[0m"
98 exit 1
99 fi
100
101 #2、定义httpd安装的版本
102 HTTPD_VERS=httpd-2.4.51 #httpd版本
103
104 #3、下载httpd
105 cd /software
106
107 if [ ! -f $HTTPD_VERS.tar.gz ]
108 then
109 echo -e "\033[34m==========正在下载httpd源码包==========\033[0m"
110 curl -O https://mirrors.cnnic.cn/apache/httpd/$HTTPD_VERS.tar.gz
111 fi
112
113 #4、解压下载包
114 [ ! -d $HTTPD_VERS ] && tar zxf $HTTPD_VERS.tar.gz
115
116 #5、进入httpd解压后的目录
117 cd $HTTPD_VERS
118
119 #6、编译安装
120 ./configure --prefix=/usr/local/httpd \
121 --with-apr=/usr/local/apr \
122 --with-apr-util=/usr/local/apr-util \
123 --enable-so \
124 --enable-mods-shared=most && make && make install
125
126 if [ $? -eq 0 ]
127 then
128 sleep 3
129 echo -e "\033[36m==========httpd编译安装成功==========\033[0m"
130 else
131 echo -e "\033[31m**********httpd编译安装失败,请检查**********\033[0m"
132 exit 1
133 fi
134
135 ln -s /usr/local/httpd/bin/apachectl /usr/bin/httpd
136 }
137
138 #(2)源码编译安装mysql
139 install_mysql(){
140 cd /software
141
142 VERSION=5.7.24 #mysql版本
143
144 if [ ! -f mysql-$VERSION.tar.gz ]
145 then
146 #下载mysql
147 echo -e "\033[34m==========下载mysql源码包==========\033[0m"
148 curl -o mysql-$VERSION.tar.gz https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-$VERSION-linux-glibc2.12-x86_64.tar.gz
149 fi
150
151 # 1、创建mysql用户
152 id mysql &> /dev/null
153 [ $? -ne 0 ] && useradd -r -s /sbin/nologin mysql
154
155 #2、解压mysql
156 echo -e "\033[34m==========解压mysql...==========\033[0m"
157
158 if [ -f mysql-$VERSION.tar.gz ]
159 then
160 tar xvf mysql-$VERSION.tar.gz
161 if [ ! -d /usr/local/mysql ]
162 then
163 mv mysql-$VERSION-*/ /usr/local/mysql
164 else
165 rm -rf /usr/local/mysql
166 mv mysql-$VERSION-*/ /usr/local/mysql
167 fi
168 fi
169
170 #3、创建数据库数据存放目录、安装目录
171 [ ! -d /data/mysql/ ] && mkdir -pv /data/mysql/
172 [ ! -f /usr/local/mysql/log/error.log ] && mkdir -pv /usr/local/mysql/log/ && touch /usr/local/mysql/log/error.log
173 chown -R mysql:mysql /data/mysql
174 chown -R mysql:mysql /usr/local/mysql
175
176 #4、初始化
177
178 cd /usr/local/mysql
179
180 if [ $? -eq 0 ]
181 then
182 echo -e "\033[34m==========数据库开始初始化==========\033[0m"
183 ./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
184 if [ $? -eq 0 ]
185 then
186 echo -e "\033[36m==========数据库初始化成功==========\033[0m"
187 else
188 echo -e "\033[31m**********编译安装错误!初始化失败**********\033[0m"
189 exit 1
190 fi
191 fi
192
193 #5、配置数据库配置文件
194 cat > /etc/my.cnf << EOF
195 [client]
196 port = 3306
197 socket = /usr/local/mysql/tmp/mysql.sock
198
199 [mysql]
200 default-character-set=utf8
201
202 [mysqld]
203 default-storage-engine=INNODB
204 character_set_server=utf8
205 explicit_defaults_for_timestamp
206 basedir=/usr/local/mysql
207 datadir=/data/mysql
208 socket=/usr/local/mysql/tmp/mysql.sock
209 log_error = /usr/local/mysql/log/error.log
210
211 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
212 EOF
213
214 [ ! -f /etc/init.d/mysql ] && \cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
215
216 sed -i "46s/basedir=/basedir=\/usr\/local\/mysql/" /etc/init.d/mysql
217 sed -i "47s/datadir=/datadir=\/data\/mysql/" /etc/init.d/mysql
218
219 chmod +x /etc/init.d/mysql
220
221 #6、配置环境变量
222 n=`egrep "/usr/local/mysql/bin" /etc/profile |wc -l`
223
224 if [ $n -eq 0 ]
225 then
226 echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
227 source /etc/profile
228 else
229 source /etc/profile
230 fi
231
232 #7、创建日志目录、/var/run/mysqld/
233 [ ! -d /var/log/mysql/ ] && mkdir /var/log/mysql/ && chown -R mysql:mysql /var/log/mysql/
234 [ ! -d /var/run/mysqld/ ] && mkdir /var/run/mysqld/ && chown -R mysql:mysql /var/run/mysqld/
235 [ ! -d /usr/local/mysql/tmp/ ] && mkdir /usr/local/mysql/tmp/ && chown -R mysql:mysql /usr/local/mysql/
236
237 #8、配置成mysqld服务并启动
238 cat > /usr/lib/systemd/system/mysqld.service << EOF
239 [Unit]
240 Description=MySQL Server
241 After=network.target
242 After=syslog.target
243
244 [Install]
245 WantedBy=multi-user.target
246
247 [Service]
248 User=mysql
249 Group=mysql
250 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
251
252 #连接数限制
253 LimitNOFILE=65535
254 LimitNPROC=65535
255
256 #Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
257 #Restart=always
258 PrivateTmp=false
259 EOF
260
261 systemctl daemon-reload && systemctl enable mysqld && systemctl start mysqld
262
263 if [ $? -eq 0 ]
264 then
265 echo -e "\033[36m==========mysql安装成功并启动==========\033[0m"
266 fi
267
268 mysql -uroot -D mysql -e "UPDATE user SET authentication_string=PASSWORD("123456789") WHERE user='root';"
269 mysql -uroot -e "FLUSH PRIVILEGES;"
270 mysql -uroot -p123456789 -e "grant all privileges on *.* to root@'%' identified by '123456789';"
271
272 if [ $? -eq 0 ]
273 then
274 echo -e "\033[36m==========数据库root密码修改为123456789成功==========\033[0m"
275 else
276 echo -e "\033[31m**********数据库root密码修改为123456789失败,为空**********\033[0m"
277 fi
278 }
279
280 #(3)编译安装php
281 install_php(){
282 cd /software
283 PHPVERS=7.4.26 #php版本
284 DLOAD_PHP=https://www.php.net/distributions/php-$PHPVERS.tar.bz2 #PHP下载地址
285
286 #1、下载php
287 [ ! -f php-$PHPVERS.tar.bz2 ] && echo -e "\033[36m正在下载php源码包...\033[0m" && curl -O $DLOAD_PHP
288
289 #2、解压php
290 [ ! -d php-$PHPVERS/ ] && tar jxvf php-$PHPVERS.tar.bz2
291 echo -e "\033[36m编译安装php需要很长时间,请慢慢等待...\033[0m"
292 sleep 3
293 cd php-$PHPVERS/
294
295 #3、编译安装
296 ./configure --prefix=/usr/local/php7 \
297 --with-apxs2=/usr/local/httpd/bin/apxs \
298 --with-config-file-path=/usr/local/php7/etc \
299 --with-mysql=/usr/local/mysql \
300 --with-pdo-mysql \
301 --with-mysqli \
302 --with-libxml-dir \
303 --with-gd \
304 --with-jpeg-dir \
305 --with-png-dir \
306 --with-freetype-dir \
307 --with-iconv-dir \
308 --with-zlib-dir \
309 --with-bz2 \
310 --with-openssl \
311 --with-mcrypt \
312 --enable-soap \
313 --enable-gd-native-ttf \
314 --enable-mbstring \
315 --enable-sockets \
316 --enable-exif && make -j 2 && make -j 2 install
317
318 if [ $? -eq 0 ]
319 then
320 echo -e "\033[36m==========php编译安装成功==========\033[0m"
321 else
322 echo -e "\033[31m**********php编译安装失败,请检查**********\033[0m"
323 exit 1
324 fi
325
326 #4、配置php服务文件
327 [ ! -d /usr/local/php7/etc/ ] && mkdir /usr/local/php7/etc/
328 \cp php.ini-production /usr/local/php7/etc/php.ini
329
330 echo -e "\033[36m==========PHP安装步骤完成==========\033[0m"
331 }
332
333 #(4)整合httpd和php
334 config_lamp(){
335 cd /usr/local/httpd
336
337 #1、修改httpd配置文件
338
339 sed -i 's/#ServerName www.example.com:80/ServerName www.example.com:80/' conf/httpd.conf
340 sed -i '205s/Require all denied/Require all granted/' conf/httpd.conf
341 sed -i 's/DirectoryIndex index.html/DirectoryIndex index.html index.php/' conf/httpd.conf
342
343 if [ `grep "AddType application/x-httpd-php .php" conf/httpd.conf |wc -l` -eq 0 ]
344 then
345 sed -i '/AddType application\/x-gzip .gz .tgz/a\ AddType application\/x-httpd-php .php' conf/httpd.conf
346 fi
347 #sed -i 's/#Include conf\/extra\/httpd-vhosts.conf/Include conf\/extra\/httpd-vhosts.conf/' conf/httpd.conf
348
349 #2、配置虚拟主机
350 cat > conf/extra/httpd-vhosts.conf << EOF
351 #80>
352 # ServerAdmin webmaster@$VHOST_COM
353 # DocumentRoot "/usr/local/httpd/docs/$VHOST_COM"
354 # ServerName $VHOST_COM
355 # ServerAlias www.$VHOST_COM
356 # ErrorLog "logs/$VHOST_COM-error_log"
357 # CustomLog "logs/$VHOST_COM-access_log" common
358 #
359 EOF
360 [ ! -d /usr/local/httpd/docs/$VHOST_COM ] && mkdir -pv /usr/local/httpd/docs/$VHOST_COM
361
362 #3、关闭SELinux、防火墙
363 setenforce 0 && sed -i 's/enforcing/disabled/g' /etc/selinux/config
364 systemctl stop firewalld && systemctl disable firewalld
365
366 #4、创建测试页,备份httpd默认的页面
367
368 cat > htdocs/1.php << EOF
369 <?php
370 echo "php解析正常";
371 ?>
372 EOF
373 if [ `httpd -M |grep "php7_module (shared)" |wc -l` -eq 1 ]
374 then
375 echo -e "\033[36m==========整合httpd和php成功==========\033[0m"
376 else
377 echo -e "\033[31m**********整合httpd和php失败,请检查**********\033[0m"
378 fi
379 }
380
381 #(5)启动httpd、mysql服务
382 start_service(){
383 /usr/bin/httpd start #启动httpd
384
385 if [ $? -eq 0 ]
386 then
387 echo -e "\033[36m==========httpd服务启动成功==========\033[0m"
388 else
389 echo -e "\033[31m**********httpd服务启动失败**********\033[0m"
390 fi
391
392 systemctl start mysqld
393
394 if [ $? -eq 0 ]
395 then
396 sleep 3
397 echo -e "\033[36m==========mysql服务启动成功==========\033[0m"
398 echo -e "\033[33m查看端口启用情况:\033[0m"
399 ss -tnl
400 echo -e "\033[33m端口:80、3306已启动!\033[0m"
401 echo -e "\033[36m==========编译安装lamp已完成==========\033[0m"
402 echo -e "\033[36m--------打开浏览器输入你的ip/1.php,看看测试页--------\033[0m"
403 else
404 echo -e "\033[31m**********mysql服务启动失败**********\033[0m"
405 fi
406 }
407
408 #脚本运行入口
409 run_install(){
410 while true;do
411 menu
412
413 case $num in
414 "0")
415 #0、安装依赖包
416 echo -e "\033[34m==========安装依赖包==========\033[0m"
417 install_package
418 ;;
419 "1")
420 #1、编译安装httpd
421 echo -e "\033[34m==========编译安装httpd==========\033[0m"
422 install_httpd
423 ;;
424 "2")
425 #2、编译安装mysql
426 echo -e "\033[34m==========编译安装mysql==========\033[0m"
427 install_mysql
428 ;;
429 "3") #3、编译安装php
430 echo -e "\033[34m==========编译安装php==========\033[0m"
431 install_php
432 ;;
433 "4") #4、整合httpd和php
434 echo -e "\033[34m==========整合httpd和php==========\033[0m"
435 config_lamp
436 ;;
437 "5") #5、启动httpd、mysql服务
438 echo -e "\033[34m==========启动httpd、mysql服务==========\033[0m"
439 start_service
440 ;;
441 "6") #6、一键编译安装lamp
442 echo -e "\033[34m==========一键编译安装并配置lamp==========\033[0m"
443 install_package
444 install_httpd
445 install_mysql
446 install_php
447 config_lamp
448 start_service
449 exit 0
450 ;;
451 "7") #7、退出脚本
452 exit 0
453 ;;
454 *)
455 ;;
456 esac
457 done
458 }
459
460 #调用脚本运行入口
461 run_install