centos編譯安裝php5.6.20+nginx1.8.1+mysql5.6.17

LNMP 表明的就是:Linux系統下Nginx+MySQL+PHP這樣的站點服務器架構。javascript

本次實踐需求:

實踐centos6.5編譯安裝 LNMP生產環境 架構 web生產環境 使用 xcache 優化phpphp

  • 做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持不少其它的併發鏈接。體現更高的效率。 做爲負載均衡服務器:Nginx既可以在內部直接支持Rails和PHP,也可以支持做爲 HTTP代理服務器對外進行服務。Nginx用C編寫,不管是系統資源開銷仍是CPU使用效率都比Perlbal要好的多。做爲郵件代理服務器:Nginx同一時候也是一個很優秀的郵件代理服務器(最先開發這個產品的目的之中的一個也是做爲郵件代理服務器)。

    Nginx安裝很的簡單,配置文件很簡潔(還可以支持perl語法)。Nginx支持平滑加載新的配置,還可以在不間斷服務的狀況下進行軟件版本號的升級。LNMP 這樣的架構所以也就很流行,尤爲VPS和雲主機的出現,更加推進了,LNMP 的架構發展融合。從php5.4開始就已經原生的支持了php-fpm的方式。PHP-FPM是一個PHP FastCGI管理器,再也不是第三方的包了, PHP-FPM 提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具備不少其它長處。css

準備工做:

最小化安裝centos6.5
創建一個軟件包文件夾存放html

mkdir -p /usr/local/src/

清理已經安裝包java

rpm -e httpd
rpm -e mysql
rpm -e php
yum -y remove httpd
yum -y remove mysql
yum -y remove php

搜索apache包node

rpm -qa http*

強制卸載apache包mysql

rpm -e --nodeps 查詢出來的文件名稱

檢查是否卸載乾淨linux

rpm -qa|grep http*

selinux可能會導致編譯安裝失敗,咱們先禁用它。永久禁用,需要從新啓動生效nginx

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

暫時禁用,不需要從新啓動 setenforce 0web

2.安裝必備工具

yum -y install make gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap lsof

3.安裝mysql5.6.17

依照標準需要給mysql建立所屬用戶和用戶組
建立羣組

groupadd mysql

建立一個用戶。不一樣意登錄和不創主文件夾

useradd -s /sbin/nologin -g mysql -M mysql

檢查建立用戶

tail -1 /etc/passwd

centos最小化安裝後,會有mysql的庫所以先卸載!
檢查安裝與否

rpm -qa|grep mysql 

強制卸載

rpm -e mysql-libs-5.1.73-3.el6_5.x86_64 --nodeps

MySQL從5.5版本號開始。經過./configure進行編譯配置方式已經被取消。取而代之的是cmake工具。 所以。咱們首先要在系統中源代碼編譯安裝cmake工具。

wget https://cmake.org/files/v3.5/cmake-3.5.1.tar.gz
tar zxvf cmake-3.5.1.tar.gz
cd cmake-3.5.1
./configure 
make && make install

使用cmake來編譯安裝mysql5.6.17

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.17.tar.gz
tar zxvf mysql-5.6.17.tar.gz
cd mysql-5.6.17
cmake \
-DCMAKE_INSTALL_PREFIX=/Data/apps/mysql \ -DMYSQL_DATADIR=/Data/apps/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_USER=mysql \ -DWITH_DEBUG=0 \ -DWITH_SSL=system make && make install

改動/usr/local/mysql權限

chmod +w /Data/apps/mysql
chown -R mysql:mysql /Data/apps/mysql

關於my.cnf配置文件:
在啓動MySQL服務時。會依照必定次序搜索my.cnf。先在/etc文件夾下找。找不到則會搜索」$basedir/my.cnf」 就是安裝文件夾下 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認位置! 注意:在CentOS 6.x版操做系統的最小安裝完畢後。在/etc文件夾下會存在一個my.cnf。需要將此文件改名爲其它的名字。 如:/etc/my.cnf.bak,不然,該文件會干擾源代碼安裝的MySQL的正確配置,形成沒法啓動。

