NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 153344

    累積人氣

  • 44

    今日人氣

    0

    訂閱人氣

Neil's Ubuntu 備忘操作筆記整理(二.): NoSQL Mongodb x Web站台(LAMP)&整合Nginx 動靜態分離 by Neil

實作開始:

安裝LAMP架構(Mariadb: 我是依官方Resource另外安裝): Apache x Mariadb x PHP

apt-get install software-properties-common         #Mariadb Repository

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

add-apt-repository 'deb http://mariadb.biz.net.id//repo/5.5/ubuntu trusty main'

手動 安裝LAMP架構參考

apt-get install apache2 php5 php5-mysql libapache2-mod-php5 php5-mcrypt libmcrypt4 libmcrypt-dev mariadb-server mariadb-client

手動安裝PHPMyadmin: 

apt-get install phpmyadmin php5-mcrypt libmcrypt4 libmcrypt-dev


配置優化PHP 加速 Zend Opcache

apt-get install -y build-essential php5-dev
 
pecl install zendopcache-7.0.3
 
vi /etc/php5/mods-available/opcache.ini 
 
zend_extension=/usr/lib/php5/20121212/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

#重新啟動 apache2 :  service apache2 restart

關於ZenOpcahe 我們之前曾再CentOS 平台上發表(現轉移到Ubuntu)過可參考此篇

配置成功後接者我們可以再phpinfo(); 輸出 資訊中看到以下,配置Zend Opcache已成功


   從指令模式: php -v  也可看到 zend opcache 模組已被啟用 PHP版本5.5.9
    Then 方才我們順手安裝phpmyadmin : 先前安裝過程中有指定root帳戶密碼配置OK

     參考網頁:  http://http://icpo.chronos.com:8080/phpmyadmin  

    #上述提到已把Apache *:80變更為*:8080

   上述幾張截圖已經將DNS Domain  A Record 配置好了用dig指令或nslookup可查得該筆記錄
 [關於Ubuntu apache 2 目錄結構介紹  #與配置rpm for Centos 略有差異配置檔拆解成數個配置檔

  主要根組態目錄: /etc/apache2 

 虛擬主機網站"*.conf "慣用配置於 "sites-available"  目錄下 預設底下 兩個檔案

  000-default.conf  #本機預設配置檔案*:80    

 #一般來說不會特別異動此檔,以編輯其他虛擬主機檔案為主

   本次Lab 將原 * :80 Port 變更為  *:8080


default-ssl.conf  #本機預設配置SSL網站*:443  , 單一Apache 主機需啟用SSL指令 

" a2enmod ssl" 啟用SSL 模組, a2endismod "模組名稱" 為停用指定模組指令

 SSLEngine on            #組態SSL主機必要憑證,私鑰路徑
 SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
 SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
ports.conf        #預設Apache Listen Port Number,若有修改新Listen port 請在此增加埠號
 apache2.conf   #關於Server 本身參數調效值配置 EX: Timeout, Server Name..

mods-available  &  mods-enabled   #關於apache 支援模組相關檔案

承上述在mods-enabled 目錄下 可以找到已啟用Apache相關模組資訊

 sites-enabled   #在sites-avaliable 目錄下編輯好虛擬主機組態後.可使用

 a2ensite  "虛擬主機配置檔名稱"   #可看到連結指向對應關係,網站啟用配置即OK

  *配置Ubuntu虛擬主機組態跟操作CentOS 上無差別,在此不贅述說明,接下來介紹才是我們看重要點

[實作Nginx (靜態網頁處理) + Apache(PHP5:動態網頁處理)設計]  

安裝 "nginx"  版本1.4.6

aptitude install nginx 

About  Nginx 組態根目錄 /etc/nginx/    ;  主要配置檔案 /etc/nginx/nginx.conf

網站Data預設根目錄:   /var/www/html


/etc/nginx/nginx.conf    

#組態檔檢視Part 1:  

User 預設等同Apache Daemon

worker_processes  4   與主機核心優化線程微調有關

 
/etc/nginx/nginx.conf    #組態檔檢視Part 2:  亦是一些主機組態參數配置,gzip壓縮Daemon效能

*本人之前曾參考過網路上不錯微調Nginx 優化篇章,有興趣朋友可點此參考


OK~Then 來新增Name-Baesed VirtualHost   

主機名稱: icpo.chronos.com

 web root : /var/www/html/vhoston/   #權限 755, www-data  

cd /etc/nginx/site-avaliable 

vi   vhoston.conf   #參考配置如下

server {
    listen       *:80;                                         #listen *:80 port
    server_name  icpo.chronos.com;                
    root /var/www/html/vhoston;
    index index.html index.htm index.php;
    access_log /var/log/nginx/ipco/access.log;
    error_log /var/log/nginx/ipco/error.log;
    location ~ .(php)?$ {                     
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8080;    
       #只要任何檔案尾符合*.php 轉交由本機:8080 Port處理即Apache主機
    }
 
    location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
        expires 15d;
    }
    location ~ .*.(js|css)?$ {       #About Nginx Cache 靜態元件有效配置
        expires 1h;
    }
  location ~ /.ht {
        deny  all;
}
 
}
 
