用項目實現LAMP

 項目實施(如圖所示):

1、Web1上配置NFS服務,導出/www/htdocs以讀寫方式給Web2訪問;(不能給其它主機以訪問權限)
   解說:web1的ip是:172.16.7.1 web2的ip是172.16.7.2
   安裝:
#yum install  nfs-utils-1.0.9-42.el5
 
開啓服務:
#service nfs start
    
   # vim /etc/exports
   /www/htdocs 172.16.7.2(rw)
   保存退出。
   mkdir -pv /www/htdocs  創建/www/htdocs 目錄
   給這個目錄的其他用戶寫權限,以讓web2可以進行操作:
    #chmod +w /www/htdocs
    #service nfs restart
   
   172.16.7.2:
      showmount -e 172.16.7.1  //查看對應服務器上共享了哪些服務
     
      mkdir /www/htdcs
      service nfs restart
      
2、Web1上配置MySQL-5.5.20,要求:
   配置mysql-5.5.20
      準備數據存放的文件系統
 
   (1)新建一個邏輯卷,並將其掛載至特定目錄即可。大致過程爲大家簡說一下:
    fdisk /dev/sda 建一個分區,大概2G 即可,類型要是8e的。如 /dev/sda5
     先創建物理卷: pvcreate /dev/sda5
     再創建物理卷組: vgcreate myvg /dev/sda5
     最後創建邏輯卷: lvcreate -L 1G -n lv1 /dev/myvg   //指定大小爲1G,名字爲lv1
          然後格式化:   mke2fs -j /dev/myvg/lv1
    這裏假設其邏輯卷的掛載目錄爲/www/htdocs,則# mount /dev/myvg/lv1 /mydata/htdocs 如果想開機自啓動,則可在/etc/fstab內添加內容。 
    而後需要創建/www/htdocs/mysql目錄做爲mysql數據的存放目錄。
    # mkdir /www/htdocs/mysql
   (2)、新建系統用戶以安全方式運行進程:
 
    # groupadd -r mysql
    # useradd -g mysql -r -s /sbin/nologin -M -d /www/htdocs/mysql mysql
    # chown -R mysql:mysql /www/htdocs/mysql 將/www/htdocs/mysql目錄的屬主屬組改爲 mysql
 
   (3)、安裝並初始化mysql-5.5.20
 
    首先下載平臺對應的mysql版本至本地,這裏是32位平臺,因此,選擇的爲mysql-5.5.20-linux2.6-i686.tar.gz,
    
     # tar xf mysql-5.5.20-linux2.6-i686.tar.gz -C /usr/local //指定解壓至 /usr/local目錄下。
     # cd /usr/local/
     # ln -sv mysql-5.5.20-linux2.6-i686  mysql //爲mysql-5.5.20-linux2.6-i686創建一個軟鏈接
     # cd mysql 
 
     # chown -R mysql:mysql  .  //將/mysql 目錄下的所有文件及目錄的屬主及屬組均改爲mysql.
     # scripts/mysql_install_db --user=mysql --datadir=/www/htdocs/mysql  // 指定其數據存放目錄和使用的用戶
     # chown -R root  .         //將/mysql 目錄下的所有文件及目錄的屬主改回爲root
 
   (4)、爲mysql提供主配置文件:
 
     # cd /usr/local/mysql
     # cp support-files/my-large.cnf  /etc/my.cnf  //爲mysql提供配置文件
 
    並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,比如這裏使用如下行:
     # vim /etc/my.cnf
     添加thread_concurrency = 2
 
     另外還需要添加如下行指定mysql數據文件的存放位置:
     datadir = /www/htdocs/mysql
 
 
   (5)、爲mysql提供sysv服務腳本:
 
     # cd /usr/local/mysql
     # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
 
     添加至服務列表:
     # chkconfig --add mysqld
     # chkconfig mysqld on  //開機自啓動服務
 
     而後就可以啓動服務測試使用了。
     # service mysqld start
 
   爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還需要進行如下步驟:
   (6)、輸出mysql的man手冊至man命令的查找路徑:
 
     編輯/etc/man.config,添加如下行即可:
     MANPATH  /usr/local/mysql/man
   (7)、輸出mysql的頭文件至系統頭文件路徑/usr/include:
 
    這可以通過簡單的創建鏈接實現:
     # ln -sv /usr/local/mysql/include  /usr/include/mysql
   (8)、輸出mysql、httpd的庫文件給系統庫查找路徑:
 
     # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
 
     而後讓系統重新載入系統庫:
     # ldconfig
 
   (9)、修改PATH環境變量,讓系統可以直接使用mysql和httpd的相關命令。
 
     # vim /etc/profile
     添加 PATH=$PATH:/usr/local/mysql/bin
     # export PATH=$PATH:/usr/local/mysql/bin
     # source /etc/profile
