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 指定安装目录为 installpath指定安装目录为install_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