CentOS6源码编译搭建LNMP

  • A+
所属分类:服务搭建

LNMP是最流行的Web应用程序平台之一,linux、nginx、mysql、php,它们都是各自独立的程序,熟悉配置各程序对于网站管理员来说是很有必要的。教程全程是以编译安装的方式部署LNMP,最终实现解析PHP网页。

 实验环境

实验平台:VMware虚拟机

操作系统:CentOS 6.5 / Windows10

服务端IP:192.168.168.200

客户端IP:192.168.168.201

MySQL:5.5.59

Nginx:1.12.2

PHP:5.6.33

 服务端篇

第一步 准备工作

禁用SElinux

  1. [root@Wanghualang ~]# setenforce 0  
  2. [root@Wanghualang ~]# sed -ri 's#^(SELINUX=).*#\1disabled#g' /etc/selinux/config  

禁用防火墙

  1. [root@Wanghualang ~]# service iptables stop  
  2. [root@Wanghualang ~]# service ip6tables stop  
  3. [root@Wanghualang ~]# chkconfig iptables off        
  4. [root@Wanghualang ~]# chkconfig ip6tables off  

安装常用软件

  1. [root@Wanghualang ~]# yum -y install wget vim  

第二步 安装Nginx

新建Nginx用户和用户组

  1. [root@Wanghualang ~]# groupadd nginx  
  2. [root@Wanghualang ~]# useradd -M nginx -s /sbin/nologin -g nginx  

精简版的操作系统,在接下来的configure阶段肯定会出现缺失相关开发包的报错,根据提示安装相关开发包即可。教程中为了做到一气呵成,先提前安装好需要的开发包。

  1. [root@Wanghualang ~]# yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel  

编译安装软件

  1. [root@Wanghualang ~]# cd /usr/local/src/  
  2. [root@Wanghualang src]# wget --no-check-certificate http://nginx.org/download/nginx-1.12.2.tar.gz  
  3. [root@Wanghualang src]# tar xzf nginx-1.12.2.tar.gz   
  4. [root@Wanghualang src]# cd nginx-1.12.2  
  5. [root@Wanghualang nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-pcre  
  6. [root@Wanghualang nginx-1.12.2]# make  
  7. [root@Wanghualang nginx-1.12.2]# make install  

扩展阅读展开


--prefix=/usr/local/nginx:指定/usr/local/nginx为程序安装目录;
--user=nginx:指定nginx用户程序启动;
--group=nginx:指定nginx用户组程序启动;
--with-http_ssl_module:配置安全加密功能,比如https;
--with-http_gzip_static_module:配置压缩功能,比如CSS代码压缩;
--with-pcre:正则表达式相关功能。

教程中仅配置安装基础功能,更多configure配置参数可自行了解,日后按需添加。

  1. [root@Wanghualang nginx-1.12.2]# ./configure --help | more  


配置服务启动脚本

  1. [root@Wanghualang ~]# vim /etc/init.d/nginx  

红字部分为脚本内容:

  1. #!/bin/bash  
  2. # nginx Startup script for the Nginx HTTP Server  
  3. # chkconfig: - 85 15  
  4. # description: Nginx is a high-performance web and proxy server.  
  5. # processname: nginx  
  6. # pidfile: /var/run/nginx.pid  
  7. # config: /usr/local/nginx/conf/nginx.conf  
  8. nginxd=/usr/local/nginx/sbin/nginx  
  9. nginx_config=/usr/local/nginx/conf/nginx.conf  
  10. nginx_pid=/var/run/nginx.pid  
  11. RETVAL=0  
  12. prog="nginx"  
  13. # Source function library.  
  14. . /etc/rc.d/init.d/functions  
  15. # Source networking configuration.  
  16. . /etc/sysconfig/network  
  17. # Check that networking is up.  
  18. [ ${NETWORKING} = "no" ] && exit 0  
  19. [ -x $nginxd ] || exit 0  
  20. # Start nginx daemons functions.  
  21. start() {  
  22. if [ -e $nginx_pid ];then  
  23.    echo "nginx already running...."  
  24.    exit 1  
  25. fi  
  26.    echo -n $"Starting $prog: "  
  27.    daemon $nginxd -c ${nginx_config}  
  28.    RETVAL=$?  
  29.    echo  
  30.    [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx  
  31.    return $RETVAL  
  32. }  
  33. # Stop nginx daemons functions.  
  34. stop() {  
  35.         echo -n $"Stopping $prog: "  
  36.         killproc $nginxd  
  37.         RETVAL=$?  
  38.         echo  
  39.         [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid  
  40. }  
  41. # reload nginx service functions.  
  42. reload() {  
  43.     echo -n $"Reloading $prog: "  
  44.     #kill -HUP `cat ${nginx_pid}`  
  45.     killproc $nginxd -HUP  
  46.     RETVAL=$?  
  47.     echo  
  48. }  
  49. # See how we were called.  
  50. case "$1" in  
  51. start)  
  52.         start  
  53.         ;;  
  54. stop)  
  55.         stop  
  56.         ;;  
  57. reload)  
  58.         reload  
  59.         ;;  
  60. restart)  
  61.         stop  
  62.         start  
  63.         ;;  
  64. status)  
  65.         status $prog  
  66.         RETVAL=$?  
  67.         ;;  
  68. *)  
  69.         echo $"Usage: $prog {start|stop|restart|reload|status|help}"  
  70.         exit 1  
  71. esac  
  72. exit $RETVAL  

  1. [root@Wanghualang ~]# chmod 755 /etc/init.d/nginx   
  2. [root@Wanghualang ~]# chkconfig --add nginx  

