最近一直在捣鼓centos学习,看完了《鸟哥的Linux私房菜》,自己准备的终极考核当然是每个PHPer的基本功,源码编译安装LNMP。一般的编译安装过程按nginx,mysql,php来即可。
环境:CentOS 6.8
目标:
nginx-1.11.10
mysql-5.6.35
php-7.1.2
nginx
先去官网上下载最新的源码包nginx-1.11.12,解压至代码目录。
tar -zxvf nginx-1.11.12.tar.gz -C /usr/local/src
#然后安装依赖的库函数文件,编译器
yum -y install openssl* pcre* gcc
cd /usr/local/src/nginx-1.11.10/
#建立Makefile
./configure --user=daemon \
--group=daemon \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-http_v2_module
#至与这些模块什么含义,自行Google
#如果没有报错的话,就可以正式编译安装了
make && make install
安装成功后,制作启动脚本,添加服务,脚本nginx官网上有提供https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/,复制到/etc/init.d/nginx。
shell> chmod a+x /etc/init.d/nginx
shell> chkconfig --add nginx
shell> chkconfig --levels 35 nginx on
然后你的nginx就设置为开机启动了,可以使用service nginx start/stop 控制nginx
mysql
mysql编译安装了mysql-5.6.35,先去官网上下载。mysql官网上有Enterprise企业版(收费?)和Community社区版,下载社区版源码包即可。
mysql比较特殊,使用cmake生成makefile
#首先安装依赖库
yum -y install make gcc-c++ cmake bison-devel ncurses-devel gcc \
autoconf automake zlib* fiex* libxml* libmcrypt* libtool-ltdl-devel*
#开始生成makefile
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLE_DOWNLOADS=1
#如果没有报错
make && make install
如果cmake报错,安装报错需要的依赖库后,记得删除CMakeCache.txt文件重新cmake
如果遇到报错
CMAKE_CXX_COMPILER not set,是因为没有 gcc-c++
执行
yum -y install gcc-c++
安装成功后为mysql添加启动用户和启动脚本
shell> useradd -r mysql -s /sbin/nologin
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
shell> cp support-files/mysql.server /etc/init.d/mysql
shell> chmod a+x /etc/init.d/mysql
shell> chkconfig --add mysql
shell> chkconfig --levels 35 mysqlon
启动mysql服务器后,用/usr/local/mysql/bin/mysql -uroot 联接服务器,如果报错
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/tmp/mysql/mysql.sock’ (2)
是因为socket文件不存在,编辑/etc/mysql.cnf,添加下面配置,重启mysql服务器就可以了
vim /etc/mysql.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/lib/mysql/mysql.sock
:wq
php
下载安装最新的php-7.1.3.tar.bz2 ,解压安装至/usr/local/src
tar -jzvf php-7.1.3.tar.bz2 -C /usr/local/src
cd /usr/local/src/php-7.1.3
#安装依赖库文件
yum -y install libpng-devel libXpm-devel gmp-devel libjpeg-devel libcurl* freetype* libzip libxml2*
#生成makefile
./configure --prefix=/usr/local/php-7.1.2 \
--with-config-file-path=/usr/local/php-7.1.2/etc \
--with-mysqli \
--with-pdo-mysql \
--enable-fpm \
--disable-rpath \
--without-pear \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-gd \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--enable-mbstring \
--enable-gd-native-ttf \
--enable-ftp \
--enable-sockets \
--enable-zip \
--with-gmp \
--with-openssl \
--with-fpm-user=daemon \
--with-fpm-group=daemon \
--with-mcrypt=/usr/include \
--with-curl
注意,自5.3以后,以前安装MySQL extension, mysqli, PDO MYSQL需要使用MySQL Client Library (libmysqlclient),即需要指定mysql安装目录,依赖于mysql的安装,使用mysqlnd则不再依赖mysql的安装。
./configure时如果遇到报错
错误1
configure: error: Don’t know how to define struct flock on this system, set –enable-opcache=no
原因:有可能是因为找不到动态函数库了,可以进行下面尝试,将指定目录下的动态函数库加载到内存中
vim /etc/ld.so.conf # 编辑库文件
/usr/local/lib64 # 添加该行
/usr/local/lib # 添加该行
/usr/lib # 添加该行
/usr/lib64 # 添加该行
:wq # 保存退出
ldconfig -v # 使之生效
错误2
configure: error: off_t undefined; check your library configuration
原因:没有安装libzip
yum -y install libzip
大功告成!!!花了我整整4个晚上。。。