脚本安装LAMP(详细解读)

本文详细介绍了一种使用Shell脚本自动化安装LAMP(Linux + Apache + MySQL + PHP)架构的方法,涵盖了从依赖安装到配置的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


LAMP架构 = Linux + apache + mysql + php

本文主要讲解一下笔者写的脚本安装LAMP

脚本分为4个shell脚本(附在文章最后),将为读者详细解读。

资源包+脚本下载:

链接:https://pan.baidu.com/s/1026ZRiKNhcuT4GMrKr9noQ
提取码:ib99

下载完成后,进入LAMP目录,先为4个脚本赋予执行权限

chmod +x *.sh

入口脚本

install_lamp.sh

#!/bin/bash
./install_apache.sh
./install_mysql.sh
./install_php.sh

该脚本作用是作为脚本入口,按顺序调用其他三个脚本,其他三个脚本的作用分别是安装apache、安装MySQL、安装php

安装apache

install_apache.sh

变量

在脚本开头定义了许多变量,这样在不同的环境下只需修改脚本开头对应的变量,而不必再去修改shell语句

apr_package="apr-1.6.2.tar.gz"
apr_util_package="apr-util-1.6.0.tar.gz"
apache_package="httpd-2.4.29.tar.bz2"
httpd_sdir=${apache_package%.tar.*}
server_name="www.installhttpd.com"
ip_port="192.168.218.6:80"
install_path="/usr/local/httpd"

变量分别对应的意义是:

1.apr安装包名称

2.apr-util安装包名称

3.apache安装包名称

4.apache安装包解压后的源码目录

5.apache配置文件中的主机名

6.apache配置文件中的IP:port

7.apache安装路径

安装apache依赖环境

echo -e "\033[34myum installing httpd dependence...\033[0m"
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl &>/dev/null

解压源码包

tar xf $apache_package
tar -xf $apr_package 
tar -xf $apr_util_package
mv ${apr_package%.tar.*} $httpd_sdir/srclib/apr
mv ${apr_util_package%.tar.*} $httpd_sdir/srclib/apr-util

解压源码包,包括apache、apr、apr-util,然后将apr、apr-util目录移动到apache目录中的srclib/下并命名为apr、apr-util

apr、apr-util包的作用:

https://blog.51cto.com/wgkgood/432272

编译安装

cd $httpd_sdir
echo -e "\033[34mconfigure httpd...\033[0m"
./configure \
--prefix=$install_path \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi &>/dev/null
make &>/dev/null
make install &>/dev/null

进入apache源码目录中,用./configure编译安装

​ --prefix= i n s t a l l p a t h 指 定 安 装 目 录 为 install_path 指定安装目录为 installpathinstall_path

​ --enable-so 使用动态加载模块支持

​ --enable-rewrite 使用rewrite模块(地址重写功能)

​ --enable-charset-lite 使用字符集支持

​ --enable-cgi 使用cgi脚本程序支持

make进行编译,最后make install

使用service控制httpd

cp $install_path/bin/apachectl /etc/init.d/httpd
sed -i '2a# chkconfig: 35 85 21' /etc/init.d/httpd
sed -i '3a# description: Apache is a World Wide Web server' /etc/init.d/httpd
chkconfig --add httpd

因为service服务的可执行文件都放在/etc/init.d/目录下,将apachectl复制一份放到该目录下并命名为httpd,添加service服务后可使用service命令控制httpd(apache)服务

cp 复制可执行文件apachectl到/etc/init.d/httpd

使用sed在httpd文件开头加入两句话,据说是官方的要求,至于为什么,笔者也不知道了

最后用chkconfig把httpd添加为service服务

修改httpd.conf配置文件

sed -i "197cServerName $server_name" $install_path/conf/httpd.conf 

把httpd.conf文件中的主机名设置为变量server_name的内容,也可以根据实际情况去修改如配置文件中监听的ip和端口(变量在脚本开头有定义)

创建软链接