1)新建dzuser用戶,使其通過Web1或Web2主機都可以訪問此數據庫,並且其對discuz數據庫中的所有對象有全部訪問權限;
  mysql -p
  123456
  grant all privileges on discuz.*  to dzuser@localhost identified by 'ling';  //新建一個本地的dzuser用戶
  grant all privileges on discuz.*  to [email protected] identified by 'ling';  //新建一個web2的dzuser用戶
2)刪除兩個匿名用戶,併爲所有名稱爲root的用戶設置密碼;
  use mysql
  select * from user\G;
  drop user ''@localhost;
  drop user ''@localhost.localdomain;
  set password for [email protected]=password('123456');
  set password for [email protected]=password('123456');
  set password for root@'::1'=password('123456');
3、Web1上編譯安裝httpd-2.4.1和php-5.3.10,並配置LAMP平臺可以正常工作;要求:
    編譯安裝httpd-2.4.1
    (1)、首先要解決依賴關係
 
     httpd-2.4.1需要較新版本的apr和apr-util,因此需要事先對其進行升級。升級方式有兩種,一種是通過源代碼編譯安裝,一種是直接升級rpm包。這裏選擇使用後一種方式進行。
     我們學習時使用的rpm包的下載路徑爲ftp://172.16.0.1/pub/Sources/new_lamp,而如果有需要的話,可以在rpmfind.net和rpm.pbone.net等rpm包的免費網站下載。共需要如下4個軟件包:
     apr-1.4.6-1.i386.rpm
     apr-devel-1.4.6-1.i386.rpm
     apr-util-1.4.1-1.i386.rpm
     apr-util-devel-1.4.1-1.i386.rpm
 
     下載完成之後,使用“rpm -Uvh”進行升級即可。
     如:# rpm -Uvh apr-1.4.6-1.i386.rpm
         # rpm -Uvh apr-devel-1.4.6-1.i386.rpm
         # rpm -Uvh apr-util-1.4.1-1.i386.rpm
         # rpm -Uvh apr-util-devel-1.4.1-1.i386.rpm
     另外,httpd-2.4.1編譯過程也要依賴於pcre-devel軟件包,需要事先安裝。此軟件包是系統光盤自帶的,因此,找到並安裝即可。
      如:# yum install pcre-devel -y (首先要配置好yum源,並安裝好“Development Tools” “Development Libraries”包組。)
     (2)、編譯安裝httpd-2.4.1
 
      首先下載httpd-2.4.1到本地,而後執行如下命令進行編譯安裝過程:
 
        # tar xf httpd-2.4.1.tar.bz2  將其解壓至本目錄,也可以用-C 指定其他目錄。
        # cd httpd-2.4.1
        # ./configure --prefix=/usr/local/apache \    //指定其安裝的路徑
          --sysconfdir=/etc/httpd \                     //指定其配置文件所在路徑
          --enable-so --enable-ssl \                    //支持ssl,啓用dso功能動態模塊的裝載能力
          --enable-cgi --enable-rewrite \              //支持cgi功能,支持重寫
          --with-zlib                                 
        # make && make install
 
     (3)、修改httpd的主配置文件,設置其Pid文件的路徑
 
       編輯/etc/httpd/httpd.conf,添加如下行即可:
        # vim /etc/httpd/httpd.conf
        PidFile  "/var/run/httpd.pid"
 
     (4)、提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下:
        #  vim /etc/rc.d/init.d/httpd
        
        #!/bin/bash
        #
        # httpd        Startup script for the Apache HTTP Server
        #
        # chkconfig: - 85 15
        # description: Apache is a World Wide Web server.  It is used to serve \
        #       HTML files and CGI.
        # processname: httpd
        # config: /etc/httpd/conf/httpd.conf
        # config: /etc/sysconfig/httpd
        # pidfile: /var/run/httpd.pid
 
        # 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/apache/bin/apachectl
             httpd=${HTTPD-/usr/local/apache/bin/httpd}
             prog=httpd
             pidfile=${PIDFILE-/var/run/httpd.pid}
             lockfile=${LOCKFILE-/var/lock/subsys/httpd}
             RETVAL=0
 
         start() {
             echo -n $"Starting $prog: "
             LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
             RETVAL=$?
             echo
                 [ $RETVAL = 0 ] && touch ${lockfile}
              return $RETVAL
             }
 
         stop() {
          echo -n $"Stopping $prog: "
          killproc -p ${pidfile} -d 10 $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=$?
                echo $"not reloading due to configuration syntax error"
                failure $"not reloading $httpd due to configuration syntax error"
             else
                killproc -p ${pidfile} $httpd -HUP
                RETVAL=$?
             fi
             echo
             }
 
         # See how we were called.
         case "$1" in
          start)
         start
         ;;
          stop)
         stop
         ;;
          status)
            status -p ${pidfile} $httpd
         RETVAL=$?
         ;;
          restart)
         stop
         start
         ;;
          condrestart)
         if [ -f ${pidfile} ] ; then
          stop
          start
         fi
         ;;
          reload)
            reload
         ;;
          graceful|help|configtest|fullstatus)
          $apachectl $@
         RETVAL=$?
         ;;
           *)
         echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
         exit 1
         esac
 
         exit $RETVAL
 
      而後爲此腳本賦予執行權限:
         # chmod +x /etc/rc.d/init.d/httpd
 
      加入服務列表:
         # chkconfig --add httpd
      開機自動啓動:
         # chkconfig httpd on
       接下來就可以啓動服務進行測試了。
         # service httpd start //啓動httpd 服務
       若是此時出現啓動失敗的提示,則有可能是SELinux的關係,
       用getenforce 查看,若是Enforcing,只要用# setenforce 0 命令將其置爲Permissive即可。
       如 我的ip地址是172.16.7.1,則在地址欄輸入ip,就會顯示“It works!”,表明編譯安裝成功。
