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 #<VirtualHost *: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 #</VirtualHost> 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