mysql+nginx+php編譯過程

1、mysql 5.5.16編譯安裝

安裝所需要系統庫相關文件

yum install -y gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel*

創建mysql安裝目錄和數據存放目錄

mkdir -p /usr/local/mysql

mkdir -p /data/mysql/

創建用戶和用戶組與賦予數據存放目錄權限

useradd mysql -s /sbin/nologin

chown mysql.mysql -R /data/mysql/

安裝cmake

下載cmake http://download.chinaunix.net/download.php?id=31928&ResourceID=1605

tar zxf cmake-2.8.5.tar.gz

cd cmake-2.8.5

./configure

make && make install

安裝mysql 5.5.16

tar fzx mysql-5.5.16.tar.gz

cd mysql-5.5.16

/usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8_general_ci

-DWITH_EXTRA_CHARSETS:STRING=all

-DWITH_MYISAM_STORAGE_ENGINE=1

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_READLINE=1

-DENABLED_LOCAL_INFILE=1

-DMYSQL_DATADIR=data/mysql

make && make install

複製配置文件

mv /etc/my.cnf /etc/my.cnf-`date +%F`

mkdir -p /usr/local/mysql/etc

cp support-files/my-medium.cnf /usr/local/mysql/etc/my.cnf

cd /usr/local/mysql/

mkdir log run tmp data

chown mysql.mysql -R *

vim /usr/local/mysql/etc/my.cnf

innodb_log_files_in_group=2

innodb_data_home_dir = /opt/data/mysql/

innodb_data_file_path = ibdata1:2000M;ibdata2:2000M;ibdata3:20M:autoextend

innodb_log_group_home_dir = /opt/data/mysql/

# 4G RAM

innodb_buffer_pool_size = 1G

innodb_log_file_size = 256M

innodb_log_buffer_size = 8M

innodb_flush_log_at_trx_commit=0

innodb_thread_concurrency=8

innodb_flush_method=O_DIRECT

# perform

tmp_table_size = 512M

max_heap_table_size=128M

初始化數據庫(執行前 需要chmod 755 scripts/mysql_install_db 賦給文件執行權限)

./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql

#basedir mysql安裝路徑 datadir 數據庫文件儲存路徑

設置mysqld的開機啓動:

cp support-files/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

chkconfig mysqld on

chkconfig --list mysqld

設置環境變量

vim /etc/profile

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

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

啓動mysql服務

/etc/init.d/mysqld start

啓動完成之後用ps -ef |grep mysql 命令查看是否啓動

2、mysql安全設置

設置root帳戶的密碼

mysqladmin -u root password '123456'

刪除本機匿名連接的空密碼帳號

本機登錄mysql

mysql -uroot -p

然後輸入上面設置的密碼,登錄後在mysql的命令行中執行:

use mysql;

//update user set password='123456' where host = '127.0.0.1';

delete from user where user="";

delete from user where password="";

flush privileges;

quit

3、安裝nginx

一般我們都需要先裝pcre, zlib,前者爲了重寫rewrite,後者爲了gzip壓縮。

cd /home

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz

tar fzx pcre-8.32.tar.gz

cd pcre-8.32

./configure --prefix=/usr/local/pcre

wget http://zlib.net/zlib-1.2.8.tar.gz

tar -zxvf zlib-1.2.8.tar.gz

cd zlib-1.2.8

./configure

make

make install

安裝ssl(有些沒有)

cd /home

wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz

tar -zxvf openssl-1.0.1c.tar.gz

useradd nginx -s /sbin/nologin

./configure

--user=nginx \

--group=nginx \

--prefix=/usr/local/nginx \

--sbin-path=/usr/sbin/nginx \

--conf-path=/usr/local/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/log/run/nginx.pid \

--lock-path=/var/log/lock/subsys/nginx \

--with-http_ssl_module \

--with-http_realip_module \

--with-http_addition_module \

--with-http_sub_module \

--with-http_dav_module \

--with-http_flv_module \

--with-http_gzip_static_module \

--with-http_stub_status_module \

--with-http_perl_module \

--with-mail \

--with-mail_ssl_module \

--with-pcre=/home/pcre-8.32 \

--with-zlib=/home/zlib-1.2.8 \

--with-openssl=/home/openssl-1.0.1c

或,

./configure

--sbin-path=/usr/local/nginx/nginx

--conf-path=/usr/local/nginx/nginx.conf

