1. 程式人生 > >搭建完全分離式LNMP平臺的簡單案例

搭建完全分離式LNMP平臺的簡單案例

案例拓撲圖

wKioL1Q9NNyDOYpoAADB-wCoxsg241.jpg

安裝配置nginx伺服器

編譯安裝nginx時,需要事先安裝 開發包組"Development Tools"和"Server Platform Development",同時還需專門安裝pcre-devel包。

  1. # yum -y groupinstall "Development Tools"   
  2. # yum -y groupinstall "Server Platform Development"   
  3. # yum -y install pcre-devel 

首先新增nginx使用者組和nginx使用者

  1. # groupadd -r nginx   
  2. # useradd -g nginx -r nginx 

建立編譯安裝是所需要的目錄

  1. # mkdir -pv /var/tmp/nginx/client 

編譯安裝nginx

  1. # tar xf nginx-1.4.7.tar.gz   
  2. # cd nginx-1.4.7   
  3. # ./configure \   
  4. --prefix=/usr/local/nginx \   
  5. --sbin-path=/usr/local/nginx/sbin/nginx \   
  6. --conf-path=/etc/nginx/nginx.conf \   
  7. --error-log-path=/var/log/nginx/error.log \   
  8. --http-log-path=/var/log/nginx/access.log \   
  9. --pid-path=/var/run/nginx/nginx.pid  \   
  10. --lock-path=/var/lock/nginx.lock \   
  11. --user=nginx \   
  12. --group=nginx \   
  13.   --with-http_ssl_module \   
  14.   --with-http_flv_module \   
  15.   --with-http_stub_status_module \   
  16.   --with-http_gzip_static_module \   
  17. --http-client-body-temp-path=/var/tmp/nginx/client/ \   
  18. --http-proxy-temp-path
    =/var/tmp/nginx/proxy/ \   
  19. --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \   
  20. --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \   
  21. --http-scgi-temp-path=/var/tmp/nginx/scgi \   
  22.   --with-pcre   
  23. # make && make install 

為nginx提供SysV init指令碼

  1. # vim /etc/rc.d/init.d/nginx 
  1. #!/bin/sh   
  2. #   
  3. # nginx - this script starts and stops the nginx daemon   
  4. #   
  5. # chkconfig:   - 85 15    
  6. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \   
  7. #               proxy and IMAP/POP3 proxy server   
  8. # processname: nginx   
  9. # config:      /etc/nginx/nginx.conf   
  10. # config:      /etc/sysconfig/nginx   
  11. # pidfile:     /var/run/nginx.pid   
  12. # Source function library.   
  13. . /etc/rc.d/init.d/functions  
  14. # Source networking configuration.   
  15. . /etc/sysconfig/network  
  16. # Check that networking is up.   
  17. [ "$NETWORKING" = "no" ] && exit 0   
  18. nginx="/usr/local/nginx/sbin/nginx"
  19. prog=$(basename $nginx)   
  20. NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  21. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx  
  22. lockfile=/var/lock/subsys/nginx  
  23. make_dirs() {   
  24.    # make required directories   
  25. user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`   
  26. options=`$nginx -V 2>&1 | grep 'configure arguments:'`   
  27.    for opt in $options; do  
  28.        if [ `echo $opt | grep '.*-temp-path'` ]; then  
  29. value=`echo $opt | cut -d "=" -f 2`   
  30.            if [ ! -d "$value" ]; then  
  31.                # echo "creating" $value   
  32.                mkdir -p $value && chown -R $user $value   
  33.            fi  
  34.        fi  
  35.    done  
  36. }   
  37. start() {   
  38.     [ -x $nginx ] || exit 5   
  39.     [ -f $NGINX_CONF_FILE ] || exit 6   
  40.     make_dirs   
  41.     echo -n $"Starting $prog: "  
  42.     daemon $nginx -c $NGINX_CONF_FILE   
  43. retval=$?   
  44.     echo  
  45.     [ $retval -eq 0 ] && touch $lockfile   
  46.     return $retval   
  47. }   
  48. stop() {   
  49.     echo -n $"Stopping $prog: "  
  50.     killproc $prog -QUIT   
  51. retval=$?   
  52.     echo  
  53.     [ $retval -eq 0 ] && rm -f $lockfile   
  54.     return $retval   
  55. }   
  56. restart() {   
  57.     configtest || return $?   
  58.     stop   
  59.     sleep 1   
  60.     start   
  61. }   
  62. reload() {   
  63.     configtest || return $?   
  64.     echo -n $"Reloading $prog: "  
  65.     killproc $nginx -HUP   
  66. RETVAL=$?   
  67.     echo  
  68. }   
  69. force_reload() {   
  70.     restart   
  71. }   
  72. configtest() {   
  73.   $nginx -t -c $NGINX_CONF_FILE   
  74. }   
  75. rh_status() {   
  76.     status $prog   
  77. }   
  78. rh_status_q() {   
  79.     rh_status >/dev/null 2>&1   
  80. }   
  81. case "$1" in  
  82.     start)   
  83.         rh_status_q && exit 0   
  84.         $1   
  85.         ;;   
  86.     stop)   
  87.         rh_status_q || exit 0   
  88.         $1   
  89.         ;;   
  90.     restart|configtest)   
  91.         $1   
  92.         ;;   
  93.     reload)   
  94.         rh_status_q || exit 7   
  95.         $1   
  96.         ;;   
  97.     force-reload)   
  98.         force_reload   
  99.         ;;   
  100.     status)   
  101.         rh_status   
  102.         ;;   
  103.     condrestart|try-restart)   
  104.         rh_status_q || exit 0   
  105.             ;;   
  106.     *)   
  107.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"  
  108.         exit 2   
  109. esac 

為此指令碼賦予執行許可權

  1. # chmod +x /etc/rc.d/init.d/nginx 

將nginx服務新增至服務管理列表,並讓其開機自動啟動

  1. # chkconfig --add nginx   
  2. # chkconfig nginx on 

編輯配置檔案/etc/nginx/nginx.conf,在server段內新增如下內容

  1. location ~ \.php$ {   
  2.     fastcgi_pass   10.170.2.90:9000;   
  3.     fastcgi_index  index.php;   
  4.     fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;   
  5.     include        fastcgi_params;   

啟動nginx服務

  1. # vim /etc/init.d/nginx start 

測試nginx是否工作起來,在瀏覽器中鍵入10.170.2.80,可以得到如下頁面

wKioL1Q9LSiw-gBgAAG9vqavcsc123.jpg

安裝PHP伺服器

編譯安裝php

  1. # tar xf php-5.4.26.tar.bz2   
  2. # cd php-5.4.26   
  3. # ./configure --prefix=/usr/local/php5 --with-mysql=mysqlnd--with-pdo-mysql=mysqlnd--with-mysqli=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2   
  4. # make && make install 

為php提供配置檔案

  1. # cp php.ini-production /etc/php.ini 

配置php-fpm

  1. # cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm   
  2. # chmod +x /etc/rc.d/init.d/php-fpm   
  3. # chkconfig --add php-fpm   
  4. # chkconfig php-fpm on   
  5. # cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf 

編輯配置檔案/usr/local/php5/etc/php-fpm.conf,將以下選項修改為相對應的值

  1. pm.max_children = 50
  2. pm.start_servers = 5
  3. pm.min_spare_servers = 2
  4. pm.max_spare_servers = 8
  5. pid = /usr/local/php5/var/run/php-fpm.pid 

在/var/www/html目錄下提供測試頁面index.php,其內容為

  1. <h1>hello,nginx</h1>
  2. <?php
  3.         $link = mysql_connect('10.170.2.36','testuser','******');   
  4.         if ($link)   
  5.                 echo "Success...";   
  6.         else  
  7.                 echo "Failure...";   
  8.         mysql_close();   
  9.         phpinfo();   
  10. ?>

啟動php-fpm服務

  1. # /etc/init.d/php-fpm start 

測試nginx伺服器與php伺服器是否能夠建立通訊,在瀏覽器中鍵入10.170.2.80/index.php,可以得到如下頁面

wKioL1Q9M63ijdb-AAI2nNDl8qs444.jpg

頁面中顯示Failure...,是因為後端的資料庫還沒有進行相應的配置

安裝MariaDB伺服器

編譯安裝mariadb-5.5.36

  1. # tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local   
  2. # cd /usr/local/   
  3. # ln -sv mariadb-5.5.36-linux-x86_64/ mysql   
  4. # mkdir -pv /mysql/data   
  5. # groupadd -r mysql   
  6. # useradd -g mysql -s /sbin/nologin -M -d /mysql/data -r mysql   
  7. # chown -R mysql:mysql /mysql   
  8. # chown -R mysql:mysql /mysql/data 

為資料庫提供配置檔案:

  1. # cd mysql   
  2. # mkdir /etc/mysql   
  3. # chown -R root.mysql ./*   
  4. # cp support-files/my-large.cnf /etc/mysql/my.cnf   
  5. 修改檔案/etc/mysql/my.cnf檔案內容,在thread_concurrency = 8行下新增一行:   
  6. datadir = /mysql/data 

為資料庫提供SysV啟動指令碼,並設定為開機啟動:

  1. # cp support-files/mysql.server /etc/init.d/mysqld   
  2. # chkconfig --add mysqld   
  3. # chkconfig mysqld on 

初始化資料庫並啟動資料庫:

  1. # echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh   
  2. # source /etc/profile.d/mysql.sh    
  3. # echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf   
  4. # ldconfig   
  5. # ln -sv /usr/local/mysql/include/ /usr/include/mysql   
  6. # scripts/mysql_install_db --user=mysql--datadir=/mysql/data/   
  7. # /etc/init.d/mysqld start 

建立資料庫並授權:

  1. MariaDB [(none)]> CREATE DATABASE testdb;   
  2. MariaDB [(none)]> GRANT ALL ON testdb.* TO [email protected]'10.170.2.%' IDENTIFIED BY '******';   
  3. MariaDB [(none)]> FLUSH PRIVILEGES; 

整體測試LNMP平臺

在瀏覽器中鍵入10.170.2.80/index.php,可以得到如下頁面

wKioL1Q9ND6RPJbOAAI3E1x54NM883.jpg

這次可以看到頁面中顯示Success...資訊。

FROM:  http://os.51cto.com/art/201410/454231.htm