由於咱們已經卸載了最小安裝完畢後的mysq庫因此。就不是必需操做了。
進入support-filecd support-files/有my.cnf請備份

mv /etc/my.cnf /etc/my.cnf.bak

假設願意也可以複製配置文件到etc下
cp my-default.cnf /etc/my.cnf

運行初始化配置腳本,建立系統自帶的數據庫和表。注意配置文件的路徑

/Data/apps/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/Data/apps/mysql --datadir=/Data/apps/mysql/data --user=mysql

拷貝mysql安裝文件夾下support-files服務腳本到init.d文件夾
拷貝腳本

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

賦予權限

chmod +x /etc/init.d/mysqld

設置開機啓動

chkconfig mysqld on

啓動MySQL

service mysqld start

或者

/etc/init.d/mysql start

MySQL5.6.x啓動成功後。root默認沒有password,咱們需要設置rootpassword。

設置以前,咱們需要先設置PATH。要不,不能直接調用mysql
改動/etc/profile文件

vi /etc/profile

在文件末尾加入

PATH=/Data/apps/mysql/bin:$PATH
export PATH

讓配置立刻生效

source /etc/profile

登錄測試,默認是沒有password,直接回車就可進入

mysql -uroot -p

設置mysqlpassword

/Data/apps/mysql/bin/mysqladmin -uroot -p password '你的password'

登錄進命令行模式

mysql -uroot -p

查看用戶

select user,host from mysql.user;

刪除沒必要要的用戶

drop user ""@localhost;
drop user ""@c65mini.localdomain; 
drop user root@c65mini.localdomain; 
drop user root@'::1';

賦予帳號遠程訪問的權限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'your pass' WITH GRANT OPTION; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'c65mini.localdomain' IDENTIFIED BY 'your pass' WITH GRANT OPTION;

關於刪除MySQL的默認root用戶參考:http://blog.chinaunix.net/uid-16844903-id-3377690.html
其它一些信息查詢: 檢查mysql版本號

mysql -uroot -p"password" -e "select version();"

驗證mysql安裝路徑

ls -ld /Data/apps/mysql/

安裝PHP5.6.10

安裝依賴關係
libiconv庫爲需要作轉換的應用提供了一個iconv()的函數,以實現一個字符編碼到還有一個字符編碼的轉換。 錯誤提示:configure: error: Please reinstall the iconv library.

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make install
cd ..

libmcrypt是加密算法擴展庫。 錯誤提示:configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install
cd ..

Mhash是基於離散數學原理的不可逆向的php加密方式擴展庫。其在默認狀況下不開啓。 mhash的可以用於建立校驗數值。消息摘要,消息認證碼。以及無需原文的關鍵信息保存 錯誤提示:configure: error: 「You need at least libmhash 0.8.15 to compile this program. http://mhash.sf.net/

wget http://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz?r=&ts=1459532667&use_mirror=nbtelecom
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make && make install
cd ..

mcrypt 是 php 裏面重要的加密支持擴展庫,Mcrypt擴展庫可以實現加密解密功能,就是既能將明文加密,也可以密文還原。

wget http://iweb.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
./configure
make && make install
cd ..

編譯mcrypt可能會報錯:configure: error: * libmcrypt was not found

vi  /etc/ld.so.conf

最後一行加入

/usr/local/lib/

加載

ldconfig

