在CentOS7上编译安装新版LAMP并搭建wordpress博客,附一键安装脚本(编译安装)

前言

目前最新的CentOS发行版为7.3,当我们用yum安装LAMP的时候我们会发现在默认yum源中的LAMP版本都相对比较旧,但是我们又想用最新版的程序,那怎么办呢?那就下载最新版本的程序源码编译安装吧。


操作

准备部分

实验环境:CentOS7.3 1611
内存最好大于1G

清除系统限制

清除系统限制主要内容是防火墙和selinux

systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #设置防火墙开机不启动
setenforce 0 #selinux设置为允许状态(暂时)

selinux设置永久生效之前的博客也提过,更改/etc/selinux/config中的SELINUX=后面的值然后重起生效


关于yum源

由于编译安装过程中需要不少工具,所以需要配置好yum源。
base源最好用本地的,epel我配置的阿里的。下面给出一个base源和epel源都是阿里的yum源。

[base]
name=base
baseurl=https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/
gpgcheck=0
enable=0

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
enable=0

配置好yum源之后别忘了yum clean all清理一下yum的缓存


清除已有的httpd和mariadb(mysql)

yum -y remove *mariadb*
yum -y remove *httpd*


安装所需要的各种工具

yum -y install bzip2 gzip wget pcre-devel openssl-devel libxml2-devel bzip2-devel libmcrypt-devel libaio*
yum -y groupinstall "development tools" #安装开发包组

这一步有兴趣的朋友可以试试不安装然后去编译尝试一下,会有提示报错缺少工具包的,但是开发包组是必须先安装的,不然没法编译安装,如果已经安装了就可以忽略了。


准备所需安装包

先在家目录创建一个名为src的目录放源码包。源码包的下载方式按各自习惯的方式下载,可以用win下载好了放到CentOS上,也可以直接在CentOS上直接wget获取。

注意:不管是什么方式获取源码包都建议放在src目录里

mkdir /root/src #创建目录
cd /root/src #进入该路径

因为默认内核并不是最新版的原因所以apr就不用目前最新版1.6.0了,用1.5.2,mariadb因为源码包过大编译安装需要比较长的时间,我这里就用二进制包代替了。

wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2 #下载apr源码包
wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2 #下载apr-util源码包
wget http://apache.fayea.com/httpd/httpd-2.4.27.tar.bz2 #下载httpd源码包
wget http://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.2.7/bintar-linux-x86_64/mariadb-10.2.7-linux-x86_64.tar.gz #下载mariadb二进制包
wget http://cn2.php.net/distributions/php-7.1.7.tar.bz2 #下载php源码包
wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN.tar.gz #下载wordpress程序包

包已经准备好了,下一步就是全部解压。在这里如果没有执行之前的工具包安装步骤的话就有可能出现解压失败,因为没有特定的压缩工具。

cd /root/src #移动到/root/src目录
ls |xargs -n1 tar xvf #解压目录下所有的包

准备工作到这里就基本结束,其实在编译安装过程中准备工作是非常重要的,很多细节出现错误就是因为准备工作没有做好,少工具包或者哪里忘了设置。


第一步,编译安装httpd

既然准备工作已经做完了,那么就可以开始安装了。

这里我直接把apr放在httpd里一起编译安装。

[root@mini7 ~]# cd /root/src
[root@mini7 src]# mv apr-1.5.2 httpd-2.4.27/srclib/apr #移动apr目录到httpd目录中并改名
[root@mini7 src]# mv apr-util-1.5.4 httpd-2.4.27/srclib/apr-util #移动apr-util目录到httpd目录中并改名
[root@mini7 src]# cd httpd-2.4.27/ #进入httpd目录
[root@mini7 httpd-2.4.27]# ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork #执行脚本
[root@mini7 httpd-2.4.27]# useradd -r apache -s /sbin/nologin #创建apache用户
[root@mini7 httpd-2.4.27]# make && make install 如果没有任何报错信息就执行编译安装

到这里httpd就算是编译安装完毕了。

注意:创建apache后要去配置文件/app/httpd24/conf/httpd.conf里把user和group改成apache


