这里但愿经过编译安装方式来实现对PHP运行环境的个性化定制,具体的会按名称缩写中的顺序来编译安装所需的各个组件 apache/nginx
-> mysql
-> php
php
编译过程当中排错时, 能够从如下三个维度分析:html
journalctl -xn
这些都是在 lamp / lnmp 编译过程当中报错提示最低要求必须依赖的包,在此预先准备好mysql
sudo yum install gcc gcc-c++ cmake kernel-devel openssl-devel git ncurses-devel bison wget
sudo service firewalld stop # 关闭防火墙(centos6.5下是iptables服务) sudo chkconfig firewalld off # 关闭防火墙的开机启动 sudo setenforce 0 # 关闭selinux服务 sudo sed -i 's|SELINUX=enforcing|SELINUX=disabled|g' /etc/selinux/config # 关闭selinux的开机启动
mkdir /tmp/source cd /tmp/source
163源下默认提供2.4.6版本。这里咱们仍然采用手工编译方式来安装apachelinux
# 安装pcre依赖 - 提供url-rewrite支持 cd /tmp/source wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.39/pcre-8.39.tar.gz tar -zxvf pcre-8.39.tar.gz cd pcre-8.39/ ./configure --prefix=/usr/local/pcre make sudo make install # 安装zlib依赖 - 提供gzip压缩支持 cd /tmp/source wget http://zlib.net/zlib-1.2.8.tar.gz tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8/ ./configure --prefix=/usr/local/zlib make sudo make install cd /tmp/source wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.2.tar.gz # 下载apr依赖 - Apache可移植运行库 wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gz # 下载apr-util依赖 - 基于apr提供了一系列有用的抽象封装 wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.23.tar.gz # 下载apache源码 tar -zxvf apr-1.5.2.tar.gz tar -zxvf apr-util-1.5.4.tar.gz tar -zxvf httpd-2.4.23.tar.gz # 补全apr系列依赖到httpd的源码库中 mv apr-1.5.2 httpd-2.4.23/srclib/apr mv apr-util-1.5.4 httpd-2.4.23/srclib/apr-util # 编译安装httpd cd httpd-2.4.23 ./configure --prefix=/usr/local/httpd --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc/httpd/conf --enable-so --enable-rewrite --enable-ssl --enable-proxy --with-included-apr --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib make sudo make install # 将httpd注册为服务以便于经过service命令管理 sudo cp build/rpm/httpd.init /etc/init.d/httpd sudo chmod 755 /etc/init.d/httpd sudo sed -i '2a # chkconfig: - 80 90\n# description: httpd service' /etc/init.d/httpd # 在第二行后追加两行服务注解(必须) sudo chkconfig --add httpd # 编入服务 sudo chkconfig httpd on # 服务开机启动 # 调整服务配置文件 cd /etc/httpd/conf sudo sed -i '/<IfModule mime_module>/a\ Addtype application/x-httpd-php .php' httpd.conf # 添加php的minetype sudo sed -i 's|DirectoryIndex index.html|DirectoryIndex index.php index.html index.htm|g' httpd.conf # 默认页配置 sudo sed -i 's|#LoadModule rewrite_module|LoadModule rewrite_module|g' httpd.conf # 启用url重写模块 sudo sed -i 's|#Include /etc/httpd/conf/extra/httpd-vhosts.conf|Include /etc/httpd/conf/extra/httpd-vhosts.conf|g' httpd.conf # 启用虚拟主机配置文件 sudo sed -i '/^ServerRoot/a\PidFile /var/run/httpd.pid' httpd.conf # 更改服务进程pid文件写入路径(解决路径报错) sudo sed -i '/<VirtualHost \*:80>/,$s|^|#|' extra/httpd-vhosts.conf # 注释掉预置的测试站点(解决测试站点不存在报错) sudo mkdir /var/log/httpd sudo chown httpd:httpd /var/log/httpd sudo sed -i 's|CustomLog "logs/access_log" common|CustomLog "/var/log/httpd/access_log" common|g' httpd.conf # 更改访问日志目录 sudo sed -i 's|ErrorLog "logs/error_log"|ErrorLog "/var/log/httpd/error_log"|g' httpd.conf # 更改报错日志目录 # httpd用户组管理 sudo useradd -s /sbin/nologin -r httpd # 建立系统帐户类型的非登陆帐户 sudo sed -i 's|User daemon|User httpd|g' /etc/httpd/httpd.conf # 设定服务启动帐户 sudo sed -i 's|Group daemon|Group httpd|g' /etc/httpd/httpd.conf # 设定服务启动用户组
epel源下已有最新稳定版1.10.1。但这里咱们仍然采用手工编译方式来安装nginxnginx
cd /tmp/source wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.39/pcre-8.39.tar.gz # 下载pcre依赖 - 提供url-rewrite支持 wget http://zlib.net/zlib-1.2.8.tar.gz # 下载zlib依赖 - 提供gzip压缩支持 wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz # 下载openssl依赖 wget http://nginx.org/download/nginx-1.10.1.tar.gz # 下载nginx源码 tar -zxvf pcre-8.39.tar.gz tar -zxvf zlib-1.2.8.tar.gz tar -zxvf openssl-1.0.2j.tar.gz tar -zxvf nginx-1.10.1.tar.gz cd nginx-1.10.1 ./configure --prefix=/usr/local/nginxd --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --with-http_ssl_module --with-http_realip_module --without-http_uwsgi_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_autoindex_module --with-http_stub_status_module --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/run/nginx/nginx.lock --error-log-path=/var/log/nginxd/error.log --http-log-path=/var/log/nginxd/access.log --with-pcre=/tmp/source/pcre-8.39 --with-zlib=/tmp/source/zlib-1.2.8 --with-openssl=/tmp/source/openssl-1.0.2j make sudo make install # 将nginxd注册为服务以便于经过service命令管理 # 首先建立/etc/init.d/nginxd文件为 `https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/` 页面内容 cd /etc/init.d/ sudo sed -i 's|/var/run/nginx.pid|/var/run/nginx/nginx.pid|g' nginxd sudo sed -i 's|/var/lock/subsys/nginx|/var/run/nginx/nginx.lock|g' nginxd sudo chmod 755 nginxd sudo chkconfig --add httpd # 编入服务 sudo chkconfig nginxd on # 服务开机启动 # nginxd用户组管理 sudo useradd -s /sbin/nologin -r nginxd # 建立系统帐户类型的非登陆帐户 sudo sed -i 's|#user nobody;|user nginxd;|g' /etc/nginx/nginx.conf # 设定服务启动帐户 sudo chown nginxd:nginxd /var/run/nginxd sudo chown nginxd:nginxd /var/log/nginxd sudo sed -i 's|/scripts$fastcgi_script_name|$document_root$fastcgi_script_name|g' /etc/nginx/nginx.conf # 修复一个变量配置报错
mysql官方对发行包有着极好的支持,基本上大多数版本都提供了对应预编译好的rpm包,咱们能够直接下载安装。另外,较新的几个版本还提供了yum源。但这里,咱们依然是采用手工编译。 留意,163源下默认提供5.5.50版本的MariaDB数据库c++
cd /tmp/source wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz # 下载mysql源码 tar -zxvf mysql-5.7.13.tar.gz cd mysql-5.7.13 # cmake编译配置,你也能经过`sudo ccmake .`命令来人性化交互式配置 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DINSTALL_BINDIR=/usr/bin -DINSTALL_SBINDIR=/usr/sbin -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/source -DWITH_DEBUG=OFF -DENABLE_DEBUG_SYNC=OFF -DWITH_UNIT_TESTS=OFF -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci make # 这一步时间很长,虚机配置3g内存、两核四中心 跑了50分钟 sudo make install # mysqld用户组管理 sudo useradd -s /sbin/nologin -r mysqld # 新增mysqld用户 sudo mkdir /srv/mysql sudo chown mysqld:mysqld /srv/mysql sudo mysqld --initialize --user=mysqld --datadir=/srv/mysql # MySQL 5.7.6+初始化操做并生成my.cnf配置。!!这一步务必记录下回显信息最后一行给出的mysql管理员初始密码,如`root@localhost: PFUtsbtpf5+N`!! sudo mkdir /var/log/mariadb /var/run/mariadb sudo chown mysqld:mysqld /var/log/mariadb /var/run/mariadb sudo sed -i 's|datadir=/var/lib/mysql|datadir=/srv/mysql|g' /etc/my.cnf # 修正配置文件中的数据目录 sudo sed -i 's|socket=/var/lib/mysql/mysql.sock|socket=/var/run/mariadb/mysql.sock|g' /etc/my.cnf # 修正配置文件中的套接字文件路径 sudo sed -i '/\[mysqld\]/a\pid-file=/var/run/mariadb/mysqld.pid' /etc/my.cnf # 指定pid文件路径 sudo sed -i '/\[mysqld\]/a\user=mysqld' /etc/my.cnf # 指定服务启动帐号 sudo mysql_ssl_rsa_setup # MySQL 5.7.6+链路加密配置初始化 # 将mysqld注册为服务以便于经过service命令管理 sudo cp support-files/mysql.server /etc/init.d/mysqld sudo sed -i 's|/var/lock/subsys|/var/run/mariadb|g' /etc/init.d/mysqld # 修正lock文件目录错误 sudo sed -i 's|$lockdir/mysql|$lockdir/mysql.lock|g' /etc/init.d/mysqld # 修正lock文件路径错误 sudo chmod 755 /etc/init.d/mysqld sudo chkconfig --add /etc/init.d/mysqld sudo chkconfig mysqld on # 服务开机启动 # mysql初始化 mysql -uroot -p #利用上面记录的root密码登入mysql终端,并执行下面一条sql操做语句 set Password=PASSWORD('1qaz2wsx3edc'); #首次安装mysql强制要求你更新密码才能运行 flush privileges;
163源下默认提供5.4.16版本。这里咱们仍然采用手工编译方式来安装phpgit
关于这里的php编译安装, 须要了解这些github
.o
静态连接库文件。.so
动态连接库文件,并安装在 extension_dir
目录下。关于iconv库的几点说明redis
configure
并 sudo make
后会产生iconv相关报错。/usr/local/include/iconv.h
中将iconv相关函数篡改加了lib前缀,致使libc标准库不识别符号表中的个别lib前缀的iconv函数。LIBS="-liconv"
链接提示来明确告诉链接器应该连接libiconv库(支持lib前缀的iconv函数)而不是libc标准库。ZEND_EXTRA_LIBS='-liconv'
参数来解决php编译安装过程当中的iconv报错,但这种处理的思路是提示编译器不安装iconv库。这实际上是创造了新的问题,而不是解决问题。由于平常开发中iconv函数仍是比较经常使用的,因此iconv库是有必要安装上的。cd /tmp/source wget http://cn2.php.net/distributions/php-5.6.24.tar.gz #下载php源码 tar -zxvf php-5.6.24.tar.gz cd php-5.6.24 # 编译安装php,这里启用的php拓展模块都是咱们平常开发中常常用到的 # 其中 `--with-apxs2=/usr/local/httpd/bin/apxs` 参数仅在安装了apache服务器时才使用 ./configure --prefix=/usr/local/php --enable-fpm --enable-pdo --enable-xml --enable-zip --enable-opcache --enable-sockets --enable-mbstring --enable-gd-native-ttf --with-mysql --with-mysqli --with-pdo-mysql --with-mysql-sock --with-gd --with-curl --with-zlib --with-openssl --with-gettext --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-apxs2=/usr/local/httpd/bin/apxs --with-libxml-dir=/usr/lib64 --with-mcrypt=/usr/lib64 --with-freetype-dir=/usr/lib64 --with-jpeg-dir=/usr/lib64 --with-png-dir=/usr/lib64 --with-iconv-dir=/usr/local/lib LIBS="-liconv" make sudo make install # 启用配置文件 sudo mkdir /etc/php.d sudo chmod 777 /etc/php.d sudo cp /tmp/source/php-5.6.24/php.ini-production /etc/php.ini # 启用生产环境模式下的php配置文件 sudo cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf # 启用fpm默认配置文件 sudo ln -s /usr/local/etc/php-fpm.conf /etc/php-fpm.conf # 启用opcache拓展(即使是静态编译安装php,opcache也是以动态连接库载入到php的,因此这里须要手工配置其启用) sudo sed -i '/\[opcache\]/a\zend_extension=opcache.so' /etc/php.ini # 将php-fpm注册为服务以便于经过service命令管理 sudo cp /tmp/source/php-5.6.24/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm cd /etc/init.d/ sudo chmod 755 php-fpm sudo sed -i '2a # chkconfig: - 80 90\n# description: php-fpm service' php-fpm # 在第二行后追加两行服务注解(必须) sudo chkconfig --add php-fpm # 编入服务 sudo chkconfig php-fpm on # 服务开机启动 # php-fpm服务用户组管理 sudo useradd -s /sbin/nologin -Mr phpfpm #新增phpfpm用户 sudo sed -i 's|user = nobody|user = phpfpm|g' /etc/php-fpm.conf sudo sed -i 's|group = nobody|group = phpfpm|g' /etc/php-fpm.conf
# 以安装phpredis拓展为例 cd /tmp/source git clone https://github.com/phpredis/phpredis.git # 下载phpredis源码 cd phpredis/ phpize ./configure sudo make sudo make install sudo cp rpm/redis.ini /etc/php.d/redis.ini
sudo rm -rf /tmp/source