启动服务

  1. [root@Wanghualang ~]# service nginx start  

第三步 安装MySQL

新建MySQL用户和用户组

  1. [root@Wanghualang ~]# groupadd mysql  
  2. [root@Wanghualang ~]# useradd -M mysql -s /sbin/nologin -g mysql  

MySQL从5.5版本开始,不再使用configure,而选择了cmake工具进行编译,教程中为了做到一气呵成,先提前安装好需要的开发包。

  1. [root@Wanghualang ~]# yum -y install cmake bison-devel ncurses-devel  

编译安装软件

  1. [root@Wanghualang ~]# cd /usr/local/src/  
  2. [root@Wanghualang src]# wget --no-check-certificate https://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.59.tar.gz  
  3. [root@Wanghualang src]# tar xzf mysql-5.5.59.tar.gz   
  4. [root@Wanghualang src]# cd mysql-5.5.59  
  5. [root@Wanghualang mysql-5.5.59]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  -DMYSQL_DATADIR=/usr/local/mysql/data  -DWITH_DEBUG=0  -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DMYSQL_USER=mysql  -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci  -DEXTRA_CHARSETS=all  -DWITH_READLINE=1  -DWITH_SSL=system  -DWITH_EMBEDDED_SERVER=1  -DENABLED_LOCAL_INFILE=1  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DWITHOUT_PARTITION_STORAGE_ENGINE=1  
  6. [root@Wanghualang mysql-5.5.59]# make  
  7. [root@Wanghualang mysql-5.5.59]# make install  

扩展阅读展开


教程中仅配置安装基础功能,更多cmake配置参数可自行了解,日后按需添加。

  1. [root@Wanghualang mysql-5.5.59]# cmake . -LH  


