源碼安裝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子產品