Then 我們繼續編輯支援SSL虛擬主機(https)配置:

產生金鑰/憑證(產出privkey.pem,cacert.crt)


mkdir -p  /var/www/ssl/    

cd  /var/www/ssl/

openssl genrsa -out privkey.pem 2048        #建立privkey key

openssl req -new -key privkey.pem -out cert.csr     #憑證申請書

openssl req -new -x509 -days 3650 -key privkey.pem -out cacert.crt  
#憑證簽署

-----------------------------------
vi  vhostssl.conf             #新增SSL 虛擬主機配置


server {
    listen      *:443;                                           #listen*:443
    server_name  icpo.chronos.com;
    root /var/www/html/vhoston;
    index index.html index.htm index.php; 
    ssl on;                                                                             #啟用SSL 
    ssl_certificate     /var/www/ssl/cacert.crt;                  #使用openssl生成憑證
    ssl_certificate_key /var/www/ssl/privkey.pem;       #產生私密金鑰(權限600)
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
 
    access_log /var/log/nginx/ipco/access.log;
    error_log /var/log/nginx/ipco/error.log;
 
    location ~ .(php)?$ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8080;
    }
 
    location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
        expires 15d;
    }
    location ~ .*.(js|css)?$ {
        expires 1h;
    }
 
}
 

OK上述配置OK後建立Link 指向site-enable

cd /etc/nginx/site-avaliable

ln -s vhoston.conf   ../site-enable/vhoston.conf

ln -s vhostssl.conf  ../site-enable/vhostsss.conf 

/etc/init.d/nginx restart 

netstat -tuln | grep *:80    #80,443 nginx , 8080 apache 順利啟動

netstat -tuln | grep *:443 
驗收測試讀寫分離處理        #暫停APACHE *:8080

http://icpo.chronos.com     #目前靜態網頁交給nginx處理OK-虛擬主機運作正常

再重啟Apache主機: *:8080

http://icpo.chronos.com/test.php

https//icpo.chronos.com/test.php         #測試SSL網站

#下圖中test.php網頁成功轉送到http://localhost:8080  處理 讀寫分離設計已成功謝幕,本篇僅

剩最後一階段實作Mongodb


*先前本人亦曾寫一篇Nginx+PHP-FPM 讀寫分離設計(分散式) 有興趣者可點此參考該文

   查看虛擬主機SSL 憑證資訊無誤 
延續上述完成動靜網頁分離設計 佈署 [PHP+Mongodb 存取]

參考Mongodb 指示安裝Mongodb   

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

apt-get update

aptitude install mongodb-org


----Then 我們繼續安裝PHP 存取Mongodb Driver--

pecl install mongo

echo 'extension=mongo.so' >> /etc/php5/apache2/php.ini

service apache2 restart

OK 現在檢視PHP info Page檢查是否順利支援PHP存取Mongodb 條件 下圖証實驅動支援ok

授權Mongodb Administrator 權限(預設無授權限制) :   Mongodb版本 2.6.5