初始化数据库,数据库启动用户设置为mysql,程序安装目录设置为/usr/local/mysql,数据存放路径设置为/usr/local/mysql/data。

  1. [root@Wanghualang ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  

创建配置文件,建议先删除系统默认创建的MySQL配置文件,再拷贝新的配置文件。

  1. [root@Wanghualang ~]# rm -rf /etc/my.cnf  
  2. [root@Wanghualang ~]# cp -rf /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf  

配置命令环境变量

  1. [root@Wanghualang ~]# echo "export PATH="/usr/local/mysql/bin:$PATH">> /etc/profile  
  2. [root@Wanghualang ~]# source /etc/profile  

配置服务启动脚本

  1. [root@Wanghualang ~]# cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld  
  2. [root@Wanghualang ~]# chmod 755 /etc/init.d/mysqld  
  3. [root@Wanghualang ~]# chkconfig --add mysqld  

启动服务

  1. [root@Wanghualang ~]# service mysqld start  

扩展阅读展开


建议使用源码目录中提供的安全向导配置数据库,按需重置Root密码、移除匿名用户、禁止Root远程登录、移除测试数据库。

  1. [root@Wanghualang ~]# /usr/local/src/mysql-5.5.59/scripts/mysql_secure_installation  

第四步 安装PHP

新建PHP用户和用户组

  1. [root@Wanghualang ~]# groupadd php  
  2. [root@Wanghualang ~]# useradd -M php -s /sbin/nologin -g php  

精简版的操作系统,在接下来的configure阶段肯定会出现缺失相关开发包的报错,根据提示安装相关开发包即可。教程中为了做到一气呵成,先提前安装好需要的开发包。

  1. [root@Wanghualang ~]# yum -y install libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel  

编译安装软件

  1. [root@Wanghualang ~]# cd /usr/local/src/  
  2. [root@Wanghualang src]# wget --no-check-certificate http://cn2.php.net/distributions/php-5.6.33.tar.gz  
  3. [root@Wanghualang src]# tar xzf php-5.6.33.tar.gz   
  4. [root@Wanghualang src]# cd php-5.6.33  
  5. [root@Wanghualang php-5.6.33]# ./configure --prefix=/usr/local/php  --with-fpm-user=php --with-fpm-group=php  --with-config-file-path=/usr/local/php/etc  --with-openssl  --with-zlib  --with-curl  --with-gd  --with-gettext  --with-mysql  --with-mysqli  --with-pdo-mysql  --with-libxml-dir  --with-pcre-dir  --with-jpeg-dir  --with-png-dir  --with-freetype-dir  --enable-fpm  --enable-mysqlnd  --enable-embedded-mysqli  --enable-mbstring  --disable-ipv6  
  6. [root@Wanghualang php-5.6.33]# make  
  7. [root@Wanghualang php-5.6.33]# make install  

扩展阅读展开


教程中仅配置安装基础功能,更多configure配置参数可自行了解,日后按需添加。

  1. [root@Wanghualang php-5.6.33]#  ./configure --help | more  


创建PHP配置文件

  1. [root@Wanghualang ~]# cd /usr/local/php/etc/  
  2. [root@Wanghualang etc]# mv php-fpm.conf.default php-fpm.conf  
  3. [root@Wanghualang etc]# cp -rf /usr/local/src/php-5.6.33/php.ini-development ./php.ini  

创建服务启动脚本

  1. [root@Wanghualang ~]# vim /etc/init.d/php-fpm  

脚本内容为红字部分:

  1. #! /bin/sh  
  2. ### BEGIN INIT INFO  
  3. # Provides:          php-fpm  
  4. # Required-Start:    $remote_fs $network  
  5. # Required-Stop:     $remote_fs $network  
  6. # Default-Start:     2 3 4 5  
  7. # Default-Stop:      0 1 6  
  8. # Short-Description: starts php-fpm  
  9. # Description:       starts the PHP FastCGI Process Manager daemon  
  10. ### END INIT INFO  
  11.   
  12. prefix=/usr/local/php  
  13. exec_prefix=${prefix}  
  14. php_fpm_BIN=${exec_prefix}/sbin/php-fpm  
  15. php_fpm_CONF=${prefix}/etc/php-fpm.conf  
  16. php_fpm_PID=${prefix}/var/run/php-fpm.pid  
  17. php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"  
  18. wait_for_pid () {  
  19.     try=0  
  20.     while test $try -lt 35 ; do  
  21.         case "$1" in  
  22.             'created')  
  23.             if [ -f "$2" ] ; then  
  24.                 try=''  
  25.                 break  
  26.             fi  
  27.             ;;  
  28.             'removed')  
  29.             if [ ! -f "$2" ] ; then  
  30.                 try=''  
  31.                 break  
  32.             fi  
  33.             ;;  
  34.         esac  
  35.         echo -n .  
  36.         try=`expr $try + 1`  
  37.         sleep 1  
  38.     done  
  39. }  
  40. case "$1" in  
  41.     start)  
  42.         echo -n "Starting php-fpm "  
  43.         $php_fpm_BIN --daemonize $php_opts  
  44.         if [ "$?" != 0 ] ; then  
  45.             echo " failed"  
  46.             exit 1  
  47.         fi  
  48.         wait_for_pid created $php_fpm_PID  
  49.         if [ -n "$try" ] ; then  
  50.             echo " failed"  
  51.             exit 1  
  52.         else  
  53.             echo " done"  
  54.         fi  
  55.     ;;  
  56.     stop)  
  57.         echo -n "Gracefully shutting down php-fpm "  
  58.         if [ ! -r $php_fpm_PID ] ; then  
  59.             echo "warning, no pid file found - php-fpm is not running ?"  
  60.             exit 1  
  61.         fi  
  62.         kill -QUIT `cat $php_fpm_PID`  
  63.         wait_for_pid removed $php_fpm_PID  
  64.         if [ -n "$try" ] ; then  
  65.             echo " failed. Use force-quit"  
  66.             exit 1  
  67.         else  
  68.             echo " done"  
  69.         fi  
  70.     ;;  
  71.     status)  
  72.         if [ ! -r $php_fpm_PID ] ; then  
  73.             echo "php-fpm is stopped"  
  74.             exit 0  
  75.         fi  
  76.         PID=`cat $php_fpm_PID`  
  77.         if ps -p $PID | grep -q $PID; then  
  78.             echo "php-fpm (pid $PID) is running..."  
  79.         else  
  80.             echo "php-fpm dead but pid file exists"  
  81.         fi  
  82.     ;;  
  83.     force-quit)  
  84.         echo -n "Terminating php-fpm "  
  85.         if [ ! -r $php_fpm_PID ] ; then  
  86.             echo "warning, no pid file found - php-fpm is not running ?"  
  87.             exit 1  
  88.         fi  
  89.         kill -TERM `cat $php_fpm_PID`  
  90.         wait_for_pid removed $php_fpm_PID  
  91.         if [ -n "$try" ] ; then  
  92.             echo " failed"  
  93.             exit 1  
  94.         else  
  95.             echo " done"  
  96.         fi  
  97.     ;;  
  98.     restart)  
  99.         $0 stop  
  100.         $0 start  
  101.     ;;  
  102.     reload)  
  103.         echo -n "Reload service php-fpm "  
  104.         if [ ! -r $php_fpm_PID ] ; then  
  105.             echo "warning, no pid file found - php-fpm is not running ?"  
  106.             exit 1  
  107.         fi  
  108.         kill -USR2 `cat $php_fpm_PID`  
  109.         echo " done"  
  110.     ;;  
  111.     *)  
  112.         echo "Usage: $0 {start|stop|force-quit|restart|reload|status}"  
  113.         exit 1  
  114.     ;;  
  115. esac  

  1. [root@Wanghualang ~]# chmod 755 /etc/init.d/php-fpm  
  2. [root@Wanghualang ~]# chkconfig --add php-fpm  

