image.png
LAM(M)P:
L: linux
A: apache (httpd)
M: mysql, mariadb
M: memcached
P: php, perl, python
image.png

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

image.png

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

Web 网站平台 - LAMP

05 LAMP 部署   Apache 详解 - 图4
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配置文件,启用本地光盘源(双光盘)

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

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

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

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

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

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

service httpd stop && service mysqld stop

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

chkconfig httpd off ; chkconfig mysqld off
  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. 拷贝源码包,解压解压缩

建议将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. 查看安装软件的磁盘空间是否充足

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

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

echo $? #安装软件过程中由于频繁刷屏,建议在每个步骤结束后执行此命令
./configure #此步骤报错多是依赖关系没解决或是编译工具未安装(注意关键词提示)
make #此步骤多是编译时选项参数书写错误、不存在、漏写等问题。
#一般需要检查上一个步骤: ./configure —help
注意:若遇到报错,最简答的办法是,找到问题解决后重新解压软件,重新安装,步骤最简洁

2 CentOS 6 编译安装

注意:每个源码包配置编译安装完成后,确认安装目录下是否生成安装文件(并确定目录是否正确)
建议将安装路径指定为[—prefix=/usr/local/软件名]格式。
image.png

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

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

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

cd /lamp/libmcrypt-2.5.8/libltdl/
./configure --enable-ltdl-install
make && make install

2.3 安装 mhash

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

cd /lamp/mhash-0.9.9.9/
./configure
make && make install

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

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

2.6 安装 libpng

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

cd /lamp/libpng-1.2.31/
./configure --prefix=/usr/local/libpng
make && make install

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

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

2.8 安装 freetype

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

cd /lamp/freetype-2.3.5/
./configure --prefix=/usr/local/freetype
make && make install

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

解压 apr和 apr-util,复制整个目录并取消目录上的版本号到指定位置,./configure 时会检测
b、Apache默认需要依赖pcre软件,但由于Apache软件版本较高,则系统预安装的pcre无法使用,所以需要人为手动安装适合版本

cd /lamp/pcre-8.34/
./configure
make && make install

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

yum install -y openssl-devel

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

若前面配置 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监听端口

报错提示:启动时提示/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

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

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时会报错

2.11 安装 cmake 和 bison

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

yum install -y cmake bison

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 $?

选项详解:

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

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

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

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

cd /usr/local/mysql 
./scripts/mysql_install_db --user=mysql

创建数据库授权表,初始化数据库,相当于安装完操作系统后的引导设置(添加第一个用户)
报错提示:FATAL ERROR: Could not find ./bin/my _print_defaults
原因:mysql_install_db 初始化所调用文件时使用的是相对路径,路径不在/usr/local/mysql时是无法调用my_print_defaults文件并初始化成功的。
image.png
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

d、设定MySQL 密码

/usr/local/mysql/bin/mysqladmin -uroot password 123456

cp /usr/local/mysql/bin/* /usr/local/bin/

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

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

选项详解: —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

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

重启Apache服务

/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start

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

vim /usr/local/apache2/htdocs/test.php
<?php
      phpinfo();
?>

通过浏览器输入地址访问:http://Apache服务器地址/test.php
image.png
范例:查看Apache加载php模块

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

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

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

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";
#添加以上两个库文件的调用

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

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

image.png
image.png

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端口

image.png

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身份认证模式(新增即可)

通过浏览器输入地址访问: http://Apache服务器地址/phpmyadmin/index. php
用户名为root,密码为MySQL设置时指定的root密码123456
image.png

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 &

扩展:重启机器查看端口

~ 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

扩展:博客网站部署

##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

范例:浏览器地址栏打开http://10.0.0.40/blog/
image.png
根据安装选项进行安装即可。
image.png

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

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

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

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

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

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

systemctl stop httpd
systemctl stop mysqld

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

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

防止软件安装和调试过程被firewalld和 SELinux所限制,无法实现效果
a.关闭SELinux (需要重启机器)

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

b.关闭Firewalld

iptables -F 
systemctl disable --now firewalld
reboot
  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. 查看安装软件的磁盘空间是否充足

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

df -Th
  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

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 $?

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

cd /lamp/libmcrypt-2.5.8/libltdl/
./configure --enable-ltdl-install
make && make install
echo $?

4.3 安装 mhash

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

cd /lamp/mhash-0.9.9.9/
./configure
make && make install
echo $?

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 $?

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 $?

4.6 安装 libpng

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

cd /lamp/libpng-1.2.31/
./configure --prefix=/usr/local/libpng
make && make install
echo $?

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 $?

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

4.8 安装 freetype

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

cd /lamp/freetype-2.3.5/
./configure --prefix=/usr/local/freetype
make && make install
echo $?

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

解压 apr和 apr-util,复制整个目录并取消目录上的版本号到指定位置,./configure 时会检测
b、Apache默认需要依赖pcre软件,但由于Apache软件版本较高,则系统预安装的pcre无法使用,所以需要人为手动安装适合版本

cd /lamp/pcre-8.34/
./configure
make && make install 
echo $?

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

yum install -y openssl-devel

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 $?

若前面配置 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监听端口

注意事项:在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

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

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时会报错

4.11 安装 cmake 和 bison

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

yum install -y cmake bison

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 $?

选项详解:

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

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

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

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

cd /usr/local/mysql 
./scripts/mysql_install_db --user=mysql

创建数据库授权表,初始化数据库,相当于安装完操作系统后的引导设置(添加第一个用户)
报错提示:FATAL ERROR: Could not find ./bin/my _print_defaults
原因:mysql_install_db 初始化所调用文件时使用的是相对路径,路径不在/usr/local/mysql时是无法调用my_print_defaults文件并初始化成功的。
image.png
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

d、设定MySQL 密码

/usr/local/mysql/bin/mysqladmin -uroot password 123456

cp /usr/local/mysql/bin/* /usr/local/bin/

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

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 $?

选项详解: —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

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

重启Apache服务

#/usr/local/apache2/bin/apachectl restart

/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start

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

cat > /usr/local/apache2/htdocs/test.php <<EOF
<?php
      phpinfo();
?>
EOF

~ curl http://localhost/test.php

通过浏览器输入地址访问:http://Apache服务器地址/test.php
image.png
范例:查看Apache加载php模块

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

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 $?

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

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";
#添加以上两个库文件的调用

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

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

image.png
image.png

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端口

image.png

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身份认证模式(新增即可)

通过浏览器输入地址访问: http://Apache服务器地址/phpmyadmin/index. php
用户名为root,密码为MySQL设置时指定的root密码123456
image.png
image.png

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 &

扩展:重启机器查看端口

~ 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

扩展:博客网站部署

##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

范例:浏览器地址栏打开http://10.0.0.40/blog/
image.png
根据安装选项进行安装即可。
image.png

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
<?php
      phpinfo();
?>
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