--pid-path=/usr/local/nginx/nginx.pid

--with-http_ssl_module

--with-pcre=/home/pcre-8.32

--with-zlib=/home/zlib-1.2.8

make && make install

啓動nginx

nginx

etstat -ano|grep 80

4、php安裝

wget http://cn.php.net/get/php-5.4.8.tar.gz/from/this/mirror

wget http://pecl.php.net/get/memcache-2.2.7.tgz

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

wget https://github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz

wget https://memcached.googlecode.com/files/memcached-1.4.15.tar.gz

wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"

wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"

wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick.tar.gz

wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"

wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz

yum install ncurses-devel libxml2-devel bzip2-devel libcurl-devel

curl-devel libjpeg-devel libpng-devel freetype-devel net-snmp-devel -y

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/ (假定mysql已經安裝。不加這個的話後面編譯的時候可能會出錯)

編譯一些php需要用到的支持庫

tar fzx libiconv-1.14.tar.gz

cd libiconv-1.14

./configure --prefix=/usr/local/

make && make install

cd ..

tar fzx libmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8

./configure

make && make install

cd libltdl/

# pwd

/home/libmcrypt-2.5.8/libltdl

./configure --enable-ltdl-install

make && make install

cd ../../

tar zxvf mhash-0.9.9.9.tar.gz

cd mhash-0.9.9.9/

./configure

make

make install

cd ../


ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la

ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so

ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4

ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8

ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a

ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la

ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so

ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config


tar zxvf mcrypt-2.6.8.tar.gz

cd mcrypt-2.6.8/

/sbin/ldconfig

./configure

make

make install

cd ../

開始編譯php

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \

--with-mysql=/usr/local/mysql/ --with-mysqli=/usr/local/mysql/bin/mysql_config \

--with-pdo-mysql=/usr/local/mysql/ --with-iconv-dir=/usr/local --enable-fpm \

--disable-phar --with-fpm-user=nginx --with-fpm-group=nginx --with-pcre-regex \

--with-zlib --with-bz2 --enable-calendar --with-curl --enable-dba --with-libxml-dir --with-xmlrpc --enable-exif \

--enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir \

--enable-gd-native-ttf --enable-gd-jis-conv --with-mhash --enable-mbstring --with-mcrypt --with-openssl \

--enable-pcntl --enable-xml --disable-rpath --enable-shmop --enable-sockets --enable-zip \

--enable-bcmath --with-snmp --disable-ipv6


########################################

--enable-fastcgi啓動fast-cgi "

---enable-fpm"是激活對FastCGI模式的fpm支持,

"--enable-discard-path" 打開這個選項,用戶就不能透過瀏覽器讀取類似.htaccess 的系統安全相關的文件。

"--enable-force-cgi-redirect" 若使用 CGI VERSION 模式來執行 PHP 的設,打開本選項會增加安全性。

例如用戶讀 http://my.host/cgi-bin/php/secret/doc.html

遇到比較瞭解 PHP 系統的***級用戶可能會自已輸入以下網址 http://my.host/secret/doc.html 來讀取相關信息。

若 PHP 和 Apache 編譯在一起,讓 PHP 變成 Apache 的一部份,則不需要加入本選項。

--with-config-file-path在指定php主配置文件的路徑

--with-mysql和--with-mysqli在指定你的mysql的位置和它的相關工具

--with-iconv-dir,--with-freetype-dir,-with-jpeg-dir,--with-png-dir,--withgd,--with-zlib,--with-libxml-dir

這些都是在啓用對某種文件的支持

--with-curl和--with-curlwrappers是用於支持curl函數,此函數允許你用不同的協議連接和溝通不同的服務器

--with-openssl,--with-mhash,--with-mcrypt這都是和加密有關的參數,啓用它們是爲了讓php可以更好的支持各種加密。

"--enable-bcmath" 高精度數學運算組件。

"--enable-shmop" 和 "--enable-sysvsem" 使得你的PHP系統可以處理相關的IPC函數 。IPC是一個Unix標準通訊機制,

它提供了使得在同一臺主機不同進程之間可以互相通訊的方法。

"--enable-inline-optimization" 棧堆指針和優化線程。

"--enable-pcntl" 多線程優化。

make ZEND_EXTRA_LIBS='-liconv' 手工指定將iconv加到php額外庫中,一般來說這些庫的增加php可以自動完成,

只是iconv貌似不太合羣,需要手工操作。



