首页 > 代码库 > CentOS7最小化源码安装LAMP-步骤详解
CentOS7最小化源码安装LAMP-步骤详解
CentOS7最小化源码安装LAMP-步骤详解
系统:CentOS 7.3.1611(最小化安装)
软件:httpd-2.4.27
mysql-5.7.18
php-5.6.3
一、配置系统环境
1.1. 查看系统版本
# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core)
1.2. 查看防火墙状态,关闭防火墙及其开机启动
# systemctl status firewalld
# systemctl stop firewalld
# systemctl disable firewalld
1.3. 关闭SELINUX
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
# sed -i ‘s/\(^SELINUX=\)enforcing/\1disabled/‘ /etc/selinux/config
1.4. 安装依赖及所需工具
# yum install -y wget bzip2
二、编译安装Apache httpd
2.1. 依赖包
# yum install -y gcc-c++ expat-devel openssl-devel
2.2. 下载httpd安装程序及依赖包(官方网站:http://httpd.apache.org/)
# cd /usr/local/src; mkdir lamp; cd lamp/
# wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.2.tar.bz2
# wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.0.tar.bz2
# wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-iconv-1.2.1.tar.bz2
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.27.tar.bz2
# wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.bz2
2.3. 解压安装pcre
# cd /usr/local/src/lamp
# tar xf pcre-8.41.tar.bz2
# cd pcre-8.41
# ./configure --prefix=/usr/local/pcre841
# make && make install
2.4. 解压安装apr
# cd /usr/local/src/lamp
# tar xf apr-1.6.2.tar.bz2
# cd apr-1.6.2
# ./configure --prefix=/usr/local/apr
# make && make install
2.5. 解压安装apr-util和apr-iconv
# cd /usr/local/src/lamp
# tar xf apr-iconv-1.2.1.tar.bz2
# tar xf apr-util-1.6.0.tar.bz2
# mv apr-iconv-1.2.1 apr-util-1.6.0
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=apr-iconv-1.2.1 && make && make install
# ln -s /usr/local/apr-util/lib/libapriconv-1.la ./apr-iconv-1.2.1/lib/libapriconv.la
2.6. 解压安装apache httpd
# cd /usr/local/src/lamp
# tar xf httpd-2.4.27.tar.bz2
# cd httpd-2.4.27
# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-so --enable-deflate --enable-proxy --enable-proxy-fcgi --enable-cgi --enable-rewrite --enable-mime-magic --with-ssl --enable-ssl --enable-mpms-shared=all --with-mpm=event
# make && make install
2.7. 修改httpd配置文件/usr/local/apache/conf/httpd.conf
添加
PidFile "/var/run/httpd.pid"
可修改ServerAdmin项为:
ServerAdmin root@localhost
可修改ServerName项为:
ServerName localhost:80
2.8. 服务脚本/etc/rc.d/init.d/httpd
#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is an efficient and extensible \
# server implementing the current HTTP standards.
# processname: httpd
# config: /etc/httpd/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
#
### BEGIN INIT INFO
# Provides: httpd
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: distcache
# Short-Description: start and stop Apache HTTP Server
# Description: The Apache HTTP Server is an extensible server
# implementing the current HTTP standards.
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache2/bin/apachectl
httpd=/usr/local/apache2/bin/httpd
prog=httpd
pidfile=/var/run/httpd.pid
lockfile=/var/lock/subsys/httpd
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure. So we just do it the way init scripts
# are expected to behave here.
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
# When stopping httpd, a delay (of default 10 second) is required
# before SIGKILLing the httpd parent; this gives enough time for the
# httpd parent to SIGKILL any errant children.
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=6
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
# Force LSB behaviour from killproc
LSB=1 killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
if [ $RETVAL -eq 7 ]; then
failure $"httpd shutdown"
fi
fi
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart|try-restart)
if status -p ${pidfile} $httpd >&/dev/null; then
stop
start
fi
;;
force-reload|reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
RETVAL=2
esac
exit $RETVAL
2.9. 修改服务脚本执行权限
# chmod +x /etc/rc.d/init.d/httpd
2.10. 加入开机启动服务列表
# chkconfig --and httpd
# chkconfig --level 35 httpd on
2.11. 添加apache命令路径/etc/profile.d/httpd.sh
export $PATH:/usr/local/apache2/bin
三、编译安装MySQL
3.1. 依赖包
# yum install -y cmake ncurses-devel
3.2. 下载源码文件并解压(含boost-1.59.0)
# cd /usr/local/src/lamp
# wget https://cdn.mysql.com/Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz
# tar xf mysql-boost-5.7.18.tar.gz
# cd mysql-5.7.18
# mv boost/boost_1_59_0/ /usr/local/ #移动boost/至/usr/local/目录下
3.2. 新建mysql用户和组,创建/mydata/data数据存放目录
# groupadd -r -g 306 mysql
# useradd -r -M -u 306 -g mysql mysql
# mkdir -p /mydata/{data,logs,temp}
3.3. 预编译及编译安装MySQL
# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DMYSQL_DATADIR=/mydata/data \
-DTMPDIR=/mydata/temp \
-DMYSQL_UNIX_ADDR=/mydata/temp/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_MERGE_STORAGE_ENGINE=1 \
-DWITH_CSV_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_USER=mysql \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_ZLIB=bundled \
-DWITH_READLINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0 \
-DWITH_SSL=system
# make && make install
3.4. 设置开机启动脚本
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
3.5. 修改mysql配置文件/etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/mydata/data
pid-file=/mydata/data/mysql.pid
user=mysql
socket=/mydata/temp/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/mydata/logs/mysql.log
pid-file=/mydata/data/mysqld.pid
!includedir /etc/my.cnf.d
3.6. 配置MySQL环境变量
# vi /etc/profile.d/mysql.sh
export PATH=%PATH:/usr/local/mysql/bin
# source /etc/profile
# touch /mydata/logs/mysql.log
# chown -R mysql:mysql /mydata
# chmod -R o-rx /mydata/data #安全选项
# chown -R root.mysql /usr/local/mysql/* #为安全,将mysql安装目录下的文件改为root用户,mysql组权限
编辑/etc/ld.so.conf.d/mysql.conf #导出lib库
/usr/local/mysql/lib
# ldconfig -v # 加载并显示lib库缓存到/etc/ld.so.cache文件
# ln -sv /usr/local/mysql/include /usr/include/mysql #导出链接头文件
3.4. 初始化MySQL数据库
# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data
2017-07-14T09:39:18.237980Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-07-14T09:39:19.392666Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-07-14T09:39:19.557103Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-07-14T09:39:19.671378Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 4f77eeaf-6878-11e7-8ac2-000c29f55b28.
2017-07-14T09:39:19.672344Z 0 [Warning] Gtid table is not ready to be used. Table ‘mysql.gtid_executed‘ cannot be opened.
2017-07-14T09:39:19.998278Z 0 [Warning] CA certificate ca.pem is self signed.
2017-07-14T09:39:20.096930Z 1 [Note] A temporary password is generated for root@localhost: kkjMdfwfE3?w
# 注:初始化完成后,最后一行提供临时生成的root用户登录密码(kkjMdfwfE3?w)。
3.9. 启动mysqld服务
# systemctl enable mysqld
# service mysqld start
3.10. 登录mysql,更改root密码,添加授权
# mysql -uroot -p‘kkjMdfwfE3?w‘
> ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘123456‘;
> GRANT ALL PRIVILEGES ON *.* to ‘root‘@‘192.168.%‘ IDENTIFIED BY ‘123456‘;
> FLUSH PRIVILEGES;
四、源码编译安装PHP
4.1 依赖包
# yum install libxml2-devel bzip2-devel libcurl-devel gd-devel gmp-devel readline-devel libxslt-devel
4.2. 下载并安装libmcrypt,libmcrypt-devel
# cd /usr/local/src/lamp
# wget ftp://rpmfind.net/linux/epel/7/x86_64/l/libmcrypt-devel-2.5.8-13.el7.x86_64.rpm
# wget ftp://rpmfind.net/linux/epel/7/x86_64/l/libmcrypt-2.5.8-13.el7.x86_64.rpm
# rpm -ivh libmcrypt*.rpm
4.3. 链接文件
# ln -s /usr/local/mysql/lib/libmysqlclient.so.20.3.5 /usr/local/mysql/lib/libmysqlclient_r.so
4.4. 下载并解压安装PHP-5.6.31
# wget http://php.net/distributions/php-5.6.31.tar.bz2
# tar xf php-5.6.31.tar.bz2
# cd php-5.6.31
# ./configure \
--prefix=/usr/local/php \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-mysql=/usr/local/mysql/ \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-libxml-dir=/usr \
--enable-fpm --enable-maintainer-zts --enable-xml --enable-sockets \
--with-mcrypt --with-openssl --with-zlib --with-iconv --enable-mbstring \
--with-jpeg-dir --with-freetype-dir --with-openssl-dir --with-png-dir \
--with-mysql-sock --enable-soap --with-xmlrpc --with-mhash --with-pcre-regex --with-sqlite3 --enable-bcmath --with-bz2 --enable-calendar --with-curl --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-zlib-dir --enable-gd-native-ttf --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --disable-mbregex --disable-mbregex-backtrack --with-libmbfl --with-onig --enable-pdo --with-pdo-mysql --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-pear
# make && make install
4.5 环境配置
# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# ln -sv /usr/local/php/include/ /usr/include/php
# cp php.ini-production /etc/php.ini
vi /etc/profile.d/php.sh
export PATH=$PATH:/usr/local/php/bin
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vi /usr/local/php/etc/php-fpm.conf # 编辑/usr/local/php/etc/php-fpm.conf配置文件
pid = /usr/local/php/var/run/php-fpm.pid # 指定pid文件详细路径
# vi /etc/httpd/httpd.conf # 编辑/etc/httpd/httpd.conf配置文件
PidFile "/var/run/httpd.pid" # 指定pid文件路径
Listen 8080 # 更改监听端口
LoadModule proxy_module modules/mod_proxy.so # 加载mod_proxy.so模块
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # 加载mod_proxy_fcgi.so模块
ServerAdmin root@localhost # 更改ServerAdmin
ServerName localhost:80 # 更改ServerName
#DocumentRoot "/usr/local/apache2/htdocs" # 关闭根文档
DirectoryIndex index.php index.html # 添加索引文件类型
AddType application/x-httpd-php .php # 添加.php类型
AddType application/x-httpd-php-source .phps # 添加.phps类型
Include /etc/httpd/extra/httpd-vhosts.conf # 打开虚拟主机配置文件
# vi /etc/httpd/extra/httpd-vhosts.conf # 编辑/etc/httpd/extra/httpd-vhosts.conf虚拟主机配置文件
<VirtualHost *:8080>
#ServerAdmin webmaster@tnet.cn
DocumentRoot "/usr/local/apache2/htdocs/"
ServerName www.tnet.cn
ServerAlias www.tnet.cn
ErrorLog "logs/www.tnet.cn-error_log"
CustomLog "logs/www.tnet.cn-access_log" common
ProxyRequests Off # 关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache2/htdocs/$1 # 把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,
# 所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,
# 其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
4.6 重启httpd和php-fpm服务
service httpd restart
service php-fpm restart
4.7 测试文件
# mv /usr/local/apache2/htdocs/index.html /usr/local/apache2/htdocs/index.php
# vi /usr/local/apache2/htdocs/index.php
<html><body><h1>It works!</h1></body></html>
<?php
$conn=mysql_connect(‘127.0.0.1‘,‘root‘,‘123456‘);
if ($conn)
echo "<h2>MySQL connected success!!!</h2>";
else
echo "MySQL connect failed...";
phpinfo();
?>
4.8 使用浏览器访问http主页
五、总结
通过源码编译安装LAMP(Linux、Apache、MySQL、PHP),定制安装所需模块,为应用部署创造最合适的系统环境。
本文出自 “望云眷蜀” 博客,请务必保留此出处http://wyjs6.blog.51cto.com/465920/1948653
CentOS7最小化源码安装LAMP-步骤详解