編譯mcrypt可能會報錯:/bin/rm: cannot remove libtoolT': No such file or directory
改動 configure 文件,把 ```RM='$RM' 改成RM='$RM -f'``` 這裏的
$RM`後面必定有一個空格。 假設後面沒有空格,直接鏈接減號,就依舊會報錯。
正式開始編譯php。

wget http://mirrors.sohu.com/php/php-5.6.20.tar.gz
tar zxvf php-5.6.20.tar.gz
cd php-5.6.20
./configure --prefix=/Data/apps/php --with-config-file-path=/Data/apps/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
make && make install

改動fpm配置php-fpm.conf.default文件名稱稱

mv /Data/apps/php/etc/php-fpm.conf.default /Data/apps/php/etc/php-fpm.conf

複製php.ini配置文件

cp php.ini-production /Data/apps/php/etc/php.ini

複製php-fpm啓動腳本到init.d

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

賦予運行權限

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

加入爲啓動項

chkconfig --add php-fpm

設置開機啓動

chkconfig php-fpm on

依照標準,給php-fpm建立一個指定的用戶和組
建立羣組

groupadd www

建立一個用戶,不一樣意登錄和不創主文件夾

useradd -s /sbin/nologin -g www -M www

立刻啓動php-fpm

service php-fpm start

或者

/etc/init.d/php-fpm start

回到/usr/local/src/文件夾

安裝nginx1.8.1

nginx所需的依賴關係,通常咱們都需要先裝pcre, zlib,前者爲了重寫rewrite。後者爲了gzip壓縮。假設系統已經yum 安裝了這些庫也不要緊,無需卸載。直接編譯安裝最新的就可以了。

爲了一次性完畢編譯。先準備編譯如下的依賴關係。
1.安裝PCRE庫

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz 
tar -zxvf pcre-8.38.tar.gz
cd pcre-8.38
./configure
make && make install

2.安裝zlib庫

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

準備工做完畢,現在開始安裝nginx!,這裏加入了前面準備的庫關係,注意路徑!

wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure \
--user=www \ --group=www \ --prefix=/Data/apps/nginx \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre=/usr/local/src/pcre-8.38 \ --with-zlib=/usr/local/src/zlib-1.2.8 \ make && make install
cd ..

使用xcache優化php性能。

wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
tar zxvf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/Data/apps/php/bin/phpize
./configure --enable-xcache --with-php-config=/Data/apps/php/bin/php-config
make && make install
cat >>/Data/apps/php/etc/php.ini<<EOF
[xcache-common]
;注意路徑
extension = xcache.so

[xcache.admin]
xcache.admin.enable_auth = on
xcache.admin.user = "admin"
xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e"
;運行: echo -n "password" |md5sum |awk '{print $1}' 計算出MD5加密過的password
;替換xcache.admin.pass=的值

[xcache]
xcache.shm_scheme = "mmap"
xcache.size = 64M
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 3600
xcache.gc_interval = 60
xcache.var_size = 16M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 3600
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.readonly_protection = Off
xcache.mmap_path = "/dev/zero"
xcache.coredump_directory = "/tmp/phpcore"
xcache.coredump_type = 0
xcache.disable_on_crash = Off
xcache.experimental = Off
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off

[xcache.coverager]
xcache.coverager = Off
xcache.coverager_autostart =  On
xcache.coveragedump_directory = "/tmp/pcov"
EOF

nginx 從新啓動。啓動。加載腳本

vi /etc/init.d/nginx
#! /bin/sh
# chkconfig: 2345 55 25
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f nginx defaults ', or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add nginx '
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/Data/apps/nginx/sbin/$NAME
CONFIGFILE=/Data/apps/nginx/conf/$NAME.conf
PIDFILE=/Data/apps/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
kill -INT `cat $PIDFILE` || echo -n "nginx not running"
}
do_reload() {
kill -HUP `cat $PIDFILE` || echo -n "nginx can 't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0

注意需要賦予運行的權限:chmod +x /etc/init.d/nginx
通過優化的nginx.cnf配置文件

user www;
worker_processes  4;
error_log  logs/error.log  info;

pid        logs/nginx.pid;

worker_rlimit_nofile 5120;

events {
    use epoll;
    worker_connections  5120;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 50m;
    client_body_buffer_size 256k;
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;

    sendfile on;
    tcp_nopush     on;
    keepalive_timeout 120;
    server_tokens off;
    tcp_nodelay on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;

    proxy_ignore_client_abort on;


    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    log_format access ' $http_x_forwarded_for- $remote_user [$time_local] '
                                              ' "$request"   $status $body_bytes_sent '
                                              ' "$http_referer" "$http_user_agent" ';

    include vhost/*.conf;



}

php-fpm優化,注意一個fpm進程大約20M。我這個機器是小內存的雲主機,所以開啓2個就可以。大內存的話,依據狀況換算。

vi php-fpm.conf
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
相關文章
相關標籤/搜索