# make // 如果報錯“make: *** [sapi/cli/php] Error 1” 使用命令“make ZEND_EXTRA_LIBS='-liconv' ”進行編譯

make ZEND_EXTRA_LIBS='-liconv‘

make test

make install

提供php主配置文件:

cp php.ini-production /usr/local/php/etc/php.ini

爲php-fpm提供啓動腳本,添加至服務列表並開機啓動:

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

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

chkconfig --add php-fpm

chkconfig php-fpm on

啓用fastcgi:

fastcgi比較重要,這裏介紹一下:fastcgi是http server和動態腳本語言間通信的接口,nginx支持fastcgi;

同時fastcgi也被許多腳本語言支持,包括php。傳統的cgi接口性能很差,每次http server遇到動態程序時,都需要重啓腳本解釋器來執行解析,

然後將結果返回給http server。fastcgi採用C/S架構,將http server和腳本解析器分開,同時在腳本解析器上啓動一個或多個腳本解析守護進程,

當httt server遇到動態程序時,可以直接交付給fastcgi進程執行,然後將得到的結果返回給瀏覽器,

這樣http server只處理靜態請求或將動態服務器的結果返回給客戶端,從而提高性能。

nginx通過fastcgi來調用php,而php-fpm是fastcgi的進程管理器。fastcgi的主要作用就是將動態語言和http server分離開來,

所以nginx和php/php-fpm經常配置在不同服務器上,各司其職,從而提高性能。


nginx通過fastcgi來調用php,而php-fpm是fastcgi的進程管理器。fastcgi的主要作用就是將動態語言和http server分離開來,

所以nginx和php/php-fpm經常配置在不同服務器上,各司其職,從而提高性能。

cd /usr/local/php/etc

cp php-fpm.conf.default php-fpm.conf

vi php-fpm.conf //一般配置的依據如下

內存小於4G服務器(值可逐級遞減):

修改如下參數:

pm=dynamic

pm.max_children=40

pm.start_servers=10

pm.min_spare_servers=10

pm.max_spare_servers=40

******************************

內存大於4G服務器(值可逐級遞增):

修改如下參數:

pm=static

pm.max_children=100



編譯安裝php的一些擴展模塊

tar zxvf memcache-*.tgz

cd memcache-*/

/usr/local/php/bin/phpize

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

make

make install

cd ../


tar xzvf libevent*

cd libevent*

./configure --prefix=/usr/local

make

make install

cd ..


tar xvzf memcached-*.gz

cd memcached-*

./configure --with-libevent=/usr/local --prefix=/usr/local/memcached

make

make install

cd ../


tar zxvf ImageMagick.tar.gz

cd ImageMagick-*/

./configure

make

make install

cd ../


tar zxvf imagick-*.tgz

cd imagick-*/

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

/usr/local/php/bin/phpize

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

make

make install

cd ../


安裝php加速器(支持php5.4)

Accelerator加速引擎是基於mmcache開發的PHP加速優化軟件。通過編譯和緩存來增加PHP腳本的性能,

使得PHP腳本在編譯的狀態下降低服務器負載,對服務器的開銷幾乎完全消除。它還對腳本起優化作用,能加快其執行效率,

提高PHP應用執行速度最高達10倍。

unzip eaccelerator-0.9.6.1.zip

cd eaccelerator-0.9.6.1

/usr/local/php/bin/phpize

./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config

make && make install



vi /usr/local/php/etc/php.ini

增加這些:


extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/

extension = "memcache.so"

extension = "imagick.so"

修改這些:


cgi.fix_pathinfo=0


disable_functions = exec,system,phpinfo,eval,passthru,chroot,scandir,chgrp,chown,shell_exec,

proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,fsocket,fsockopen,openlog,syslog,

readlink,symlink,popepassthru,stream_socket_server(有關禁用函數的說明,參看上一篇日誌:一些比較危險的php函數)



配置ngin支持php:

vim /usr/local/nginx/nginx.conf

location / {

root html;

index index.html index.htm index.php; //添加index.php

}

//啓用下面的配置

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

啓動php-fpm,重啓nginx

service php-fpm start

kill -TERM 主進程號 或 kill -QUIT 主進程號

/usr/nginx/sbin/nginx -t 判斷nginx的配置文件是否正確

nginx (nginx -c ...nginx.conf)

關於php的擴展模塊後續...






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章