• 【网络服务&数据库教程】05 LAMP 部署


    img

    LAM(M)P:

    L: linux

    A: apache (httpd)

    M: mysql, mariadb

    M: memcached

    P: php, perl, python

    img

    CGI 和 FastCGI 协议可以让 Apache 或者 Web服务把动态请求转发到后端处理动态页面的服务器。

    img

    客户端需要知道其访问网址,通过浏览器通过DNS解析获取其对应的IP地址。Apache 具有网页文件共享的服务。当Apache (Http)找到的是 html 超文本文件,就会传输到客户端的浏览器进行解析渲染。

    PHP 应用的需要服务器端安装 PHP 解析器。PHP解析后的程序交给Apache服务器后传输到客户端的浏览器。

    Web 网站平台 - LAMP

    img

    Linux + Apache + MySQL+ PHP

    • Apache:实现网页共享传输
    • MySQL:实现数据存储
    • PHP:实现页面解析的解析器

    浏览器:仅能解析简单的HTML语言,无法直接解析PHP语言

    部署方式:

    yum安装:

    • 优点:安装部署便捷,快速
    • 缺点:软件版本固定,且版本较低

    源码安装:

    • 优点:版本可自选,可自定义性强
    • 缺点:难度较大,维护相对困难

    1 CentOS 6 搭建LAMP准备工作

    环境要求:

    操作系统:CentOS 6.x 64位。关闭SELinux和 iptables防火墙

    1. 安装编译工具 gcc、 gcc-c++等。

    注意解决依赖关系,推荐使用yum安装,若不能联网可使用安装光盘做为yum源。

    a、编辑yum配置文件,启用本地光盘源(双光盘)

    #进行CentOS6的系统环境初始化
    
    #CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-x86_64-bin-DVD2.iso两张光盘一起挂载
    ~ for i in {0..2};do echo "- - -" >> /sys/class/scsi_host/host$i/scan ;done
    ~ mkdir -p /mnt/cdrom ; mount /dev/sr0 /mnt/cdrom
    ~ mkdir -p /mnt/media ; mount /dev/sr1 /mnt/media
    ~ cat > /etc/yum.repos.d/CentOS-ISO.repo <<EOF
    [CentOS-ISO]
    name=CentOS-ISO
    baseurl=file:///mnt/cdrom
            file:///mnt/media
    enabled=1
    gpgcheck=0
    EOF
    ~ yum repolist
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    img

    b、调正 yum 源配置文件引导优先级

    ~ mkdir /etc/yum.repos.d/repobak ; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak
    
    • 1

    c、安装 gcc,gcc-c++,make等工具

    yum install -y gcc gcc-c++ make
    
    • 1
    1. 关闭系统RPM安装包的 Apache、MySQL等服务

    为了防止rpm安装的软件和接下来安装的源码软件包冲突

    service httpd stop && service mysqld stop
    
    • 1

    确定rpm包安装的httpd 和 mysqld 不能开机自启动

    chkconfig httpd off ; chkconfig mysqld off
    
    • 1
    1. 关闭SELinux 和 iptables

    防止软件安装和调试过程被iptables和SELinux所限制,无法实现效果

    setenforce 0
    sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
    
    iptables -F ; service iptables stop
    chkconfig iptables off
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 拷贝源码包,解压解压缩

    建议将LAMP环境安装源码包统一存放在一个目录下,如/lamp,可以使用解压脚本解压缩。

    ~ unzip LAMP.zip
    Archive:  LAMP.zip
       creating: LAMP/
      inflating: LAMP/apr-1.4.6.tar.gz
      inflating: LAMP/apr-util-1.4.1.tar.gz
      inflating: LAMP/freetype-2.3.5.tar.gz
      inflating: LAMP/httpd-2.4.7.tar.gz
      inflating: LAMP/jpegsrc.v6b.tar.gz
      inflating: LAMP/libmcrypt-2.5.8.tar.gz
      inflating: LAMP/libpng-1.2.31.tar.gz
      inflating: LAMP/libxml2-2.9.1.tar.gz
      inflating: LAMP/mcrypt-2.6.8.tar.gz
     extracting: LAMP/memcached-1.4.17.tar.gz
      inflating: LAMP/mhash-0.9.9.9.tar.gz
      inflating: LAMP/mysql-5.5.48.tar.gz
      inflating: LAMP/ncurses-5.9.tar.gz
      inflating: LAMP/pcre-8.34.tar.gz
      inflating: LAMP/pecl-memcache-php7.zip
      inflating: LAMP/php-7.0.7.tar.gz
      inflating: LAMP/phpMyAdmin-4.1.4-all-languages.tar.gz
      inflating: LAMP/tar.sh
      inflating: LAMP/zlib-1.2.3.tar.gz
    
    ~ vim tar.sh
    #!/bin/bash
    mkdir /lamp
    DIR="/lamp"
    
    /bin/ls *.tar.gz > ls.list
    /bin/ls *.zip > zip.list
    
    for TAR in $(cat ls.list) ;do
      /bin/tar -xvf $TAR -C $DIR
    done
    for ZIP in $(cat zip.list) ;do
      /usr/bin/unzip $ZIP -d $DIR
    done
    
    /bin/rm -f ls.list zip.list
    
    ~ bash tar.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    1. 查看安装软件的磁盘空间是否充足

    保证软件能正常安装,空间不足时会导致软件安装失败

    df -Th
    
    • 1
    1. 源码软件包安装报错确认与解决方案

    echo $? #安装软件过程中由于频繁刷屏,建议在每个步骤结束后执行此命令

    ./configure #此步骤报错多是依赖关系没解决或是编译工具未安装(注意关键词提示)

    make #此步骤多是编译时选项参数书写错误、不存在、漏写等问题。

    #一般需要检查上一个步骤: ./configure --help

    注意:若遇到报错,最简答的办法是,找到问题解决后重新解压软件,重新安装,步骤最简洁

    2 CentOS 6 编译安装

    注意:每个源码包配置编译安装完成后,确认安装目录下是否生成安装文件(并确定目录是否正确)

    建议将安装路径指定为[–prefix=/usr/local/软件名]格式。

    img

    2.1 安装libxml2

    Libxml2是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。

    yum install -y libxml2 python-devel
    cd /lamp/libxml2-2.9.1/
    ./configure --prefix=/usr/local/libxml2/
    make && make install
    
    • 1
    • 2
    • 3
    • 4

    2.2 安装 libmcrypt

    libmcrypt是加密算法扩展库。支持DES,3DES,RIJNDAEL,Twofish,IDEA,GOST,CAST-256,ARCFOU,SERPENT、SAFER+等算法。

    cd /lamp/libmcrypt-2.5.8/
    ./configure --prefix=/usr/local/libmcrypt
    make && make install 
    
    • 1
    • 2
    • 3

    安装libltdl,也在libmcrypt源码目录中,非新软件

    cd /lamp/libmcrypt-2.5.8/libltdl/
    ./configure --enable-ltdl-install
    make && make install
    
    • 1
    • 2
    • 3

    2.3 安装 mhash

    mhash是基于离散数学原理的不可逆向的 php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。

    cd /lamp/mhash-0.9.9.9/
    ./configure
    make && make install
    
    • 1
    • 2
    • 3

    2.4 安装 mcrypt

    mcrypt 是 php里面重要的加密支持扩展库。mcrypt库支持20多种加密算法和8种加密模式

    cd /lamp/mcrypt-2.6.8/
    export LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib
    #变量:LD_LIBRARY_PATH变量用于指定libmcrypt 和 mhash的库的位置
    ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.5 安装 zlib

    zlib是提供数据压缩用的函式库,由Jean-loup Gailly 与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为1ibpng函式库所写的,后来普遍为许多软件所使用,此函式库为自由软件,使用 zlib授权。

    cd /lamp/zlib-1.2.3/
    ./configure
    vim Makefile
    CFLAGS=-O3 -DUSE_MMAP -fPIC
    #32位操作系统不需要添加-fPIC,64位操作系统需要添加-fPIC
    #找到CFLAGS=-O3 -DUSE_MMAP,在后面加入 -fPIC 变成(注意:小写f大写PIC,空格)
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.6 安装 libpng

    libpng软件包包含libpng 库,这些库被其他程式用于解码png图片

    cd /lamp/libpng-1.2.31/
    ./configure --prefix=/usr/local/libpng
    make && make install
    
    • 1
    • 2
    • 3

    2.7 安装 jpeg6

    jpeg6提供用于解码.jpg和.jpeg图片的库文件

    mkdir -p /usr/local/jpeg6/{bin,lib,include}
    mkdir -p /usr/local/jpeg6/man/man1
    #注意:此软件默认不会自动创建所需目录,所以目录必须手动建立
    
    yum install -y libtool*
    cd /lamp/jpeg-6b
    \cp -a /usr/share/libtool/config/config.sub ./
    \cp -a /usr/share/libtool/config/config.guess ./
    #复制libtool中的文件,覆盖jpeg6b中的文件(64位中的问题)
    ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    –enable-shared 与–enable-static参数分别为建立共享库和静态库使用的libtool

    2.8 安装 freetype

    FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,支持单色位图、反走样位图的渲染。

    cd /lamp/freetype-2.3.5/
    ./configure --prefix=/usr/local/freetype
    make && make install
    
    • 1
    • 2
    • 3

    2.9 安装 Apache

    a、源码包2.4.*版本中默认没有集成apr的依赖包,所以需要提前解决依赖问题。

    cp -a /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr
    cp -a /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util
    
    • 1
    • 2

    解压 apr和 apr-util,复制整个目录并取消目录上的版本号到指定位置,./configure 时会检测

    b、Apache默认需要依赖pcre软件,但由于Apache软件版本较高,则系统预安装的pcre无法使用,所以需要人为手动安装适合版本

    cd /lamp/pcre-8.34/
    ./configure
    make && make install 
    
    • 1
    • 2
    • 3

    c、Apache的加密传输模块mod_ssl,需要安装此软件产生

    yum install -y openssl-devel
    
    • 1

    d、httpd软件安装

    cd /lamp/httpd-2.4.7
    ./configure --prefix=/usr/local/apache2 \
    --sysconfdir=/usr/local/apache2/etc --with-included-apr \
    --enable-so --enable-deflate=shared --enable-expires=shared \
    --enable-rewrite=shared --enable-ssl
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    若前面配置 zlib 时没有指定安装目录,Apache配置时不要添加–with-z=/usr/local/zlib/参数,–enable-ssl选项是为了后期实现https提前设置的参数。

    e、启动 Apache 测试

    /usr/local/apache2/bin/apachectl start
    ps -aux | grep httpd
    #使用进程查看命令确认Apache是否启动,是否产生进程
    netstat -ntl | grep 80
    tcp        0      0 :::80                       :::*                        LISTEN
    #使用网络进程查看命令确认Apache是否启动,是否启动了80监听端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    报错提示:启动时提示/usr/local/apache2/modules/mod_deflate.so无权限,可关闭SELinux解决,类似此类. so文件不能载入或没有权限的问题,都是SELinux问题,MySQL和 Apache都可能有类似问题。,

    警告提示:发现启动服务提示: AHO0558: httpd:Could not reliably determine the server’s fullyqualified domain name,using localhost.localdomain. Set the 'ServerName’directive globallyto suppress this message.

    解决办法:打开主配置文件httpd.conf

    搜索ServerName(约在200行左右)。

    改为ServerName localhost:80(并且去掉前面的#注释)

    验证:通过浏览器输入地址访问: http://服务器IP,若显示“It works”即表明Apache 正常工作。

    ~ vim /usr/local/apache2/etc/httpd.conf
    ServerName localhost:80
    
    #检查Apache配置文件的语法
    ~ /usr/local/apache2/bin/apachectl -t
    Syntax OK
    
    ~ /usr/local/apache2/bin/apachectl restart
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    范例:浏览器访问 http://服务器IP

    img

    2.10 安装ncureses

    Ncurses提供字苻终端处理库,包括面板和菜单。它提供了一套控制光标,建立窗口,改变前景背景颜色以及处理鼠标操作的函数。使用户在字符终端下编写应用程序时绕过了那些恼人的底层机制。简而言之,他是一个可以使应用程序直接控制终端屏幕显示的函数库。

    yum install -y ncurses-devel
    cd /lamp/ncurses-5.9/
    ./configure --with-shared --without-debug --with-ada --enable-overwrite
    make && make install 
    #若不安装ncureses 编译MySQL时会报错
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.11 安装 cmake 和 bison

    mysql在5.5以后,不再使用./configure 工具,进行编译安装。而使用cmake 工具替代了./configure工具。bison是一个自由软件,用于自动生成语法分析器程序,可用于所有常见的操作系统。

    yum install -y cmake bison
    
    • 1

    2.12 安装 MySQL

    useradd -r -s /sbin/nologin -c "MySQL User" mysql
    
    #为MySQL软件创建运行用户,创建为系统用户,并限制此用户登录操作系统
    cd /lamp/mysql-5.5.48/
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 \
    -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306
    
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    选项详解:

    DCMAKE_INSTALL_PREFIX=/usr/ local/mysql 安装位置

    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 指定socket(套接字)文件位置

    -DEXTRA_CHARSETS=all 扩展字符支持

    -DDEFAULT_CHARSET=utf8 默认字符集

    -DDEFAULT_COLLATION=utf8_general_ci 默认字符校对

    -DWITH_MYISAM_STORAGE_ENGINE=1 安装myisam存储引擎

    -DWITH_INNOBASE_STORAGE_ENGINE=1 安装innodb存储引擎

    -DWITH_MEMORY_STORAGE_ENGINE=1 安装memory存储引擎

    -DWITH_READLINE=1 支持readline库

    -DENABLED_LOCAL_INFILE=1 启用加载本地数据

    -DMYSQL_USER=mysql 指定mysql运行用户

    -DMYSQL_TCP_PORT=3306 指定mysql端口。

    MySQL安装后需要调整相应配置文件和参数才能正常运行

    a、修改MySQL目录的用户归属

    cd /usr/local/mysql/
    chown -R root . 
    chown -R mysql data
    
    • 1
    • 2
    • 3

    b、生成配置文件,并初始化授权表

    cp -a /lamp/mysql-5.5.48/support-files/my-medium.cnf /etc/my.cnf
    
    • 1

    复制MvSQL配置文件到指定位置,覆盖掉系统自带文件

    cd /usr/local/mysql 
    ./scripts/mysql_install_db --user=mysql
    
    • 1
    • 2

    创建数据库授权表,初始化数据库,相当于安装完操作系统后的引导设置(添加第一个用户)

    报错提示:FATAL ERROR: Could not find ./bin/my _print_defaults

    原因:mysql_install_db 初始化所调用文件时使用的是相对路径,路径不在/usr/local/mysql时是无法调用my_print_defaults文件并初始化成功的。

    img

    c、启动MySQL服务

    用原本源代码的方式去使用和启动mysql

    ~ /usr/local/mysql/bin/mysqld_safe --user=mysql &
    
    ~ netstat -antl | grep 3306
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
    
    • 1
    • 2
    • 3
    • 4

    d、设定MySQL 密码

    /usr/local/mysql/bin/mysqladmin -uroot password 123456
    
    cp /usr/local/mysql/bin/* /usr/local/bin/
    
    • 1
    • 2
    • 3

    e、登录MySQL

    ~ mysql -uroot -p123456
    mysql> select User,Password from mysql.user;
    +------+-------------------------------------------+
    | User | Password                                  |
    +------+-------------------------------------------+
    | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | root |                                           |
    | root |                                           |
    | root |                                           |
    |      |                                           |
    |      |                                           |
    +------+-------------------------------------------+
    6 rows in set (0.00 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> use test;
    Database changed
    mysql> show tables;
    Empty set (0.00 sec)
    mysql> exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2.13 安装PHP

    cd /lamp/php-7.0.7/
    
    ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ \
    --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/libxml2/ \
    --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ \
    --with-freetype-dir=/usr/local/freetype/ --with-mcrypt=/usr/local/libmcrypt/ \
    --with-mysqli=/usr/local/mysql/bin/mysql_config \
    --enable-soap --enable-mbstring=all --enable-sockets \
    --with-pdo-mysql=/usr/local/mysql --with-gd --without-pear
    
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    选项详解:

    –with-config-file-path=/usr/local/php/etc/ 指定配置文件目录

    –with-apxs2=/usr/local/apache2/bin/apxs 指定apache动态模块位置

    –with-libxml-dir=/usr/local/libxm12/ 指定libxml位置

    –with-jpeg-dir=/usr/local/ jpeg6/ 指定jpeg位置

    –with-png-dir=/usr/local/libpng/ 指定libpng 位置

    –with-freetype-dir=/usr/local/freetype/ 指定freetype位

    –with-mcrypt=/usr/local/libmcrypt/ 指定libmcrypt位置

    –with-mysqli=/usr/local/mysql/bin/mysql_config 指定 mysqli 位置

    –with-gd 启用gd 库

    –enable-soap 支持soap服务

    –enable-mbstring=all 支持多字节,字符串

    –enable-sockets 支持套接字

    –with-pdo-mysql=/usr/local/mysql 启用mysql 的pdo模块支持

    –without-pear 不安装pear(安装pear需要连接互联网)

    PHP安装后需要调整相应配置文件和参数才能正常运行

    a、生成PHP配置文件

    mkdir /usr/local/php/etc
    cp -a /lamp/php-7.0.7/php.ini-development /usr/local/php/etc/php.ini
    
    • 1
    • 2

    b、修改Apache配置文件,使其识别*.php文件,并能通过php模块调用php进行页面解析

    vim /usr/local/apache2/etc/httpd.conf
        AddType application/x-httpd-php .php .phtml
        AddType application/x-httpd-php-source .phps
    
    • 1
    • 2
    • 3

    重启Apache服务

    /usr/local/apache2/bin/apachectl stop
    /usr/local/apache2/bin/apachectl start
    
    • 1
    • 2

    c、测试php页面是否能正常解析(即apache和php连通性)

    vim /usr/local/apache2/htdocs/test.php
    <?php
          phpinfo();
    ?>
    
    • 1
    • 2
    • 3
    • 4

    通过浏览器输入地址访问:http://Apache服务器地址/test.php

    img

    范例:查看Apache加载php模块

    vim /usr/local/apache2/etc/httpd.conf
    LoadModule php7_module        modules/libphp7.so
    
    • 1
    • 2

    2.14 为PHP安装openssl模块

    OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

    cd /lamp/php-7.0.7/ext/openssl/
    mv config0.m4 config.m4
    #将所需要的php配置文件调用到该目录下
    /usr/local/php/bin/phpize
    ./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.15 为PHP安装memcache模块

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

    unzip pecl-memcache-php7.zip
    cd pecl-memcache-php7
    /usr/local/php/bin/phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make && make install 
    
    #查看模块
    ~ ls /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
    memcache.so  opcache.so  openssl.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.16 修改 php 配置文件,使其识别并调用openssl和memcache 两个模块

    ~ vim /usr/local/php/etc/php.ini
    extension_dir="/usr/local/php/lib/php/extensions/no-debug-zts-20151012/"
    #取消分号注释,并添加以上路径(此路径来自于模块安装命令的结果)
    extension="openssl.so";
    extension="memcache.so";
    #添加以上两个库文件的调用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重启Apache,刷新phpinfo页面,并查看是否有两个新增的模块

    /usr/local/apache2/bin/apachectl stop
    /usr/local/apache2/bin/apachectl start
    #通过浏览器输入地址访问:http://Apache服务器地址/test.php
    
    • 1
    • 2
    • 3

    img

    img

    2.17 安装 memcached 服务

    yum install -y libevent-devel
    cd /lamp/memcached-1.4.17/
    ./configure --prefix=/usr/local/memcache
    make && make install
    useradd -r -s /sbin/nologin -c "Memcache User" memcache
    #添加memcache用户,此用户不用登录,不设置密码
    /usr/local/memcache/bin/memcached -umemcache &
    #启动memcache服务,并设置为后台运行
    netstat -an | grep :11211
    #检查memcache是否正常启动,并监听了11211端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    img

    2.18 安装 phpMyAdmin

    phpMyAdmin是一个以PHP 为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理 MySQL数据库。

    cp -a /lamp/phpMyAdmin-4.1.4-all-languages /usr/local/apache2/htdocs/phpmyadmin
    cd /usr/local/apache2/htdocs/phpmyadmin
    cp -a config.sample.inc.php config.inc.php
    vim config.inc.php
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    $cfg['Servers'][$i]['auth_type'] = 'http';
    #设置auth_type为http ,即设置为HTTP身份认证模式(新增即可)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过浏览器输入地址访问: http://Apache服务器地址/phpmyadmin/index. php

    用户名为root,密码为MySQL设置时指定的root密码123456

    img

    2.19 设置 Apache、MySQL、Memcache 开机自启

    借助系统自带脚本/etc/rc.local,此脚本开机后会自动加载,我们可以将源码安装的服务启动命令写入该脚本,间接实现开机自启动。

    ~ vim /etc/rc.local
    /usr/local/apache2/bin/apachectl start
    /usr/local/mysql/bin/mysqld_safe --user=mysql &
    /usr/local/memcache/bin/memcached -umemcache &
    
    • 1
    • 2
    • 3
    • 4

    扩展:重启机器查看端口

    ~ netstat -antlp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
    tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      2770/sshd
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      128417/mysqld
    tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      130042/memcached
    tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1596/rpcbind
    tcp        0      0 0.0.0.0:44145               0.0.0.0:*                   LISTEN      1654/rpc.statd
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2037/sshd
    tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1731/cupsd
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2123/master
    tcp        0     48 10.0.0.40:22                10.0.0.1:14698              ESTABLISHED 2770/sshd
    tcp        0      0 10.0.0.40:22                10.0.0.1:14699              ESTABLISHED 2774/sshd
    tcp        0      0 ::1:6010                    :::*                        LISTEN      2770/sshd
    tcp        0      0 :::42176                    :::*                        LISTEN      1654/rpc.statd
    tcp        0      0 :::11211                    :::*                        LISTEN      130042/memcached
    tcp        0      0 :::111                      :::*                        LISTEN      1596/rpcbind
    tcp        0      0 :::80                       :::*                        LISTEN      128527/httpd
    tcp        0      0 :::22                       :::*                        LISTEN      2037/sshd
    tcp        0      0 ::1:631                     :::*                        LISTEN      1731/cupsd
    tcp        0      0 ::1:25                      :::*                        LISTEN      2123/master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    扩展:博客网站部署

    ##http://www.typecho.org/
    mkdir typecho && cd typecho
    #最新版需要php-7.2版本
    wget https://github.com/typecho/typecho/releases/download/v0.9-13.12.12-release/0.9.13.12.12.-release.tar.gz 
    #使用typecho-0.9版本
    tar -xvf 0.9.13.12.12.-release.tar.gz && rm -f 0.9.13.12.12.-release.tar.gz
    cd ..
    cp -r build/ /usr/local/apache2/htdocs/blog
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    范例:浏览器地址栏打开http://10.0.0.40/blog/

    img

    根据安装选项进行安装即可。

    img

    2.20 项目迁移

    1. 把php项目拷贝到网站默认目录下: /usr/local/apache2/htdocs/**
    2. 使用phpMyAdmin创建网站所需数据库

    注意事项:注意目录权限和归属,防止权限过大或者权限过小

    拓展:让源码安装的服务能像rpm软件包一样进行管理

    借助源码包中写好的管理脚本即可,我们用Apache、MySQL、Memcache 举例说明

    3 CentOS 7 搭建LAMP准备工作

    环境要求:

    操作系统:CentOS 7.X 64位

    网络配置:nmtui字符终端图形管理工具或者直接编辑配置文件。

    关闭SELinux和 firewalld防火墙

    防火墙:

    • 临时关闭: systemctl stop firewalld
    • 永久关闭: systemctl disable firewalld .
    1. 安装编译工具 gcc、gcc-c++等

    注意解决依赖关系,推荐使用yum安装,若不能联网可使用安装光盘做为yum源

    a、编辑yum配置文件,启用本地光盘源(只有一张盘)

    ~ mkdir /mnt/cdrom
    ~ mount /dev/sr0 /mnt/cdrom
    ~ vim /etc/yum.repos.d/CentOS-ISO.repo
    [CentOS-ISO]
    name=CentOS-$releasever - Media
    baseurl=file:///mnt/cdrom
    gpgcheck=0
    enabled=1
    gpgcheck=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    ~ vim /etc/fstab
    /dev/sr0    /mnt/cdrom              iso9660 defaults        0 0
    
    ~ yum repolist
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    repo id                                              repo name                                                   status
    CentOS-ISO                                           CentOS-7 - Media                                            10,072
    repolist: 10,072
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    b、调整yum源配置文件引导优先级

    ~ mkdir /etc/yum.repos.d/repobak ;mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak
    
    • 1

    c、安装gcc,gcc-c++,make等编译工具

    ~ yum install -y gcc gcc-c++ make
    
    • 1
    1. 关闭系统RPM安装包的Apache、MySQL等服务

    为了防止rpm安装的软件和接下来安装的源码软件包冲突

    systemctl stop httpd
    systemctl stop mysqld
    
    • 1
    • 2

    确定 rpm 包安装的 httpd 和 mysqld 不能开机自启动

    systemctl disable httpd
    systemctl disable mysqld
    
    • 1
    • 2
    1. 关闭SELinux 和 firewalld

    防止软件安装和调试过程被firewalld和 SELinux所限制,无法实现效果

    a.关闭SELinux (需要重启机器)

    #永久关闭(需重启)
    sed -i -r '/^SELINUX=/s#(.*)=.*#\1=disabled#g' /etc/selinux/config
    #临时关闭
    setenforce 0
    getenforce
    
    • 1
    • 2
    • 3
    • 4
    • 5

    b.关闭Firewalld

    iptables -F 
    systemctl disable --now firewalld
    reboot
    
    • 1
    • 2
    • 3
    1. 拷贝源码包

    建议将LAMP环境安装源码包统一存放在一个目录下,如/lamp,可以使用解压脚本解压缩

    注意:使用Xshell 上传时传到/tmp 下,/root目录无法上传。

    ~ cd /tmp ; unzip LAMP.zip
    ~ cd LAMP
    
    ~ vim tar.sh
    #!/bin/bash
    mkdir /lamp
    DIR="/lamp"
    
    /bin/ls *.tar.gz > ls.list
    /bin/ls *.zip > zip.list
    
    for TAR in $(cat ls.list) ;do
      /bin/tar -xvf $TAR -C $DIR
    done
    for ZIP in $(cat zip.list) ;do
      /usr/bin/unzip $ZIP -d $DIR
    done
    
    /bin/rm -f ls.list zip.list
    
    ~ bash tar.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1. 查看安装软件的磁盘空间是否充足

    保证软件能正常安装,空间不足时会导致软件安装失败

    df -Th
    
    • 1
    1. 源码软件包安装报错确认与解决方案

    echo $? #安装软件过程中由于频繁刷屏,建议在每个步骤结束后执行此命令

    ./configure #此步骤报错多是依赖关系没解决或是编译工具未安装(注意关键词提示)

    make #此步骤多是编译时选项参数书写错误、不存在、漏写等问题。

    #一般需要检查上一个步骤: ./configure --help

    注意:若遇到报错,最简答的办法是,找到问题解决后重新解压软件,重新安装,步骤最简洁

    4 CentOS 7 编译安装

    注意:每个源码包配置编译安装完成后,确认安装目录下是否生成安装文件(并确定目录是否正确)

    建议将安装路径指定为[–prefix=/usr/local/软件名]格式。

    4.1 安装libxml2

    Libxml2是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。

    yum install -y libxml2 python-devel
    cd /lamp/libxml2-2.9.1/
    ./configure --prefix=/usr/local/libxml2/
    echo $?
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.2 安装 libmcrypt

    libmcrypt是加密算法扩展库。支持DES,3DES,RIJNDAEL,Twofish,IDEA,GOST,CAST-256,ARCFOU,SERPENT、SAFER+等算法。

    cd /lamp/libmcrypt-2.5.8/
    ./configure --prefix=/usr/local/libmcrypt
    echo $?
    make && make install 
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装libltdl,也在libmcrypt源码目录中,非新软件

    cd /lamp/libmcrypt-2.5.8/libltdl/
    ./configure --enable-ltdl-install
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4

    4.3 安装 mhash

    mhash是基于离散数学原理的不可逆向的 php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。

    cd /lamp/mhash-0.9.9.9/
    ./configure
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4

    4.4 安装 mcrypt

    mcrypt 是 php里面重要的加密支持扩展库。mcrypt库支持20多种加密算法和8种加密模式

    cd /lamp/mcrypt-2.6.8/
    export LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib
    #变量:LD_LIBRARY_PATH变量用于指定libmcrypt 和 mhash的库的位置
    ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.5 安装 zlib

    zlib是提供数据压缩用的函式库,由Jean-loup Gailly 与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为1ibpng函式库所写的,后来普遍为许多软件所使用,此函式库为自由软件,使用 zlib授权。

    cd /lamp/zlib-1.2.3/
    ./configure
    vim Makefile
    CFLAGS=-O3 -DUSE_MMAP -fPIC
    #32位操作系统不需要添加-fPIC,64位操作系统需要添加-fPIC
    #找到CFLAGS=-O3 -DUSE_MMAP,在后面加入 -fPIC 变成(注意:小写f大写PIC,空格)
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.6 安装 libpng

    libpng软件包包含libpng 库,这些库被其他程式用于解码png图片

    cd /lamp/libpng-1.2.31/
    ./configure --prefix=/usr/local/libpng
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4

    4.7 安装 jpeg6

    jpeg6提供用于解码.jpg和.jpeg图片的库文件

    mkdir -p /usr/local/jpeg6/{bin,lib,include}
    mkdir -p /usr/local/jpeg6/man/man1
    #注意:此软件默认不会自动创建所需目录,所以目录必须手动建立
    
    yum install -y libtool*
    cd /lamp/jpeg-6b
    \cp -a /usr/share/libtool/config/config.sub ./
    \cp -a /usr/share/libtool/config/config.guess ./
    #复制libtool中的文件,覆盖jpeg6b中的文件(64位中的问题)
    ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    –enable-shared 与–enable-static参数分别为建立共享库和静态库使用的libtool

    4.8 安装 freetype

    FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,支持单色位图、反走样位图的渲染。

    cd /lamp/freetype-2.3.5/
    ./configure --prefix=/usr/local/freetype
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4

    4.9 安装 Apache

    a、源码包2.4.*版本中默认没有集成apr的依赖包,所以需要提前解决依赖问题。

    cp -a /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr
    cp -a /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util
    
    • 1
    • 2

    解压 apr和 apr-util,复制整个目录并取消目录上的版本号到指定位置,./configure 时会检测

    b、Apache默认需要依赖pcre软件,但由于Apache软件版本较高,则系统预安装的pcre无法使用,所以需要人为手动安装适合版本

    cd /lamp/pcre-8.34/
    ./configure
    make && make install 
    echo $?
    
    • 1
    • 2
    • 3
    • 4

    c、Apache的加密传输模块mod_ssl,需要安装此软件产生

    yum install -y openssl-devel
    
    • 1

    d、httpd软件安装

    cd /lamp/httpd-2.4.7
    ./configure --prefix=/usr/local/apache2 \
    --sysconfdir=/usr/local/apache2/etc --with-included-apr \
    --enable-so --enable-deflate=shared --enable-expires=shared \
    --enable-rewrite=shared --enable-ssl
    
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    若前面配置 zlib 时没有指定安装目录,Apache配置时不要添加–with-z=/usr/local/zlib/参数,–enable-ssl选项是为了后期实现https提前设置的参数。

    e、启动 Apache 测试

    /usr/local/apache2/bin/apachectl start
    ps -aux | grep httpd
    #使用进程查看命令确认Apache是否启动,是否产生进程
    netstat -ntl | grep 80
    tcp        0      0 :::80                       :::*                        LISTEN
    #使用网络进程查看命令确认Apache是否启动,是否启动了80监听端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    注意事项:在CentOS 7操作系统上Apache默认监听了Ipv6地址的80端口,没有监听Ipv4的地址,所以需要修改下配置文件使其监听。
    vim /usr/local/apache2/etc/httpd.conf

    Listen 80

    Listen 0.0.0.0:80

    报错提示:启动时提示/usr/local/apache2/modules/mod_deflate.so无权限,可关闭SELinux解决,类似此类. so文件不能载入或没有权限的问题,都是SELinux问题,MySQL和 Apache都可能有类似问题。,

    警告提示:发现启动服务提示: AHO0558: httpd:Could not reliably determine the server’s fullyqualified domain name,using localhost.localdomain. Set the 'ServerName’directive globallyto suppress this message.

    解决办法:打开主配置文件httpd.conf

    搜索ServerName(约在200行左右)。

    改为ServerName localhost:80(并且去掉前面的#注释)

    验证:通过浏览器输入地址访问: http://服务器IP,若显示“It works”即表明Apache 正常工作。

    ~ vim /usr/local/apache2/etc/httpd.conf
    ServerName localhost:80
    
    #检查Apache配置文件的语法
    ~ /usr/local/apache2/bin/apachectl -t
    Syntax OK
    
    ~ /usr/local/apache2/bin/apachectl restart
    ~ curl localhost
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    范例:浏览器访问 http://服务器IP

    img

    img

    4.10 安装ncureses

    Ncurses提供字苻终端处理库,包括面板和菜单。它提供了一套控制光标,建立窗口,改变前景背景颜色以及处理鼠标操作的函数。使用户在字符终端下编写应用程序时绕过了那些恼人的底层机制。简而言之,他是一个可以使应用程序直接控制终端屏幕显示的函数库。

    yum install -y ncurses-devel
    cd /lamp/ncurses-5.9/
    ./configure --with-shared --without-debug --with-ada --enable-overwrite
    make && make install 
    echo $?
    #若不安装ncureses 编译MySQL时会报错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.11 安装 cmake 和 bison

    mysql在5.5以后,不再使用./configure 工具,进行编译安装。而使用cmake 工具替代了./configure工具。bison是一个自由软件,用于自动生成语法分析器程序,可用于所有常见的操作系统。

    yum install -y cmake bison
    
    • 1

    4.12 安装 MySQL

    useradd -r -s /sbin/nologin -c "MySQL User" mysql
    
    #为MySQL软件创建运行用户,创建为系统用户,并限制此用户登录操作系统
    cd /lamp/mysql-5.5.48/
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 \
    -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306
    
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    选项详解:

    DCMAKE_INSTALL_PREFIX=/usr/ local/mysql 安装位置

    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 指定socket(套接字)文件位置

    -DEXTRA_CHARSETS=all 扩展字符支持

    -DDEFAULT_CHARSET=utf8 默认字符集

    -DDEFAULT_COLLATION=utf8_general_ci 默认字符校对

    -DWITH_MYISAM_STORAGE_ENGINE=1 安装myisam存储引擎

    -DWITH_INNOBASE_STORAGE_ENGINE=1 安装innodb存储引擎

    -DWITH_MEMORY_STORAGE_ENGINE=1 安装memory存储引擎

    -DWITH_READLINE=1 支持readline库

    -DENABLED_LOCAL_INFILE=1 启用加载本地数据

    -DMYSQL_USER=mysql 指定mysql运行用户

    -DMYSQL_TCP_PORT=3306 指定mysql端口。

    MySQL安装后需要调整相应配置文件和参数才能正常运行

    a、修改MySQL目录的用户归属

    cd /usr/local/mysql/
    chown -R root . 
    chown -R mysql data
    
    • 1
    • 2
    • 3

    b、生成配置文件,并初始化授权表

    cp -a /lamp/mysql-5.5.48/support-files/my-medium.cnf /etc/my.cnf
    
    • 1

    复制MvSQL配置文件到指定位置,覆盖掉系统自带文件

    cd /usr/local/mysql 
    ./scripts/mysql_install_db --user=mysql
    
    • 1
    • 2

    创建数据库授权表,初始化数据库,相当于安装完操作系统后的引导设置(添加第一个用户)

    报错提示:FATAL ERROR: Could not find ./bin/my _print_defaults

    原因:mysql_install_db 初始化所调用文件时使用的是相对路径,路径不在/usr/local/mysql时是无法调用my_print_defaults文件并初始化成功的。

    img

    c、启动MySQL服务

    用原本源代码的方式去使用和启动mysql

    ~ /usr/local/mysql/bin/mysqld_safe --user=mysql &
    
    ~ netstat -antl | grep 3306
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
    
    • 1
    • 2
    • 3
    • 4

    d、设定MySQL 密码

    /usr/local/mysql/bin/mysqladmin -uroot password 123456
    
    cp /usr/local/mysql/bin/* /usr/local/bin/
    
    • 1
    • 2
    • 3

    e、登录MySQL

    ~ mysql -uroot -p123456
    mysql> select User,Password from mysql.user;
    +------+-------------------------------------------+
    | User | Password                                  |
    +------+-------------------------------------------+
    | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | root |                                           |
    | root |                                           |
    | root |                                           |
    |      |                                           |
    |      |                                           |
    +------+-------------------------------------------+
    6 rows in set (0.00 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    mysql> create database typecho;
    mysql> use test;
    Database changed
    mysql> show tables;
    Empty set (0.00 sec)
    mysql> exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    4.13 安装PHP

    cd /lamp/php-7.0.7/
    
    ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ \
    --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/libxml2/ \
    --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ \
    --with-freetype-dir=/usr/local/freetype/ --with-mcrypt=/usr/local/libmcrypt/ \
    --with-mysqli=/usr/local/mysql/bin/mysql_config \
    --enable-soap --enable-mbstring=all --enable-sockets \
    --with-pdo-mysql=/usr/local/mysql --with-gd --without-pear
    
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    选项详解:

    –with-config-file-path=/usr/local/php/etc/ 指定配置文件目录

    –with-apxs2=/usr/local/apache2/bin/apxs 指定apache动态模块位置

    –with-libxml-dir=/usr/local/libxm12/ 指定libxml位置

    –with-jpeg-dir=/usr/local/ jpeg6/ 指定jpeg位置

    –with-png-dir=/usr/local/libpng/ 指定libpng 位置

    –with-freetype-dir=/usr/local/freetype/ 指定freetype位

    –with-mcrypt=/usr/local/libmcrypt/ 指定libmcrypt位置

    –with-mysqli=/usr/local/mysql/bin/mysql_config 指定 mysqli 位置

    –with-gd 启用gd 库

    –enable-soap 支持soap服务

    –enable-mbstring=all 支持多字节,字符串

    –enable-sockets 支持套接字

    –with-pdo-mysql=/usr/local/mysql 启用mysql 的pdo模块支持

    –without-pear 不安装pear(安装pear需要连接互联网)

    PHP安装后需要调整相应配置文件和参数才能正常运行

    a、生成PHP配置文件

    mkdir /usr/local/php/etc
    cp -a /lamp/php-7.0.7/php.ini-development /usr/local/php/etc/php.ini
    
    • 1
    • 2

    b、修改Apache配置文件,使其识别*.php文件,并能通过php模块调用php进行页面解析

    vim /usr/local/apache2/etc/httpd.conf
        AddType application/x-httpd-php .php .phtml
        AddType application/x-httpd-php-source .phps
    
    • 1
    • 2
    • 3

    重启Apache服务

    #/usr/local/apache2/bin/apachectl restart
    
    /usr/local/apache2/bin/apachectl stop
    /usr/local/apache2/bin/apachectl start
    
    • 1
    • 2
    • 3
    • 4

    c、测试php页面是否能正常解析(即apache和php连通性)

    cat > /usr/local/apache2/htdocs/test.php <<EOF
    
    EOF
    
    ~ curl http://localhost/test.php
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过浏览器输入地址访问:http://Apache服务器地址/test.php

    img

    范例:查看Apache加载php模块

    vim /usr/local/apache2/etc/httpd.conf
    LoadModule php7_module        modules/libphp7.so
    
    • 1
    • 2

    4.14 为PHP安装openssl模块

    OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

    cd /lamp/php-7.0.7/ext/openssl/
    mv config0.m4 config.m4
    #将所需要的php配置文件调用到该目录下
    /usr/local/php/bin/phpize
    ./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config
    make && make install
    echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.15 为PHP安装memcache模块

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

    unzip pecl-memcache-php7.zip
    cd /lamp/pecl-memcache-php7
    /usr/local/php/bin/phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make && make install 
    echo $?
    
    #查看模块
    ~ ls /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
    memcache.so  opcache.so  openssl.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.16 修改 php 配置文件,使其识别并调用openssl和memcache 两个模块

    ~ vim /usr/local/php/etc/php.ini
    extension_dir="/usr/local/php/lib/php/extensions/no-debug-zts-20151012/"
    #取消分号注释,并添加以上路径(此路径来自于模块安装命令的结果)
    extension="openssl.so";
    extension="memcache.so";
    #添加以上两个库文件的调用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重启Apache,刷新phpinfo页面,并查看是否有两个新增的模块

    /usr/local/apache2/bin/apachectl stop
    /usr/local/apache2/bin/apachectl start
    #通过浏览器输入地址访问:http://Apache服务器地址/test.php
    
    • 1
    • 2
    • 3

    img

    img

    4.17 安装 memcached 服务

    yum install -y libevent-devel
    #wget ftp://ftp.pbone.net/mirror/ftp.ckages/libevent-devel-2.0.21-4.el7.x86 64.rpm 
    
    cd /lamp/memcached-1.4.17/
    ./configure --prefix=/usr/local/memcache
    make && make install
    echo $?
    useradd -r -s /sbin/nologin -c "Memcache User" memcache
    #添加memcache用户,此用户不用登录,不设置密码
    /usr/local/memcache/bin/memcached -umemcache &
    #启动memcache服务,并设置为后台运行
    netstat -an | grep :11211
    #检查memcache是否正常启动,并监听了11211端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    img

    4.18 安装 phpMyAdmin

    phpMyAdmin是一个以PHP 为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理 MySQL数据库。

    cp -a /lamp/phpMyAdmin-4.1.4-all-languages /usr/local/apache2/htdocs/phpmyadmin
    cd /usr/local/apache2/htdocs/phpmyadmin
    cp -a config.sample.inc.php config.inc.php
    vim config.inc.php
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    $cfg['Servers'][$i]['auth_type'] = 'http';
    #设置auth_type为http ,即设置为HTTP身份认证模式(新增即可)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过浏览器输入地址访问: http://Apache服务器地址/phpmyadmin/index. php

    用户名为root,密码为MySQL设置时指定的root密码123456

    img

    img

    4.19 设置 Apache、MySQL、Memcache 开机自启

    借助系统自带脚本/etc/rc.local,此脚本开机后会自动加载,我们可以将源码安装的服务启动命令写入该脚本,间接实现开机自启动。

    ~ vim /etc/rc.local
    /usr/local/apache2/bin/apachectl start
    /usr/local/mysql/bin/mysqld_safe --user=mysql &
    /usr/local/memcache/bin/memcached -umemcache &
    
    • 1
    • 2
    • 3
    • 4

    扩展:重启机器查看端口

    ~ netstat -antlp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
    tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      2770/sshd
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      128417/mysqld
    tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      130042/memcached
    tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1596/rpcbind
    tcp        0      0 0.0.0.0:44145               0.0.0.0:*                   LISTEN      1654/rpc.statd
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2037/sshd
    tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1731/cupsd
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2123/master
    tcp        0     48 10.0.0.40:22                10.0.0.1:14698              ESTABLISHED 2770/sshd
    tcp        0      0 10.0.0.40:22                10.0.0.1:14699              ESTABLISHED 2774/sshd
    tcp        0      0 ::1:6010                    :::*                        LISTEN      2770/sshd
    tcp        0      0 :::42176                    :::*                        LISTEN      1654/rpc.statd
    tcp        0      0 :::11211                    :::*                        LISTEN      130042/memcached
    tcp        0      0 :::111                      :::*                        LISTEN      1596/rpcbind
    tcp        0      0 :::80                       :::*                        LISTEN      128527/httpd
    tcp        0      0 :::22                       :::*                        LISTEN      2037/sshd
    tcp        0      0 ::1:631                     :::*                        LISTEN      1731/cupsd
    tcp        0      0 ::1:25                      :::*                        LISTEN      2123/master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    扩展:博客网站部署

    ##http://www.typecho.org/
    mkdir typecho && cd typecho
    #最新版需要php-7.2版本
    wget https://github.com/typecho/typecho/releases/download/v0.9-13.12.12-release/0.9.13.12.12.-release.tar.gz 
    #使用typecho-0.9版本
    tar -xvf 0.9.13.12.12.-release.tar.gz && rm -f 0.9.13.12.12.-release.tar.gz
    cd ..
    cp -r build/ /usr/local/apache2/htdocs/blog
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    范例:浏览器地址栏打开http://10.0.0.40/blog/

    img

    根据安装选项进行安装即可。

    img

    5 一键部署源码编译LAMP架构

    #!/bin/bash
    #SHELL ENV
    BASECOLOR='echo -e \E[1;46m'
    WARNCOLOR='echo -e \E[1;5;31m'
    ENDCOLOR='\E[0m'
    DIR="/lamp"
    MYSQL_ROOT_PASSWORDS="123456"
    MySQL_PORT="3306"
    
    function color() {
      RES_COL=60;
      MOVE_TO_COL="echo -en \\033[${RES_COL}G";
      SETCOLOR_SUCCESS="echo -en \\033[1;32m";
      SETCOLOR_FAILURE="echo -en \\033[1;31m";
      SETCOLOR_WARNING="echo -en \\033[1;33m";
      SETCOLOR_NORMAL="echo -en \E[0m";
      echo -n "$1" && $MOVE_TO_COL;
      echo -n "[";
      if [ $2 = "success" -o $2 = "0" ] ;then
          ${SETCOLOR_SUCCESS};
          echo -n $"  OK  ";
      elif [ $2 = "failure" -o $2 = "1" ] ;then
          ${SETCOLOR_FAILURE};
          echo -n $"FAILED";
      else
          ${SETCOLOR_WARNING};
          echo -n $"WARNING";
      fi
      ${SETCOLOR_NORMAL};
      echo -n "]";
      echo
    }
    
    #Step0:解压源码包到指定目录下
    function unpackage() {
        ${BASECOLOR}开始解压目录下的压缩包到 ${DIR}${ENDCOLOR}
        mkdir -pv $DIR
    
        for TAR in *.tar.gz ; do 
            tar -xf ${TAR} -C "${DIR}"
        done
        for ZIP in *.zip ; do 
            unzip -f ${ZIP} -d "${DIR}"
        done
    
        echo $? &> /dev/null && { ${BASECOLOR}查看解压路径为:$DIR${ENDCOLOR} ; color "解压完成" 0; } || { color "解压失败,请查明原因" 1 ; exit ; }
        rm -rf ${DIR}/memcached-1.4.17.tar.gz
    } 
    
    #Step1:关闭SELinux功能
    function set_selinux() {
        ${BASECOLOR}关闭SELinux功能${ENDCOLOR}
        setenforce 0
        sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
        color "关闭SELinux功能成功" 0
    }
    
    #Step2:关闭防火墙功能
    function set_firewalld() {
        [ -f /etc/redhat-release ] && ${BASECOLOR}关闭防火墙功能${ENDCOLOR} || ${WARNCOLOR}该操作系统不适用关闭防火墙${ENDCOLOR}
        VERSION=$(cat /etc/redhat-release | grep -Eo "[0-9]" | head -n1)
        if [ $VERSION -le 6 ] ; then
            service iptables stop
            chkconfig iptables off
            service httpd stop && service mysqld stop
            chkconfig httpd off ; chkconfig mysqld off
        else
            systemctl disable --now httpd
            systemctl disable --now mysqld
            systemctl disable --now firewalld
        fi 
        color "关闭防火墙功能成功" 0
    }
    
    #Step3:设置光盘源
    function set_yum() {
        CDROM=$(lsblk | grep sr0 &> /dev/null ; echo $?)
        if [ $CDROM -eq 0 ] ;then
            color "系统光盘已挂载,开始设置光盘源" 0
        else
            { color "系统光盘未挂载,无法设置光盘源" 1 ; exit ; }
        fi
        mkdir -p /mnt/cdrom ; mount /dev/sr0 /mnt/cdrom
        mkdir /etc/yum.repos.d/repobak ; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak
        cat > /etc/yum.repos.d/CentOS-ISO.repo <<EOF
    [CentOS-ISO]
    name=CentOS-ISO
    baseurl=file:///mnt/cdrom
    enabled=1
    gpgcheck=0
    EOF
        yum repolist
        yum install -q -y gcc gcc-c++ make
        color "设置光盘源成功" 0
    }
    
    #Stpe4:关闭NetworkManager功能
    function set_network_manager() {
        service NetworkManager stop
        chkconfig NetworkManager off
        color "关闭NetworkManager功能成功" 0
    }
    
    #Step5:设置操作系统常用别名
    function set_alias() {
        echo -e "${BASECOLOR}Starting set alias......${ENDCOLOR}"
        echo "" >> /etc/bashrc
    cat >> /etc/bashrc <<-'EOF'
    # Bash Alias Starting
    alias cdnet='cd /etc/sysconfig/network-scripts/'
    alias cdyum='cd /etc/yum.repos.d/'
    alias nm='systemctl restart NetworkManager'
    alias disepel='sed -ri /enabled/s/enabled=1/enabled=0/ /etc/yum.repos.d/base.repo'
    alias egrep='egrep --color=auto'
    alias epel='sed -ri /enabled/s/enabled=0/enabled=1/ /etc/yum.repos.d/base.repo'
    alias fgrep='fgrep --color=auto'
    alias i.='ls -d .* --color=auto'
    alias lh='ls -lh --color=auto'
    alias more='more -d'
    alias p='poweroff'
    alias restart='systemctl restart '
    alias restartnet='systemctl restart network'
    alias scandisk='echo "- - -" > /sys/class/scsi_host/host0/scan; \
                    echo "- - -" > /sys/class/scsi_host/host1/scan; \
                    echo "- - -" > /sys/class/scsi_host/host2/scan'
    alias vie0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
    alias vie1='vim /etc/sysconfig/network-scripts/ifcfg-eth1'
    alias xzfgrep='xzfgrep --color=auto'
    alias xzgrep=' xzgrep --color=auto'
    alias yr='yum remove'
    alias yy='yum -y install'
    alias zegrep='zegrep --color=auto'
    alias zfgrep='zfgrep --color=auto'
    alias zgrep='zgrep --color=auto'
    alias more='more -d'
    # Bash Alias End
    EOF
        echo -e "${BASECOLOR}Alias set finished......${ENDCOLOR}"
        color "设置操作系统常用别名功能成功" 0
    }
    
    
    #Step6:源码包编译安装初始环境
    function install_reset_lamp_env() {
        ${BASECOLOR}安装 libxml2${ENDCOLOR}
        yum install -y -q libxml2 python-devel
        cd /lamp/libxml2-2.9.1/
        ./configure --prefix=/usr/local/libxml2/ &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}libxml2 初始化成功${ENDCOLOR} || { ${WARNCOLOR}libxml2 初始化失败${ENDCOLOR} ; exit 1 ; } }
        make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}libxml2 编译成功${ENDCOLOR} || { ${WARNCOLOR}libxml2 编译失败${ENDCOLOR} ; exit 1 ; } }
        
        ${BASECOLOR}安装 libmcrypt${ENDCOLOR}
        cd /lamp/libmcrypt-2.5.8/
        ./configure --prefix=/usr/local/libmcrypt &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}libmcrypt 初始化成功${ENDCOLOR} || { ${WARNCOLOR}libmcrypt 初始化失败${ENDCOLOR} ; exit 1 ; } }
        make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}libmcrypt 编译成功${ENDCOLOR} || { ${WARNCOLOR}libmcrypt 编译失败${ENDCOLOR} ; exit 1 ; } }
        cd /lamp/libmcrypt-2.5.8/libltdl/
        ./configure --enable-ltdl-install &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}libltdl 编译成功${ENDCOLOR} || { ${WARNCOLOR}libltdl 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}安装 mhash${ENDCOLOR}
        cd /lamp/mhash-0.9.9.9/
        ./configure &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}mhash 编译成功${ENDCOLOR} || { ${WARNCOLOR}mhash 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}安装 mcrypt${ENDCOLOR}
        cd /lamp/mcrypt-2.6.8/
        export LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib
        #变量:LD_LIBRARY_PATH变量用于指定libmcrypt 和 mhash的库的位置
        ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}mcrypt 编译成功${ENDCOLOR} || { ${WARNCOLOR}mcrypt 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}安装 zlib${ENDCOLOR}
        cd /lamp/zlib-1.2.3/
        ./configure &> /dev/null
        sed -i.bak -r '/^CFLAGS=/c\CFLAGS=-O3 -DUSE_MMAP -fPIC' Makefile
        #32位操作系统不需要添加-fPIC,64位操作系统需要添加-fPIC
        #找到CFLAGS=-O3 -DUSE_MMAP,在后面加入 -fPIC 变成(注意:小写f大写PIC,空格)
        make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}zlib 编译成功${ENDCOLOR} || { ${WARNCOLOR}zlib 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}安装 libpng${ENDCOLOR}
        cd /lamp/libpng-1.2.31/
        ./configure --prefix=/usr/local/libpng &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}libpng 编译成功${ENDCOLOR} || { ${WARNCOLOR}libpng 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}安装 jpeg-6b${ENDCOLOR}
        mkdir -p /usr/local/jpeg6/{bin,lib,include}
        mkdir -p /usr/local/jpeg6/man/man1
        #注意:此软件默认不会自动创建所需目录,所以目录必须手动建立
    
        yum install -y -q libtool*
        cd /lamp/jpeg-6b
        \cp -a /usr/share/libtool/config/config.sub ./
        \cp -a /usr/share/libtool/config/config.guess ./
        #复制libtool中的文件,覆盖jpeg6b中的文件(64位中的问题)
        ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}jpeg-6b 编译成功${ENDCOLOR} || { ${WARNCOLOR}jpeg-6b 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}安装 freetype${ENDCOLOR}
        cd /lamp/freetype-2.3.5/
        ./configure --prefix=/usr/local/freetype &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}freetype 编译成功${ENDCOLOR} || { ${WARNCOLOR}freetype 编译失败${ENDCOLOR} ; exit 1 ; } }
    }
    
    #Step7:安装Apache软件
    function insatll_apache()
    {
        \cp -a /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr
        \cp -a /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util
    
        ${BASECOLOR}安装 pcre${ENDCOLOR}
        cd /lamp/pcre-8.34/
        ./configure &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}pcre 编译成功${ENDCOLOR} || { ${WARNCOLOR}pcre 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        yum install -y -q openssl-devel
    
        ${BASECOLOR}安装 httpd${ENDCOLOR}
        cd /lamp/httpd-2.4.7
        ./configure --prefix=/usr/local/apache2 \
        --sysconfdir=/usr/local/apache2/etc --with-included-apr \
        --enable-so --enable-deflate=shared --enable-expires=shared \
        --enable-rewrite=shared --enable-ssl &> /dev/null
        make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}httpd 编译成功${ENDCOLOR} || { ${WARNCOLOR}httpd 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        sed -i.bak -r '/^#ServerName/c\ServerName localhost:80' /usr/local/apache2/etc/httpd.conf
        /usr/local/apache2/bin/apachectl start
        ln -s /usr/local/apache2/bin/* /usr/local/bin
        color "HTTP端口号为:80" 0
        ${BASECOLOR}访问默认页面:${ENDCOLOR}
        curl localhost
    }
    
    #Step8:安装MySQL软件
    function install_mysql()
    {
        #若不安装ncureses 编译MySQL时会报错
        yum install -y -q ncurses-devel
        ${BASECOLOR}安装 ncurses${ENDCOLOR}
        cd /lamp/ncurses-5.9/
        ./configure --with-shared --without-debug --with-ada --enable-overwrite &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}ncurses 编译成功${ENDCOLOR} || { ${WARNCOLOR}ncurses 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        yum install -y -q cmake bison
    
        ${BASECOLOR}安装 mysql${ENDCOLOR}
        useradd -r -s /sbin/nologin -c "MySQL User" mysql
    
        #为MySQL软件创建运行用户,创建为系统用户,并限制此用户登录操作系统
        cd /lamp/mysql-5.5.48/
        cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
        -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 \
        -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 \
        -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=${MySQL_PORT} &> /dev/null
    
        make &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}mysql 编译成功${ENDCOLOR} || { ${WARNCOLOR}mysql 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        cd /usr/local/mysql/
        chown -R root . 
        chown -R mysql data
    
        \cp -a /lamp/mysql-5.5.48/support-files/my-medium.cnf /etc/my.cnf
        cd /usr/local/mysql 
        ./scripts/mysql_install_db --user=mysql
        /usr/local/mysql/bin/mysqld_safe --user=mysql &
        echo -e "\n"
        color "MySQL端口号为:$MySQL_PORT" 0
    
        /usr/local/mysql/bin/mysqladmin -uroot password ${MYSQL_ROOT_PASSWORDS}
        \cp /usr/local/mysql/bin/* /usr/local/bin/
    }
    
    #Step9:安装PHP软件
    function install_php()
    {
        ${BASECOLOR}安装 php${ENDCOLOR}
        cd /lamp/php-7.0.7/
    
        ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ \
        --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/libxml2/ \
        --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ \
        --with-freetype-dir=/usr/local/freetype/ --with-mcrypt=/usr/local/libmcrypt/ \
        --with-mysqli=/usr/local/mysql/bin/mysql_config \
        --enable-soap --enable-mbstring=all --enable-sockets \
        --with-pdo-mysql=/usr/local/mysql --with-gd --without-pear &> /dev/null
    
        make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}php 编译成功${ENDCOLOR} || { ${WARNCOLOR}php 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        mkdir /usr/local/php/etc
        \cp -a /lamp/php-7.0.7/php.ini-development /usr/local/php/etc/php.ini
    
        cat >> /usr/local/apache2/etc/httpd.conf <<EOF
    AddType application/x-httpd-php .php .phtml
    AddType application/x-httpd-php-source .phps
    EOF
        /usr/local/apache2/bin/apachectl stop
        /usr/local/apache2/bin/apachectl start
    
        cat >> /usr/local/apache2/htdocs/test.php <<EOF
    
    EOF
    }
    
    #Step10:使用PHP-Module模块
    function install_module() 
    {
        ${BASECOLOR}添加 php-openssl 模块${ENDCOLOR}
        cd /lamp/php-7.0.7/ext/openssl/
        mv config0.m4 config.m4
        #将所需要的php配置文件调用到该目录下
        /usr/local/php/bin/phpize
        ./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}php-openssl 编译成功${ENDCOLOR} || { ${WARNCOLOR}php-openssl 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        ${BASECOLOR}添加 php-memcache 模块${ENDCOLOR}
        unzip pecl-memcache-php7.zip
        cd pecl-memcache-php7
        /usr/local/php/bin/phpize
        ./configure --with-php-config=/usr/local/php/bin/php-config &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}php-memcache 编译成功${ENDCOLOR} || { ${WARNCOLOR}php-memcache 编译失败${ENDCOLOR} ; exit 1 ; } }
    
        #查看模块
        ${BASECOLOR}查看模块${ENDCOLOR}
        ls /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
    
        cat >> /usr/local/php/etc/php.ini <<EOF
    extension_dir="/usr/local/php/lib/php/extensions/no-debug-zts-20151012/"
    extension="openssl.so";
    extension="memcache.so";
    EOF
        /usr/local/apache2/bin/apachectl stop
        /usr/local/apache2/bin/apachectl start
    
        #通过浏览器输入地址访问:http://Apache服务器地址/test.php
        ${BASECOLOR}浏览器访问:http://$(hostname -I | awk '{print $1}')/test.php${ENDCOLOR}
    }
    
    #Step11:安装Memcached软件
    function insatll_memcache() {
        yum install -y -q libevent-devel
        cd /lamp/memcached-1.4.17/
        ./configure --prefix=/usr/local/memcache &> /dev/null && make -j 2 &> /dev/null && make install &> /dev/null
        { echo $? &>/dev/null && ${BASECOLOR}memcache 编译成功${ENDCOLOR} || { ${WARNCOLOR}memcache 编译失败${ENDCOLOR} ; exit 1 ; } }
        useradd -r -s /sbin/nologin -c "Memcache User" memcache
        /usr/local/memcache/bin/memcached -umemcache &
        echo -e "\n"
    }
    
    #Step12:安装phpMyAdmin应用
    function install_phpMyAdmin() {
        cp -a /lamp/phpMyAdmin-4.1.4-all-languages /usr/local/apache2/htdocs/phpmyadmin
        cd /usr/local/apache2/htdocs/phpmyadmin
        cp -a config.sample.inc.php config.inc.php
        sed -i.bak -r '/^\$cfg\[.*\]/a\$cfg["Servers"][$i]["auth_type"] = "http";' config.inc.php
    
        #通过浏览器输入地址访问: http://Apache服务器地址/phpmyadmin/index. php 
        ${BASECOLOR}浏览器访问:http://$(hostname -I | awk '{print $1}')/phpmyadmin/index. php${ENDCOLOR}
    }
    
    #Step13:设置 Apache、MySQL、Memcache 开机自启
    function boot_server() {
        cat >> /etc/rc.local <<-'EOF'
    /usr/local/apache2/bin/apachectl start
    /usr/local/mysql/bin/mysqld_safe --user=mysql &
    /usr/local/memcache/bin/memcached -umemcache &
    EOF
    }
    
    unpackage
    set_selinux
    set_network_manager
    set_firewalld
    set_yum
    set_alias
    install_reset_lamp_env
    insatll_apache
    install_mysql
    install_php
    install_module
    insatll_memcache
    install_phpMyAdmin
    boot_server
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358
    • 359
    • 360
    • 361
    • 362
    • 363
    • 364
    • 365
    • 366
    • 367
    • 368
    • 369
    • 370
    • 371
    • 372
    • 373
    • 374
    • 375
    • 376
    • 377
    • 378
    • 379
    • 380
    • 381
    • 382
    • 383
    • 384
    • 385
    • 386
    • 387
    • 388
    • 389
    • 390
    • 391
    • 392
  • 相关阅读:
    JavaScript之数组高阶API—reduce()
    2024.03.04——2024.03.10 力扣练习总结及专项巩固(二)
    Java、检查顺序
    TCP Vegas 收敛性与吞吐
    别再张口闭口高并发海量数据了,Spring这些东西都会了吗?
    Python进阶教学——多线程高级应用
    #1全职独立开发两周总结
    Golang 手写一个并发任务 manager
    MEMS 惯性传感器 - 参数指标&误差介绍
    汇凯金业:黄金5g工艺是什么意思
  • 原文地址:https://blog.csdn.net/weixin_40274679/article/details/126800870