第二步,安装mariadb二进制包

二进制包不同于源码包,它是已经编译好了的程序,安装的过程有很多需要注意的细节,我下面一一列举。

[root@mini7 httpd-2.4.27]# cd /root/src #回到src目录
[root@mini7 src]# useradd -r mysql -s /sbin/nologin -d /app/mysqldb -m #创建mysql账号并建立家目录
[root@mini7 src]# mv mariadb-10.2.7-linux-x86_64 /usr/local/mysql #移动解压出来了的包路径到/usr/local/下并改名为mysql(因为这个包在编译的时候就是在/usr/local下所以必须放在这里或者创建一个软链接)
[root@mini7 src]# chgrp -R mysql /usr/local/mysql #递归更改属组
[root@mini7 src]# cd /usr/local/mysql #移动到mysql目录下
[root@mini7 mysql]# scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql #执行脚本生成数据(执行后下面第一句提示如果显示OK表示成功)
[root@mini7 mysql]# mkdir /etc/mysql #创建mysql配置文件目录
[root@mini7 mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf #复制配置文件模板到/etc/mysql路径下
[root@mini7 mysql]# vim /etc/mysql/my.cnf #打开配置文件
在[mysqld]下添加以下三行并保存退出
datadir =/app/mysqldb
innodb_file_per_table = ON
skip_name_resolve = ON
[root@mini7 mysql]# cp support-files/mysql.server /etc/init.d/mysqld #复制mysql启动脚本到/etc/init.d下并改名为mysqld
[root@mini7 mysql]# chkconfig --add mysqld #添加到chkconfig列表
[root@mini7 mysql]# echo "export PATH=/app/httpd24/bin:/usr/local/mysql/bin:$PATH" > /etc/profile.d/app.sh #设置环境变量,顺便把httpd的也设置了
[root@mini7 mysql]# source /etc/profile.d/app.sh #生效环境变量
[root@mini7 mysql]# service mysqld start #启动mysqld服务,这里要注意的是如果之前没有卸载掉mariadb-libs这个包的话这里是无法启动的
[root@mini7 mysql]# mysql -e "create database blog;grant all on *.* to 'blog'@'localhost' identified by 'blog';" #这一段是mysql语句,可以直接进入mysql再一步一步执行,但是这样在命令行执行个人觉得要效率一些。意思是创建一个名为blog的数据库,授权并创建一个名为blog的账号密码设置为blog,这些信息可以按照自己的需求更改

以上便是安装mariadb二进制包的方法过程


第三步,编译安装php

嗯,不要说话,看操作。

[root@mini7 mysql]# cd /root/src/php-7.1.7/ #进入php源码包路径
[root@mini7 php-7.1.7]# ./configure --prefix=/app/php --enable-mysqlnd  --with-mysqli=mysqlnd   --with-openssl --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/app/httpd24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 #执行脚本
[root@mini7 php-7.1.7]# make && make install #执行脚本后无错误便编译安装(如果执行了上面安装工具的命令那么这后面的编译安装过程是畅通无阻的)
[root@mini7 php-7.1.7]# cp php.ini-production  /etc/php.ini #复制php配置文件模板到/etc下并改名为php.ini
[root@mini7 php-7.1.7]# vim /app/httpd24/conf/httpd.conf #打开httpd的配置文件
在IfModule mime_module下添加两行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
在DirectoryIndex index.html后面添加 index.php
保存退出

到这里php安装完毕


第四步,部署wordpress

既然LAMP已经安装完毕,那么便开始部署wordpress吧。

[root@mini7 php-7.1.7]# cd /root/src #回到src目录
[root@mini7 src]# cp -a wordpress/* /app/httpd24/htdocs/ #复制wordpress程序到httpd网站目录下
[root@mini7 src]# chown -R apache /app/httpd24/htdocs #递归更改目录属主(为自动更新功能而设置)
[root@mini7 src]# cp /app/httpd24/htdocs/wp-config-sample.php /app/httpd24/htdocs/wp-config.php #复制一份配置文件模板进行更改
更改以下三项
define('DB_NAME', 'blog');

/** MySQL数据库用户名 */
define('DB_USER', 'blog');

/** MySQL数据库密码 */
define('DB_PASSWORD', 'blog');
保存退出
[root@mini7 src]# rm -f /app/httpd24/htdocs/index.html #删除httpd的测试页面
[root@mini7 src]# apachectl restart #重启httpd服务
[root@mini7 src]# service mysqld restart #重启mariadb服务

到此所有配置都完成,赶紧在浏览器中输入IP地址看看成果吧。


第五步,测试

激动人心的时刻到来,如果你是第一次搭建成功网站的话你一定会非常开心的。

如图,这样便是成功了!
后面我会附上基于适用于服务器的一键安装LAMP并搭建博客的脚本。


LAMP一键安装脚本(编译安装)

该脚本用于安装工具的yum源是阿里的,安装过程中首先会下载各个软件包,其中mariadb的二进制包非常大,下载速度可能会比较慢,而且下载链接在未来说不定会失效,所以建议事先下载好了之后放在src目录下,脚本会自动判断包是否存在。

#!/bin/bash
#name:LAMP.sh
#version:1.1
#author:Driver_C
#blog:http://chenjingyu.cn
#time:2017-08-06

#定义变量
export MAR=`rpm -qa *mariadb*`
export HTT=`rpm -qa *httpd*`
export MAR_USER=`getent passwd mysql`
export HTT_USER=`getent passwd apache`

#配置yum源
fun_yum(){
cat << EOF > /etc/yum.repos.d/lampx.repo
[base]
name=base
baseurl=https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/
gpgcheck=0

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
EOF
yum clean all
}

#准备部分
fun_prepare(){
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -ri.bak 's/(^SELINUX=).*/\1permissive/' /etc/selinux/config
echo "export PATH=/app/httpd24/bin:/usr/local/mysql/bin:PATH">/etc/profile.d/app.sh
source /etc/profile.d/app.sh
if [ -n "MAR" ];then
        yum -y remove *mariadb*
fi
if [ -n "HTT" ];then
    yum -y remove *httpd*
fi
yum -y install bzip2 gzip wget pcre-devel openssl-devel libxml2-devel bzip2-devel libmcrypt-devel libaio*
yum -y groupinstall "development tools"
if [ -e /root/src ];then
    cd /root/src
    if [[ ! -e /root/src/apr-1.5.2.tar.bz2 ]];then
        wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2
        tar xvf apr-1.5.2.tar.bz2
    else
        tar xvf apr-1.5.2.tar.bz2
    fi
    if [[ ! -e /root/src/apr-util-1.5.4.tar.bz2 ]];then
        wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2
        tar xvf apr-util-1.5.4.tar.bz2
    else
        tar xvf apr-util-1.5.4.tar.bz2
    fi
    if [[ ! -e /root/src/httpd-2.4.27.tar.bz2 ]];then
        wget http://apache.fayea.com/httpd/httpd-2.4.27.tar.bz2
        tar xvf httpd-2.4.27.tar.bz2
    else
        tar xvf httpd-2.4.27.tar.bz2
    fi
    if [[ ! -e /root/src/mariadb-10.2.7-linux-x86_64.tar.gz ]];then
        wget http://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.2.7/bintar-linux-x86_64/mariadb-10.2.7-linux-x86_64.tar.gz
        tar xvf mariadb-10.2.7-linux-x86_64.tar.gz
    else
        tar xvf mariadb-10.2.7-linux-x86_64.tar.gz
    fi
    if [[ ! -e /root/src/php-7.1.7.tar.bz2 ]];then
        wget http://cn2.php.net/distributions/php-7.1.7.tar.bz2
        tar xvf php-7.1.7.tar.bz2
    else
        tar xvf php-7.1.7.tar.bz2
    fi
    if [[ ! -e /root/src/wordpress-4.8-zh_CN.tar.gz ]];then
        wget wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN.tar.gz
        tar xvf wordpress-4.8-zh_CN.tar.gz
    else
        tar xvf wordpress-4.8-zh_CN.tar.gz
    fi
else
    mkdir /root/src
    cd /root/src
    wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2
    wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2
    wget http://apache.fayea.com/httpd/httpd-2.4.27.tar.bz2
    wget http://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.2.7/bintar-linux-x86_64/mariadb-10.2.7-linux-x86_64.tar.gz
    wget http://cn2.php.net/distributions/php-7.1.7.tar.bz2
    wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN.tar.gz
    ls | xargs -n1 tar xvf
fi
}

#httpd编译安装
fun_httpd(){
cd /root/src
mv apr-1.5.2 httpd-2.4.27/srclib/apr
mv apr-util-1.5.4 httpd-2.4.27/srclib/apr-util
cd httpd-2.4.27/
./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make && make install
if [ -z "HTT_USER" ];then
    useradd -r apache -s /sbin/nologin
fi
sed -ri 's/(User )daemon/\1apache/' /app/httpd24/conf/httpd.conf
sed -ri 's/(Group )daemon/\1apache/' /app/httpd24/conf/httpd.conf
}

#mariadb二进制包安装
fun_mariadb(){
cd /root/src
if [ -z "$MAR_USER" ];then
    useradd -r mysql -s /sbin/nologin -d /app/mysqldb -m
fi
mv mariadb-10.2.7-linux-x86_64 /usr/local/mysql
chgrp -R mysql /usr/local/mysql
cd /usr/local/mysql
scripts/mysql_install_db --datadir=/app/mysqldb --user=mysql
[[ ! -e /etc/mysql ]] && mkdir /etc/mysql
cp support-files/my-huge.cnf /etc/mysql/my.cnf
sed -ri '/\[mysqld\]/a\datadir =/app/mysqldb\ninnodb_file_per_table = ON\nskip_name_resolve = ON' /etc/mysql/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
mysql -e "create database blog;grant all on *.* to 'blog'@'localhost' identified by 'blog';"
}

#php编译安装
fun_php(){
cd /root/src/php-7.1.7/
./configure --prefix=/app/php --enable-mysqlnd  --with-mysqli=mysqlnd   --with-openssl --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/app/httpd24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
make && make install
cp php.ini-production  /etc/php.ini
sed -ri '/IfModule mime_module/a\    AddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps' /app/httpd24/conf/httpd.conf
sed -ri 's/(^[[:space:]]+DirectoryIndex).*/\1 index.html index.php/' /app/httpd24/conf/httpd.conf
}

#wordpress安装
fun_wordpress(){
cd /root/src
cp -a wordpress/* /app/httpd24/htdocs/
chown -R apache /app/httpd24/htdocs
cp /app/httpd24/htdocs/wp-config-sample.php /app/httpd24/htdocs/wp-config.php
sed -ri 's/database_name_here/blog/' /app/httpd24/htdocs/wp-config.php
sed -ri 's/username_here/blog/' /app/httpd24/htdocs/wp-config.php
sed -ri 's/password_here/blog/' /app/httpd24/htdocs/wp-config.php
rm -f /app/httpd24/htdocs/index.html
}

#main
fun_yum
fun_prepare
fun_httpd
fun_mariadb
fun_php
fun_wordpress
apachectl restart
service mysqld restart
echo "安装完成"
echo "数据库账号密码均为:blog"
echo "请登陆网站检查结果"

#unset
unset  MAR HTT MAR_USER HTT_USER

exit


最后说一句

如果有朋友想转载本文章的还请注明转载信息,谢谢。最后说一下我个人对于编译安装LAMP和yum安装LAMP的一些看法。我觉得编译安装更适合习惯捣鼓CentOS体验新软件的朋友,又或者因为方便管理的原因而选择编译安装的朋友,并不适合刚接触CentOS的新手和只是想做个网站并不想学习CentOS的朋友。所以在选择安装方式的时候建议先给自己定个位,选择适合自己的情况的安装方式,因为编译安装要比yum安装麻烦许多,需要注意的问题也要多不少,安装效率上也不及yum安装,对编译安装过程并不了解的话一旦选择编译安装就麻烦不断了。