天天看點

源碼安裝LNMP 架構

源碼安裝mysql

新安裝的linux 6.3

/etc/init.d/postfix  stop   停止postfix

解除安裝mysql  rpm -e mysql-libs --nodeps #需要将postfix 服務關閉,要不然就啟動不了。

rpm -qa | grep php

rpm -qa | grep apache

下載下傳最新版本的mysql   5.5

tar zxf cmake-2.8.4.tar.gz

cd cmake-.2.8.4

./configure   等一會,時間有點長

gmake && gmake install

tar zxf mysql-..

cd mysql

yum install cmake -y

yum install gcc gcc-c++(沒安裝會報錯:

CMake Error at /usr/share/cmake/Modules/CMakeCXXInformation.cmake:17 (GET_FILENAME_COMPONENT):

 get_filename_component called with incorrect number of arguments

) make ncurses-devel bison(必須安裝,否則報

Warning: Bison executable not found in PATH

-- Configuring incomplete, errors occurred!

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all

如果cmake 的過程中出錯,則需删除 CMakeCache.txt 緩存檔案

cmake完後,會警告Googletest沒有安裝,這個不用管;

make & make install  編譯時間也會很長

重新編譯時,需要清除舊的對象檔案和緩存資訊

make clean

rm -f CMakeCache.txt

cd /usr/local/lnmp/mysql/support-file/

cp my-large.cnf /etc/my.cnf   #根據你的主機記憶體複制mysql配置檔案

cp mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

cd /usr/local/lnmp/

useradd -u 27 -M  mysql    #-M表示不建立家目錄

chown mysql.mysql mysql/  -R

cd /usr/local/lnmp/mysql/scripts/

./mysql_install_db --user=mysql --basedir=/usr/local/lnmp/mysql/  --datadir=/usr/local/lnmp/mysql/data/          初始化資料庫

ll /usr/local/lnmp/myslq/data   此時就有一些初始化檔案生成drwxr-xr-x. 2 mysql mysql   4096 Jul 12 12:13 mysql

-rw-rw----. 1 mysql mysql  27813 Jul 12 12:13 mysql-bin.000001

-rw-rw----. 1 mysql mysql 995349 Jul 12 12:13 mysql-bin.000002

-rw-rw----. 1 mysql mysql     38 Jul 12 12:13 mysql-bin.index

drwx------. 2 mysql mysql   4096 Jul 12 12:13 performance_schema

drwxr-xr-x. 2 mysql mysql   4096 Jul 12 12:10 test

cd /usr/local/lnmp/mysql

chown root . -R

chown mysql data -R

/etc/init.d/mysqld start

此時會顯示

Starting MySQL..... SUCCESS!

如果mysql不能正常啟動,比如pid檔案不存在,先把mysql相關目錄檔案删除,再重新編譯

ll /usr/local/lnmp/mysql/data

會有這個檔案生成

srwxrwxrwx. 1 mysql mysql        0 Jul  7 08:20 mysql.sock

chkconfig --level 3 mysqld on

cd

vi .bash_profile

在PATH後面添加成下面的樣子:

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

source .bash_profile

echo $PATH

ln -s /usr/local/lnmp/mysql/lib  /usr/local/lnmp/mysql/lib64

#不然php編譯的時候(./configure)找不到mysql的庫檔案

mysql_secure_installation    #按提示完成mysql安全設定,生産環境推薦使用

mysql -pwestos

yum install gperf readline-devel time zlib-devel -y

rpmbuild -tb mysql-5.5.12.tar.gz   将tar 包 編譯成rpm 包

使nginx支援php(php-fpm):

nginx本身不能處理PHP,它隻是個web伺服器,當接收到請求後,如果是php請求,則發給php解釋器處理,并把結果傳回給用戶端。

nginx一般是把請求發fastcgi管理程序處理,fascgi管理程序選擇cgi子程序處理結果并傳回給nginx。

PHP-FPM是一個PHP FastCGI管理器,是隻用于PHP的,可以在 http://php-fpm.org/download下載下傳得到.

PHP-FPM其實是PHP源代碼的一個更新檔,旨在将FastCGI程序管理整合進PHP包中。必須将它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。

新版PHP已經內建php-fpm了,不再是第三方的包了,推薦使用。PHP-FPM提供了更好的PHP程序管理方式,可以有效控制記憶體和程序、可以平滑重載PHP配置,比spawn-fcgi具有更多有點,是以被PHP官方收錄了。在./configure的時候帶 –enable-fpm(也可以帶上--enable-fastcgi )參數即可開啟PHP-FPM。

cd /usr/local/php

cp etc/php-fpm.conf.default etc/php-fpm.conf

修改

vi etc/php-fpm.conf.default etc/php-fpm.conf

修改user及group的值。

修改nginx配置檔案以支援php-fpm:

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;   #fastcgi預設端口為9000

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  

#注意将原先的/scripts$fastcgi_script_name 修改為 $document_root$fastcgi_script_name;否則會報錯:

   FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

include fastcgi_params;

}

