LAMP环境一键部署


  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

相关