启动服务

  1. [root@Wanghualang ~]# service php-fpm start  

第五步 配置Nginx解析PHP

  1. [root@Wanghualang ~]# vim /usr/local/nginx/conf/nginx.conf  

大约在第43行,找到:

  1. location / {  
  2. root   html;  
  3. index  index.html index.htm;  
  4. }  

在index.htm的后面加一个index.php,之间有空格,最终修改为:

  1. location / {  
  2. root   html;  
  3. index  index.html index.htm index.php;  
  4. }  

大约在第65行,找到:

  1. #location ~ \.php$ {  
  2. #root  html;  
  3. #fastcgi_pass  127.0.0.1:9000;  
  4. #fastcgi_index  index.php;  
  5. #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
  6. #include  fastcgi_params;  
  7. #}  

去掉所有注释符号,再把/scripts修改为Nginx网站根目录,最终修改为:

  1. location ~ \.php$ {  
  2. root  html;  
  3. fastcgi_pass  127.0.0.1:9000;  
  4. fastcgi_index  index.php;  
  5. fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;  
  6. include  fastcgi_params;  
  7.  

重启服务

  1. [root@Wanghualang ~]# service nginx restart  

第六步 新建测试页

新建一个简单的PHP测试网页

  1. [root@Wanghualang ~]# vim /usr/local/nginx/html/wanghualang.php  

红字部分为代码内容:

  1. <?php  
  2. phpinfo();  
  3. ?>  

 客户端篇

使用浏览器访问测试网页:http://192.168.168.200/wanghualang.php,若能看到PHP相关程序信息,表示配置成功!

资源简介 文件名称:Nginx+MySQL+PHP 文件版本: 运行平台:
下载地址
  • 微信赞助网站
  • weinxin
  • 支付宝赞助网站
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: