LAM(M)P:
L: linux
A: apache (httpd)
M: mysql, mariadb
M: memcached
P: php, perl, python
CGI 和 FastCGI 协议可以让 Apache 或者 Web服务把动态请求转发到后端处理动态页面的服务器。
客户端需要知道其访问网址,通过浏览器通过DNS解析获取其对应的IP地址。Apache 具有网页文件共享的服务。当Apache (Http)找到的是 html 超文本文件,就会传输到客户端的浏览器进行解析渲染。
PHP 应用的需要服务器端安装 PHP 解析器。PHP解析后的程序交给Apache服务器后传输到客户端的浏览器。
Linux + Apache + MySQL+ PHP
浏览器:仅能解析简单的HTML语言,无法直接解析PHP语言
部署方式:
yum安装:
源码安装:
环境要求:
操作系统:CentOS 6.x 64位。关闭SELinux和 iptables防火墙
注意解决依赖关系,推荐使用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
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
为了防止rpm安装的软件和接下来安装的源码软件包冲突
service httpd stop && service mysqld stop
确定rpm包安装的httpd 和 mysqld 不能开机自启动
chkconfig httpd off ; chkconfig mysqld off
防止软件安装和调试过程被iptables和SELinux所限制,无法实现效果
setenforce 0
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
iptables -F ; service iptables stop
chkconfig iptables off
建议将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
保证软件能正常安装,空间不足时会导致软件安装失败
df -Th
echo $? #安装软件过程中由于频繁刷屏,建议在每个步骤结束后执行此命令
./configure #此步骤报错多是依赖关系没解决或是编译工具未安装(注意关键词提示)
make #此步骤多是编译时选项参数书写错误、不存在、漏写等问题。
#一般需要检查上一个步骤: ./configure --help
注意:若遇到报错,最简答的办法是,找到问题解决后重新解压软件,重新安装,步骤最简洁
注意:每个源码包配置编译安装完成后,确认安装目录下是否生成安装文件(并确定目录是否正确)
建议将安装路径指定为[–prefix=/usr/local/软件名]格式。
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
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
mhash是基于离散数学原理的不可逆向的 php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。
cd /lamp/mhash-0.9.9.9/
./configure
make && make install
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
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
libpng软件包包含libpng 库,这些库被其他程式用于解码png图片
cd /lamp/libpng-1.2.31/
./configure --prefix=/usr/local/libpng
make && make install
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
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,支持单色位图、反走样位图的渲染。
cd /lamp/freetype-2.3.5/
./configure --prefix=/usr/local/freetype
make && make install
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
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时会报错
mysql在5.5以后,不再使用./configure 工具,进行编译安装。而使用cmake 工具替代了./configure工具。bison是一个自由软件,用于自动生成语法分析器程序,可用于所有常见的操作系统。
yum install -y cmake bison
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文件并初始化成功的。
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
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
范例:查看Apache加载php模块
vim /usr/local/apache2/etc/httpd.conf
LoadModule php7_module modules/libphp7.so
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
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
~ 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
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端口
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
借助系统自带脚本/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/
根据安装选项进行安装即可。
注意事项:注意目录权限和归属,防止权限过大或者权限过小
拓展:让源码安装的服务能像rpm软件包一样进行管理
借助源码包中写好的管理脚本即可,我们用Apache、MySQL、Memcache 举例说明
环境要求:
操作系统:CentOS 7.X 64位
网络配置:nmtui字符终端图形管理工具或者直接编辑配置文件。
关闭SELinux和 firewalld防火墙
防火墙:
注意解决依赖关系,推荐使用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
为了防止rpm安装的软件和接下来安装的源码软件包冲突
systemctl stop httpd
systemctl stop mysqld
确定 rpm 包安装的 httpd 和 mysqld 不能开机自启动
systemctl disable httpd
systemctl disable mysqld
防止软件安装和调试过程被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
建议将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
保证软件能正常安装,空间不足时会导致软件安装失败
df -Th
echo $? #安装软件过程中由于频繁刷屏,建议在每个步骤结束后执行此命令
./configure #此步骤报错多是依赖关系没解决或是编译工具未安装(注意关键词提示)
make #此步骤多是编译时选项参数书写错误、不存在、漏写等问题。
#一般需要检查上一个步骤: ./configure --help
注意:若遇到报错,最简答的办法是,找到问题解决后重新解压软件,重新安装,步骤最简洁
注意:每个源码包配置编译安装完成后,确认安装目录下是否生成安装文件(并确定目录是否正确)
建议将安装路径指定为[–prefix=/usr/local/软件名]格式。
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
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 $?
mhash是基于离散数学原理的不可逆向的 php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。
cd /lamp/mhash-0.9.9.9/
./configure
make && make install
echo $?
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 $?
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 $?
libpng软件包包含libpng 库,这些库被其他程式用于解码png图片
cd /lamp/libpng-1.2.31/
./configure --prefix=/usr/local/libpng
make && make install
echo $?
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
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,支持单色位图、反走样位图的渲染。
cd /lamp/freetype-2.3.5/
./configure --prefix=/usr/local/freetype
make && make install
echo $?
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监听端口
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
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时会报错
mysql在5.5以后,不再使用./configure 工具,进行编译安装。而使用cmake 工具替代了./configure工具。bison是一个自由软件,用于自动生成语法分析器程序,可用于所有常见的操作系统。
yum install -y cmake bison
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文件并初始化成功的。
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
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
EOF
~ curl http://localhost/test.php
通过浏览器输入地址访问:http://Apache服务器地址/test.php
范例:查看Apache加载php模块
vim /usr/local/apache2/etc/httpd.conf
LoadModule php7_module modules/libphp7.so
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 $?
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
~ 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
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端口
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
借助系统自带脚本/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/
根据安装选项进行安装即可。
#!/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