預設無啟用"--auth"權限驗證 輸入"mongo" 即可進入mongodb 管理介面
切換到"admin"資料庫,新建"Root" 即"系統管理員"權限

use admin

db.createUser(
  {
    user: "keynes",
    pwd: "123456",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  }
)

#建立系統管理員成功您將看到:  Succcessfully add user 訊息
退出Mongodb 修改mongodb 主要組態檔案 
  /etc/mongod.conf

dbpath=/var/lib/mongodb    #預設mongodb 資料data路徑

#where to log

logpath=/var/log/mongodb/mongod.log    

logappend=true

#port = 27017         #預設Listen Port 27017

# Listen to local interface only. Comment out to listen on all interfaces.

bind_ip = 0.0.0.0    
#若對內網開放,請填內網IP: 192.168.11.182

# Disables write-ahead journaling
# nojournal = true

# Enables periodic logging of CPU utilization and I/O wait
cpu = true

# Turn on/off security.  Off is currently the default
#noauth = true
auth = true          #將註解除去=啟用帳戶驗證

........


儲存修改完畢後,重啟mongodb 生效設定

 /etc/init.d/mongod restart 

netstat -tuln |  grep  27017    #OK已啟動

使用帳戶連線驗證登入試試

mongo 192.168.11.182/admin    #連線內網mogodb底下admin 資料庫

db.auth("keynes","123456")   #使用方才建立系統管理員登入, 1=true , 0=false
 
 
使用超級管理員"keynes"進行連線登入
 
mongo -u keynes -p --authenticationDatabase admin 
#建立授權資料庫 Angelababy User: wudaju (可讀可寫dbOwner) 

> use angelababy 
> db.createUser(                
 #建立單一資料庫Owner DB: angelababy
 
{
     user: "wudaju",
     pwd: "12345",
     roles:
     [
       {
       role: "dbOwner",
         db: "angelababy"
       }
     ]
   }
 )

Then 我們現希望變更用戶"wudaju" 密碼可以使用以下指令

db.changeUserPassword("wudaju", "欲變更的密碼")  db.auth 傳回值=1 (true)

該資料庫底下: 有兩個授權用戶 wudaju,wuda

亦可使用 db.dropUser("wuda")   # 刪除已存在DB授權使用者 傳回值=true 為真,該帳號已被刪除

 Then 我們參考官網新增測試資料表與資料

建立測試資料,依官網手冊建立 隨機測試資料

>use angelababy

>db.auth("wudaju","45678")



function insertData(dbName, colName, num) {

  var col = db.getSiblingDB(dbName).getCollection(colName);

  for (i = 0; i < num; i++) {
    col.insert({x:i});
  }

  print(col.count());

}

#使用inserdada("angelababy","chrodata",400)  

 在angelabay資料庫下成立表"chrodata,插入400筆資料

使用db.chrodata.find()  查詢資料表內容有400筆" , 點選"it"可翻下一頁檢視資料
 Then 最後我們要測試"PHP撈取Mongodb 資料" :  撰寫以下PHP文檔

  vi  /var/www/html/vhoston/mongotest.php      #虛擬主機icpo.chronos.com 

   db: angelababy

   collection:  chrodata


瀏覽頁面:  http://icpo.chronos.com/mogotest.php        

#本Lab在內網測試,外網看不到該domain

成功撈取該Collection 部份資料: 看下圖 

結論:  

本篇我們總共測試了Ubuntu 14.04 平台上虛擬主機(Nginx + Apache+Mariadb 動靜態網頁分割)

並擴充PHP編譯執行效率提升插件 Zend Opcache Plugin, 可有助於提升網站執行效能,於最後靈機一動

時下最夯大數據處理 NoSQL Mongodb
連線PHP測試與基礎授權, 過去工作並未使用到,受到
uitox

ASAP閃電購物網 刺激到熱血研究決心知道他們家擴大雲端相關這面研究與導入後稍為了解,目前仍在學

習中...的卻蠻看到NoSQL 數據庫未來發展.加油
相簿設定
標籤設定
相簿狀態