1)php能使用mcrypt擴展;
  (1)、解決依賴關係:
 
       執行如下命令:
         # yum -y groupinstall "X Software Development" 
 
       如果想讓編譯的php支持mcrypt擴展,此處還需要下載如下兩個rpm包並安裝之:
           libmcrypt-2.5.7-5.el5.i386.rpm
           libmcrypt-devel-2.5.7-5.el5.i386.rpm
       然後,需要安裝:
         # rpm -ivh libmcrypt-2.5.7-5.el5.i386.rpm
         # rpm -ivh libmcrypt-devel-2.5.7-5.el5.i386.rpm
 
     (2)、編譯安裝php-5.3.10
 
       首先下載源碼包至本地目錄,
         # tar xf php-5.3.10.tar.bz2
         # cd php-5.3.10
         # ./configure --prefix=/usr/local/php \    //指定其安裝目錄
           --with-mysql=/usr/local/mysql --with-openssl \    // 因爲要依賴與mysql,所以也要知道mysql的安裝路徑
           --with-mysqli=/usr/local/mysql/bin/mysql_config \ //是一種接口
           --enable-mbstring --with-freetype-dir \           //可對多字節 字符語言編碼提供支持
           --with-jpeg-dir --with-png-dir --with-zlib \      // 支持jpeg、png格式的文件
           --with-libxml-dir=/usr --enable-xml  \            // 支持xml文件
           --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  // 支持mcrypt擴展
 
        # make
        # make test
        # make intall
 
      爲php提供配置文件:
        # cp php.ini-production /usr/local/php/lib/php.ini
 
     (3)、 編輯apache配置文件httpd.conf,以apache支持php
 
        # vim /etc/httpd/httpd.conf
      添加如下二行
        AddType application/x-httpd-php  .php
        AddType application/x-httpd-php-source  .phps
 
      定位至DirectoryIndex index.html 
       修改爲:
       DirectoryIndex  index.php  index.html
    
    (4)、測試php安裝是否成功。 
        # cd /usr/local/apache/htdocs
        # mv index.html index.php
        # vim index.php
        <?php
          phpinfo();
        ?>
       保存退出後,將httpd服務重新啓動: service httpd restart或者 reload讓其重新載入配置文件即可測試php是否已經可以正常使用。 
    (5)、或者重新編輯/usr/local/apache/index.php文件,如下所示:
      <?php
      $link=mysql_connect('localhost','root','');  //與mysql數據庫連接
      if ($link)
      echo "Successful!";
      else 
      echo "Failure...";
      
      mysql_close();                              //關閉數據庫連接
      ?>
       而後重新啓動httpd,並且重新啓動mysqld服務。這時輸入ip地址查看信息。
        可以把mysqld服務關閉,在查看一下連接信息,測試是否連接mysqld服務成功。
 
2)Web使用中心主機,其網頁文件目錄爲/www/htdocs;
   # vim /etc/httpd/httpd.conf
    定位至DocumentRoot:修改爲DocumentRoot "/www/htdocs"
3)此Web也能基於https協議工作;
   # cd /etc/pki/CA
   # (umask 077;openssl genrsa 1024 > private/cakey.pem)
   # ll private/cakey.pem
   # openssl req -new -x509 -key private/cakey.pem > cacert.pem
   # ls
   # mkdir certs newcerts
   # touch index.txt serial crlnumber
   # echo 01 > serial
   # echo 01 > crlnumber
   # cat serial
   # cat crlnumber
  以上就是 建立我們自己的CA,然後自己給自己發證,實現安全傳輸:
   # cd /etc/httpd
   # (umask 077;openssl genrsa 1024 > server.key)
   # ls
   # openssl req -new -key server.key > server.csr
   # openssl ca -in server.csr > server.crt
   這個過程是給httpd服務頒發證書。
   # vim httpd.conf
      LoadModule ssl_module modules/mod_ssl.so
      LoadModule socache_shmcb_module modules/mod_socache_shmcb.so ,將這兩句的#註釋去掉。
 
再將/etc/pki/CA下的cacert.pem 複製到桌面windows,並將後綴改爲".crt",加進瀏覽器的安全認證證書
  # service httpd restart
  https://172.16.7.1
4、Web2上編譯安裝httpd-2.4.1和php-5.3.10,讓其使用Web1的mysql做爲數據庫服務器,配置LAMP平臺可以正常工作,要求
web2上的httpd-2.4.1 和 php-5.3.10編譯及安裝與web1一樣,在此不再贅述。
 由於將web1的mysql服務掛載至/www/htdocs下,而web1將/www/htdocs共享了,所以web2可以與web1共用。
 但是,web2也必須編譯安裝mysql-5.5.20,只是不用啓動mysql服務而已。過程不再贅述。
1) php能使用mcrypt擴展;
2)掛載Web1上的nfs目錄/www/htdocs至本地的/www/htdocs;
  # mount -t nfs 172.16.7.1:/www/htdocs /www/htdocs  //將web1上的共享目錄掛載至web2上相同的目錄下。
  3)Web使用中心主機,其網頁文件目錄爲/www/htdocs;
4)此Web也能基於https協議工作;(提示:Web2需要使用發頒發給Web1的證書和Web1的私鑰文件。請思考爲什麼。)
提示:Web2上也需要事先安裝mysql,因爲php的configure腳本需要用到mysql的頭文件等;但Web2的mysql不需要啓動;
    # scp 172.16.7.1:/etc/httpd/server.key /etc/httpd/
    # scp 172.16.7.1:/etc/httpd/server.csr /etc/httpd/
    # scp 172.16.7.1:/etc/httpd/server.crt /etc/httpd/z
    # vim /etc/httpd/httpd.conf
    以上三句就是將web1上的密鑰和證書等複製到web2上,使用相同的https.
    啓用mod_ssl:
    #LoadModule ssl_module modules/mod_ssl.so 的註釋去掉,再把CA證書cacert.pem拷貝到要訪問web服務的主機上,改後綴名爲.crt,即是cacert.crt,導入到可信任站點。
此時基於https的web訪問就實現了。
    
    在web2上可使用 https://dz.magedu.com
5、在Web1的LAMP平臺上安裝配置discuz-7.2,要求:
    在web1上/www/htdocs下建一個新的目錄,# mkdir /www/htdocs/discuz.
    首先下載源碼包至本地目錄,下載位置ftp://172.16.0.1/pub/Sources/LAMP。
    # unzip  Discuz-7.2_FULL_SC_GBK.zip
    # cd Discuz-7.2
    # mv upload /www/htdocs/discuz   //將解壓後的Discuz目錄下的upload目錄移動到/www/htdocs/discuz
    #vim config.inc.php
     修改:
    $dbhost = 'localhost';   
    $dbuser = 'dzuser';        
    $dbpw = 'lee';                          
    $dbname = 'discuz'; 
 
    #vim /usr/local/php/lib/php.ini
     更改:short_open_tag = On
 
    # vim /etc/httpd/httpd.conf
       將/etc/httpd/extra/httpd-vhosts.conf前的#註釋去掉,說明啓用虛擬主機功能。
    # vim /etc/httpd/extra/httpd-vhosts.conf
    添加:<VirtualHost 172.16.7.1:80>
           DocumentRoot "/www/htdocs/discuz"
           ServerName dz.magedu.com
           </VirtualHost>
           保存退出後,並在hosts文件下寫入 172.16.7.1 dz.magedu.com。重啓httpd服務。
     在瀏覽器輸入dz.magedu.com/install,然後根據提示進入安裝嚮導,一步步安裝discuz.
     此時,可能界面出現亂碼,則將/etc/httpd/httpd.conf下的 AddDefaultCharset UTF-8註釋掉即可。並且再重啓一下服務。<font style="background-color: #070205"></font>
  1)在Web1上安裝完成後,此dz論壇也能夠通過Web2被正常訪問;
    安裝完成後,可以在web2上輸入dz.magedu.com,也可以訪問discuz網站。
    對了,要在web2的/www/htdocs下也應該創建一個目錄discuz.
  2)通過任一臺主機登錄的用戶都能上傳的文件或發的帖子等,而且通過另一臺主機也可以訪問到;
     此時,由於web2已經將web1的共享目錄掛載至本地,所以web1的共享目錄有任何改變,web2均可同時得到相應的改變。
       即在任意一臺主機上發帖或上傳文件都可以被另一臺主機訪問。
6、在Web1上的/www/phpmyadmin目錄中安裝phpMyAdmin-3.4.10.1,要求:
    首先下載源碼包至本地目錄,下載位置ftp://172.16.0.1/pub/Sources/new_lamp。
    # tar xvf phpMyAdmin-3.4.10.1.tar.gz
    # cd phpMyAdmin-3.4.10.1
    # mkdir /www/htdocs/pma
    # mv * /www/htdocs/pma
    # cd /www/htdocs/pma
    # cp config.sqmple.inc.php config.inc.php  //php的配置文件
    # vim config.inc.php
   把$cfg[‘blowfish_secret’]=’’改爲$cfg[‘blowfish_secret’]=’dfaiofagzlvlgb’即可。
 
    基於https訪問web2的pma: https://172.16.7.2/pma
 
1)其能夠通過https://web1_ip/dma路徑訪問到;
2)僅能夠通過https協議訪問,不能通過http協議訪問到此應用;
思考:(1)能不能將phpMyAdmin-3.4.10.1安裝到Web2上對Web1上的mysql進行管理?如果能,請實現之;
   (2)通過https://www.magedu.com/pma訪問phpMyAdmin行不行,爲什麼?如果期望其可以,如何解決?
7、在Web2上的/www/wordpress目錄中安裝wordpress-3.3.1,要求:
1)其能夠通過http://web2_ip/blog訪問,或通過https://web2_ip/blog訪問;
思考:(1)能不能直接使用http://www.magedu.com/blog訪問此博客,爲什麼?如果期望其可以,如何實現?
      172.16.7.1:下載wordpress-3.3.1.zip到本地
    # mv wordpress-3.3.1.zip /www
    # cd /www
    # mkdir htdocs/blog
    # unzip wordpress-3.3.1.zip
    # mv wordpress/* htdocs/blog/
    # cd htdocs/blog
    # cp wp-config-sample.php wp-config.php
    # vim wp-config.php
   把define('DB_NAME', 'database_name_here')改爲define('DB_NAME', 'mysql');
   把define('DB_USER', 'username_here');改爲 define('DB_USER', 'ling');
   把define('DB_PASSWORD', 'password_here')改爲define('DB_PASSWORD', 'ling');
   
   然後將httpd服務重新啓動一下,打開https://172.16.7.2/blog,查看wordpress博客。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章