在/usr/local/nginx/html下建立index.php檔案:

<?php

phpinfo();

?>

啟動php-fpm:

/usr/local/php/sbin/php-fpm (手動打更新檔的啟動方式/usr/local/php/sbin/php-fpm start)

啟動nginx:

/usr/local/nginx/sbin/nginx

安裝nginx 處理php網頁時,需安裝php 和fastcgi。

nginx 處理jsp網頁時,需安裝jdk(java)和tomcat,由tomcat處理jsp網頁。

然後由nginx 同時支援 靜态網頁,php網頁,jsp網頁:

vim /usr/local/lnmp/nginx/conf/nginx.conf

location / {

           root   html;                    #nginx處理靜态網頁

           index  index.html index.htm;

       }

           root           html;           #将php網頁交給9000端口的程式處理

           fastcgi_pass   127.0.0.1:9000;

           fastcgi_index  index.php;

          # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

           include        fastcgi.conf;    如果不修改此處,則php網頁打不開

location ~ \.jsp$ {

           proxy_pass   http://127.0.0.1:8080;  #将jsp網頁交給8080端口的程式處理,tomcat 處理jsp網頁的預設端口是8080,并且client通路時不用在IP後面添加端口号。

curl -I taobao.com 檢視server所使用的類型

HTTP/1.1 302 Found

Server: Tengine

Date: Sat, 07 Jul 2012 09:36:25 GMT

Content-Type: text/html

Content-Length: 260

Connection: keep-alive

Location: http://www.taobao.com/

Expires: Sun, 08 Jul 2012 09:36:25 GMT

Cache-Control: max-age=86400

源碼安裝nginx

yum  install pcre-devel openssl-devel -y   支援http的rewrite module,如果沒有安裝,會報 error: the HTTP rewrite module requires the PCRE library。

下載下傳最新穩定版的nginx

useradd -s /sbin/nologin -M nginx  # -M 表示不建立nginx使用者家目錄

tar zxf nginx-1.2.1.tar.gz

cd nginx-1.2.1

vi auto/cc/gcc  關閉debug

# debug

#CFLAGS="$CFLAGS -g"  注釋掉這行,去掉 debug 模式編譯,編譯以後程式隻有幾百 k

vi src/core/nginx.h

改成這樣:#define NGINX_VER          "nginx"  修改此行,去掉後面的“NGINX_VERSION”,為了安全,這樣編譯後外界無法擷取程式的版本号

yum install openssl-devel -y       #不安裝編譯時會報錯的

./configure --user=nginx --group=nginx --prefix=/usr/local/lnmp/nginx --with-http_stub_status_module --with-http_ssl_module

make & make install

du -sh /usr/local/lnmp/nginx       如果不關閉debug的話,則生成4.4M的目錄

vi /usr/local/lnmp/nginx/conf/nginx.conf

user  nginx;

worker_processes  2;

events {

       use epoll;

   worker_connections  1024;

       }

server {

       listen       80;

       server_name  localhost;

       #charset koi8-r;

       #access_log  logs/host.access.log  main;

       location / {

           root   html;

   location /status {    

   stub_status on;        

   access_log off;      

   }

添加上面3行,當通路192.168.0.55/status 時,會顯示如下資訊:

Active connections: 1

server accepts handled requests

16 16 168

Reading: 0 Writing: 1 Waiting: 0

vi ~/.bash_profile

在PATH後添加  /usr/local/lnmp/nginx/sbin

source ~/.bash_profile

nginx -t  檢測nginx的文法

nginx  啟動nginx

ps aux   可以看到總共有3個nginx程序

curl -I localhost

在浏覽器中輸入  http://192.168.0.55/

nginx -s stop  關閉nginx

nginx 的https功能

編輯nginx的配置檔案

       listen       443;

       server_name  localhost;

       ssl                  on;

       ssl_certificate      cert.pem;

       ssl_certificate_key  cert.pem;

       ssl_session_timeout  5m;

       ssl_protocols  SSLv2 SSLv3 TLSv1;

       ssl_ciphers  HIGH:!aNULL:!MD5;

       ssl_prefer_server_ciphers   on;

       location / {

           root   html;

           index  index.html index.htm index.php;

  }

       location ~ \.php$ {

           root           html;

           fastcgi_pass   127.0.0.1:9000;

           fastcgi_index  index.php;

           include        fastcgi.conf;

nginx -t

nginx: [emerg] SSL_CTX_use_certificate_chain_file("/usr/local/lnmp/nginx/conf/cert.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system lib error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib)

nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test failed

cd /etc/pki/tls/certs/

make cert.pem

mv cert.pem  /usr/local/lnmp/nginx/conf/

nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

nginx -s reload

netstat -anltp | grep :443

此時打開浏覽器輸入  https://desktop55/phpadmin/index.php  點選獲驗證書并添加

nginx的虛拟主機

http://wiki.nginx.org/      此網站有nginx的詳細配置

編輯配置檔案

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                     '$status $body_bytes_sent "$http_referer" '

                     '"$http_user_agent" "$http_x_forwarded_for"';

将main日志功能開啟

listen          80;

server_name     www.domain1.com;

access_log      logs/domain1.access.log main;

index index.html;

root  virtualhosts/domain1.com/;

cd /usr/local/lnmp/nginx/

mkdir virtualhosts

mkdir domain1.com

mkdir domain2.com

echo www.domain1.com > domain1.com/index.html

echo www.domain2.com > domain2.com/index.html

此時宿主主機  vi /etc/hosts

192.168.0.55 www.domain1.com

192.168.0.55 www.domain2.com

此時在宿主主機的浏覽器  http://www.domain1.com

           http://www.domain2.com

nginx的負載均衡

http {

       upstream westos {

       server 192.168.0.77:80 weight=1 max_fails=3 fail_timeout=60s;

       server 192.168.0.57:80 weight=1 max_fails=3 fail_timeout=60s;

#weight 為伺服器的權重,預設是1,權重越大,被通路的機率就越大;如果某台伺服器在fail_timeout時間内出現了max_fail 次連接配接失敗,則nginx會認為那個伺服器已經挂了。

listen 80;

server_name www.westos.org;

proxy_pass http://westos;

開啟另外兩太主機的apache,并在主控端上 vim /etc/hosts

                 192.168.0.55 www.westos.org (前端機)

打開主控端的浏覽器  www.westos.org   然後重新整理,再停止後端機的apache

apache 與 nginx 的壓力測試:

ab   redhat自帶的壓力測試工具

webbench 需下載下傳的壓力測試工具

ab -c 1000 (發1000次) -n 1000 (并發1000次) http://192.168.0.57/index.html 測試apache的

ab -c 1000   -n  1000  http://192.168.0.55/index.html 測試nginx的

沒有優化時,nginx是apache的3到4倍,優化後大概為10倍

下載下傳webbench後,解壓

yum install ctags -y

mkdir -p /usr/local/man/man1  (也可不用建立)

cd  webbench-1.5

make  &&  make install

ll /usr/local/bin/webbench

webbench -c 3000 (發3000次) -t 10 (10秒) http://192.168.0.57/index.html

webbench -c 3000    -t  10 http://192.168.0.55/index.html

安裝php:

下載下傳libiconv-1.13.1.tar.gz      #加強系統對支援字元編碼轉換的功能

  libmcrypt-2.5.8.tar.bz2    

  mhash-0.9.9.9.tar.gz        #mcrypt,mhash是php加密算法擴充庫

  mcrypt-.26.8.tar.gz    

tar zxf  libiconv..

cd libiconv

./configure --libdir=/usr/local/lib64

make && make install

tar jxf libmcrypt..

cd libmcrypt..

make && make install

cd libltdl

./configure --libdir=/usr/local/lib64  --enable-ltdl-install

tar jxvf mhash..

cd mhash..

ldconfig /usr/local/lib64   #為了解決 mcrypt 執行./configure 時報錯的:configure: error: ***libmcrypt was not found。如果ldconfigure後還是報錯,則如下編輯ld.so.conf

vim /etc/ld.so.conf            #實作開機加載,使用動态裝入器裝載找到庫檔案

/usr/local/lib64               添加次行

tar zxf mcrypt..           #上面的libmcrypt,mhash是mcrypt的依賴包

cd mcrypt..

./configure --libdir=/usr/local/lib64  #./configure時可能會報這個錯:/bin/rm: cannot remove `libtoolT’: No such file or directory 直接忽略。 或者報這個錯:

configure: error: *** libmcrypt was not found,則需 ldconfig /usr/local/lib64

(最近安裝一些庫檔案,這樣可以重新加載庫檔案)

yum install net-snmp-devel curl-devel libxml2-devel libpng-devel libjpeg-devel freetype-devel gmp-devel  -y

下載下傳php-5.3.6

tar zxf php..

cd php..

./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=/usr/local/lnmp/mysql/ --with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config

--with-openssl --with-snmp --with-gd --with-zlib --with-curl(沒有) --with-libxml-dir --with-png-dir --with-jpeg-dir

--with-freetype-dir --without-pear --with-gettext --with-gmp(沒有) --enable-inline-optimization --enable-soap  

--enable-ftp --enable-sockets --enable-mbstring  --enable-fpm  --with-fpm-user=nginx --with-fpm-group=nginx --with-libdir=lib64  --with-mcrypt --with-mhash

make ZEND_EXTRA_LIBS='-liconv'  #稍等,時間有點長.Zend Optimizer用優化代碼的方法來提高PHP 4.0應用程式的執行速度.Zend引擎是一個開源腳本引擎.(沒有安裝前面那4個軟體包,編譯時報找不到liconv的錯)

make install

wget http://pear.php.net/go-pear.phar    #支援php的擴充與應用庫功能,它是一個PHP擴充及應用的一個代碼倉庫

/usr/local/lnmp/php/bin/php  go-pear.phar   或在~/.bash_profile 中的PATH後添加/usr/local/lnmp/php/bin/        source ~/.bash_profile

php  go-pear.phar         #添加後就可以直接執行php指令了,安裝go-pear.phar

cd  php-5.3.6

cp php.ini-production   /usr/local/lnmp/php/etc   拷貝php的配置檔案

cd /usr/local/lnmp/php/etc/

mv php.ini-production  php.ini

vim php.ini

cgi.fix_pathinfo=0  大概842行,防止Nginx檔案類型錯誤解析漏洞

date.timezone = Asia/Chongqing  843行

cp php-fpm.conf.default php-fpm.conf  php-fpm的配置檔案

vim php-fpm.conf

pid = run/php-fpm.pid     大概25行

pm.max_children = 50      152行

pm.start_servers = 20     157行

#在生産環境中一定要做壓力測試,找到最合适的程序數組合

pm.min_spare_servers = 5  162行

pm.max_spare_servers = 35  167行

pm.max_requests = 500      173行

cd php-5.3.6/sapi/fpm

cp init.d.php-fpm  /etc/init.d/php-fpm

chmod +x /etc/init.d/php-fpm

/etc/init.d/php-fpm start        

ps aux                        預設啟動20個程序

           root           html;

           fastcgi_index  index.php;

       #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

           include        fastcgi.conf;

如果想要用反向代理,則

           proxy_pass   http://192.168.235;  将php網頁交給192.168.0.235 處理

           index  index.html index.htm index.php;

cd /usr/local/lnmp/nginx/html/

vi index.php

在浏覽器中輸入   desktop55/index.php  

下載下傳最新版的phpMyAdmin-3.4.2

tar  jxf phpMyAdmin..    -C /usr/local/lnmp/nginx/html/

mv phpMyAdmin..   phpadmin

cd phpadmin

cp config.sample.inc.php config.inc.php

vi config.inc.php

$cfg['blowfish_secret'] = 'westos'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

php 子產品擴充:

下載下傳memcached-1.4.5.tar.gz

  memcache-2.2.5.tgz

  eaccelerator-0.9.6.tar.bz2

yum install libevent-1.4.13.1.el6.x86_64.rpm  不行的話用rpm安裝

将optional部分加到dvd.repo中

yum install libevent-devel -y  不行的話用rpm安裝

tar  zxf memcached-1.4.5         背景軟體包

cd memcached-1.4.5

./configure

cd

memcached -u root -m 50 -d    以root使用者身份占50M記憶體在背景運作memcache

ps aux

netstat -antlp

tar vxf memcache-2.2.5.tgz       功能子產品軟體包,以支援某些服務的memcache,如php

cd memcache..

phpize                            定義安裝環境,并生成一些資料,如configure

ls

extension=memcache.so  大概在931行,使php支援memcache

/etc/init.d/php-fpm   reload      平滑加載php

然後在浏覽器   http://desktop55/index.php  找memcache 子產品

cd memcache-2.2.5

cp memcache.php  /usr/local/lnmp/nginx/html/

cd  /usr/local/lnmp/nginx/html/

vim memcache.php           memcache的管理頁面

define('ADMIN_USERNAME','admin');     memcache管理頁面的使用者名和密碼

define('ADMIN_PASSWORD','westos');  

$MEMCACHE_SERVERS[] = '192.168.0.55:11211'; memcache伺服器ip位址

#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

然後在浏覽器   http://desktop55/memcache.php

          輸入  使用者名和密碼  就可以打開圖形化的memcache

yum install libevent-1.4.13.1.el6.x86_64.rpm  #不行的話用rpm安裝

tar  zxf memcached-1.4.5

memcache -u root -m 50 -d

tar jxf memcache-2.2.5.tgz

phpize

extension=memcache.so  大概在931hang

vim memcache.php

define('ADMIN_USERNAME','admin');       // Admin Username

define('ADMIN_PASSWORD','westos');      // Admin Password

$MEMCACHE_SERVERS[] = '192.168.0.55:11211'; // add more as an array

yum install httpd php -y    

下載下傳eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6

phpize    如果此時沒有phpize這個指令,則需安裝一下兩個包

php-devel-5.3.3-3.el6_2.8.x86_64.rpm    

php-eaccelerator-0.9.6.1-1.el6.x86_64.rpm

安裝好了之後就有phpize這個指令了

which phpize

./configure --with-php-config=/usr/local/lnmp/php/bin/php-config

make

vim /usr/local/lnmp/php/etc/php.ini

extension=eaccelerator.so     添加次行,大概933行

/etc/init.d/php-fpm reload

此時用浏覽器通路  192.168.0.235/index.php  可以看到eaccelerator支援php加速

cp control.php  /usr/local/lnmp/nginx/html/

vim /usr/local/lnmp/nginx/html/control.php

$auth = true;          

$user = "admin";

$pw = "westos";        修改eaccelerator 的網頁管理密碼

ll /var/log/httpd      日志目錄

-rw-r--r--. 1 root root     0 Jul 14 02:52 eaccelerator_log

打開浏覽器  http://desktop53/control.php

輸入使用者名和密碼後就會顯示加速控制台

下載下傳ImageMagick-6.6.9-9.tar.gz

tar zxf ImageMagick..

cd ..

下載下傳imagick-3.0.0.tgz

tar zxf imagick..

phpize     後會生成configure

ll /usr/lib64/php/modules/

cd /etc/php.d

vim imagick.ini

extension=imagick.so

/etc/init.d/httpd restart

打開浏覽器   http://desktop53/     看是否有imagick子產品

繼續閱讀