ln -s $install_path/conf/httpd.conf /etc/
ln -s $install_path/bin/* /usr/local/bin/
echo -e "\033[32muse <service httpd start> to run httpd! \033[0m"

apache的配置文件路径有点长,每次去配置都要写很长的路径就比较麻烦,可以在/etc/目录下创建一个软链接,这样配置起来就比较方便

另外apache的可执行文件在安装目录的/bin/目录下,使用的时候要写绝对路径,同样也不方便,我们在/usr/local/bin/目录下创建了apache的bin目录下的所有文件的软链接,这样在使用命令的时候就可以直接使用,也可以tab补全

apache安装完成!

安装MySQL

注:

mysql5.6和mysql5.7是不同的两个大版本,安装过程有所不同

本脚本用于安装mysql5.6或以下版本

变量

mysql_package='mysql-5.6.26.tar.gz'
datadir='/home/mysql'
install_path="/usr/local/mysql"

还是和安装apache一样,脚本开头定义一些变量,以后针对不同环境直接修改变量即可

1.MySQL安装包名称

2.数据存放目录

3.安装目录

安装mysql依赖环境

echo -e "\033[34m yum installing mysql dependence... \033[0m"
yum -y install \
ncurses-devel \
autoconf \
cmake

解压mysql源码包

tar -xf $mysql_package

编译安装mysql

echo -e "\033[34m start install mysq... \033[0m"
cd  ${mysql_package%.tar.*}
cmake  \
-DCMAKE_INSTALL_PREFIX=$install_path \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
make
make install

进入mysql源码目录,使用cmake命令

​ -DCMAKE_INSTALL_PREFIX 指定安装目录

​ -DDEFAULT_CHARSET 指定字符集

​ -DDEFAULT_COLLATION 指定排序规则

​ -DEXTRA_CHARSETS 使用额外的字符集类型(默认为all)

​ -DSYSCONFIDIR 指定配置文件目录

​ -DMYSQL_DATADIR 指定数据目录路径

​ -DMYSQL_UNIX_ADDR 指定socket路径

完成后make编译,make install安装

这个过程所花时间会比较长,所以在前面的配置中不能出错,不然安装到一半突然一个error……

更换配置文件

rm -rf /etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf

安装后会自动生成一个默认的配置文件,我们用源码目录下的support-files/my-default.cnf替换它

配置mysql的service服务

cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on

复制support-files/mysql.server到/etc/init.d/并命名为mysqld,

设置权限为755,

使用chkconfig添加service服务,

使用–level参数将其的运行级别设置为3、5

修改环境变量

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

把安装路径的bin/添加到环境变量,这样命令行就可以识别mysql的命令

也可以使用安装apache时创建软链接的方法让系统识别命令

添加mysql用户

useradd -s /sbin/nologin mysql

添加一个名为mysql的程序用户,这是为mysqld服务运行设置的用户,不需要登陆

修改安装目录的权限

chown -R mysql:mysql $install_path

把属主修改为mysql,属组修改为mysql(用户mysql的同名组)

初始化数据目录

$install_path/scripts/mysql_install_db \
--user=mysql  \
--ldata=/var/lib/mysql \
--basedir=$install_path \
--datadir=/home/mysql

–user 指定运行用户

–basedir 指定安装路径

–datadir 指定数据目录

创建套接字软链接

ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock

将套接字软链接放在/home/mysql/目录下

修改可执行文件mysqld

sed -i -e "46cbasedir=$install_path" -e "47cdatadir=$datadir" /etc/init.d/mysqld
echo -e "\033[32m use <service mysqld start> to run mysql \033[0m"
echo -e "\033[32m use <mysql_secure_installation> to resete passwd! \033[0m"

修改mysqld中安装目录和数据目录

mysql安装完成~

用source /etc/profile重载/etc/profile文件

用service mysqld start开启mysql

用mysql_secure_installation修改用户root密码(初始为空)

安装PHP

变量

php_package="php-5.6.11.tar.bz2"
install_path="/usr/local/php5"
mysql_path="/usr/local/mysql"
httpd_path="/usr/local/httpd"

1.php的包名称

2.安装路径

3.mysql的安装路径

4.httpd的安装路径

因为LAMP中php用于处理动态请求,故需在配置中设定mysql的安装路径和httpd的安装路径

安装php依赖环境

echo -e "\033[34myum installing php dependence...\033[0m"
yum -y install \
gd \
libpng \
libpng-devel \
pcre \
pcre-devel \
libxml2-devel \
libjpeg-devel

解压并编译安装php

tar -xf $php_package
cd ${php_package%.tar.*}
echo -e "\033[34mstart install php...\033[0m"
./configure \
--prefix=$install_path \
--with-gd \
--with-zlib \
--with-apxs2=$httpd_path/bin/apxs \
--with-mysql=$mysql_path \
--with-config-file-path=$install_path \
--enable-mbstring
make
make install

解压源码包,进入目录后进行编译解压

​ --prefix 指定安装路径
​ --with-gd 支持gd扩展
​ --with-zlib 支持zlib
​ --with-apxs2 支持apache
​ --with-mysql 支持mysql
​ --with-config-file-path 指定配置文件目录
​ --enable-mbstring 支持mbstring库

配置完成后make编译,make install安装

复制配置文件

cp php.ini-development $install_path/php.ini

把源码目录下的php.ini-development复制到安装目录下并命名为php.ini

创建软链接

ln -s $install_path/bin/* /usr/local/bin/

将php安装目录下bin的所有文件创建软链接到/usr/local/bin/下,使得命令行可识别

修改httpd配置文件

sed -i -e '395a    AddType application/x-httpd-php .php\n    AddType application/x-httpd-php-source .phps' -e '/DirectoryIndex index.html/s/index.html/index.php index.html/' $httpd_path/conf/httpd.conf

添加:

​ AddType application/x-httpd-php .php

​ AddType application/x-httpd-php-source .phps

​ 让apache解析php代码

修改

​ DirectoryIndex中的index.html为index.php,设定默认网页

添加测试网页

printf "<?php\nphpinfo();\n?>" >> $httpd_path/htdocs/index.php

在apache的站点中添加php网页

开启httpd服务(apache)

开启mysqld

访问站点http://localhost

在这里插入图片描述

到此LAMP架构搭建完成,下面是完整脚本

install_lamp.sh

#!/bin/bash
./install_apache.sh
./install_mysql.sh
./install_php.sh

install_apache.sh

#!/bin/bash
apr_package="apr-1.6.2.tar.gz"
apr_util_package="apr-util-1.6.0.tar.gz"
apache_package="httpd-2.4.29.tar.bz2"
httpd_sdir=${apache_package%.tar.*}
server_name="www.installhttpd.com"
ip_port="192.168.218.6:80"

install_path="/usr/local/httpd"

echo -e "\033[34myum installing httpd dependence...\033[0m"
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl &>/dev/null
tar xf $apache_package
tar -xf $apr_package 
tar -xf $apr_util_package
mv ${apr_package%.tar.*} $httpd_sdir/srclib/apr
mv ${apr_util_package%.tar.*} $httpd_sdir/srclib/apr-util
cd $httpd_sdir
echo -e "\033[34mconfigure httpd...\033[0m"
./configure \
--prefix=$install_path \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi &>/dev/null
make &>/dev/null
make install &>/dev/null 
cp $install_path/bin/apachectl /etc/init.d/httpd
sed -i '2a# chkconfig: 35 85 21' /etc/init.d/httpd
sed -i '3a# description: Apache is a World Wide Web server' /etc/init.d/httpd
chkconfig --add httpd
sed -i "197cServerName $server_name" $install_path/conf/httpd.conf 
ln -s $install_path/conf/httpd.conf /etc/
ln -s $install_path/bin/* /usr/local/bin/
echo -e "\033[32muse <service httpd start> to run httpd! \033[0m"

install_mysql.sh

#!/bin/bash
mysql_package='mysql-5.6.26.tar.gz'
datadir='/home/mysql'
install_path="/usr/local/mysql"

echo -e "\033[34m yum installing mysql dependence... \033[0m"
yum -y install \
ncurses-devel \
autoconf \
cmake  
tar -xf $mysql_package
echo -e "\033[34m start install mysq... \033[0m"
cd  ${mysql_package%.tar.*}

cmake  \
-DCMAKE_INSTALL_PREFIX=$install_path \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock

make
make install
rm -rf /etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
useradd -s /sbin/nologin mysql
chown -R mysql:mysql $install_path

$install_path/scripts/mysql_install_db \
--user=mysql  \
--ldata=/var/lib/mysql \
--basedir=$install_path \
--datadir=/home/mysql

ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
sed -i -e "46cbasedir=$install_path" -e "47cdatadir=$datadir" /etc/init.d/mysqld
echo -e "\033[32m use <service mysqld start> to run mysql \033[0m"
echo -e "\033[32m use <mysql_secure_installation> to resete passwd! \033[0m"

install_php.sh

#!/bin/bash
php_package="php-5.6.11.tar.bz2"
install_path="/usr/local/php5"
mysql_path="/usr/local/mysql"
httpd_path="/usr/local/httpd"
echo -e "\033[34myum installing php dependence...\033[0m"
yum -y install \
gd \
libpng \
libpng-devel \
pcre \
pcre-devel \
libxml2-devel \
libjpeg-devel

tar -xf $php_package
cd ${php_package%.tar.*}
echo -e "\033[34mstart install php...\033[0m"
./configure \
--prefix=$install_path \
--with-gd \
--with-zlib \
--with-apxs2=$httpd_path/bin/apxs \
--with-mysql=$mysql_path \
--with-config-file-path=$install_path \
--enable-mbstring
make
make install

cp php.ini-development $install_path/php.ini
ln -s $install_path/bin/* /usr/local/bin/

sed -i -e '395a    AddType application/x-httpd-php .php\n    AddType application/x-httpd-php-source .phps' -e '/DirectoryIndex index.html/s/index.html/index.php index.html/' $httpd_path/conf/httpd.conf
printf "<?php\nphpinfo();\n?>" >> $httpd_path/htdocs/index.php

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值