基於FreeBSD 8.0搭建nginx+php+php-fpm+mysql高性能php平台

火星人 @ 2014-03-03 , reply:0


基於FreeBSD 8.0搭建nginx+php+php-fpm+mysql高性能php平台

基於FreeBSD 8.0搭建nginx+php+php-fpm+mysql高性能php平台


FreeBSD簡介:
FreeBSD是一種自由類Unix操作系統,是由經過BSD、386BSD和4.4BSD發展而來的類Unix的一個重要分支。FreeBSD擁有超過200名活躍開發者和上千名貢獻者。
FreeBSD被認為是自由操作系統中的不知名的巨人。它不是Unix,但如Unix一樣運行,具有兼容Unix的系統API。作為一個操作系統,FreeBSD被認為相當穩建可靠。
FreeBSD是以一個完善的操作系統的定位來做開發。其內核、驅動程序以及所有的用戶層(Userland)應用程序(比方說是Shell)均由同一源代碼版本控制系統保存(目前使用Subversion並與CVS兼容)。相較於另一知名的的操作系統Linux,其內核為一組開發人員設計,而用戶應用程序則交由他人開發(例如GNU計劃),最後再由其他團體集成並包裝成Linux包。
FreeBSD默認是無桌面環境的命令行界面,想要使用桌面環境必須自行安裝,或是使用PC-BSD之類的桌面發行版。


一. 安裝準備:
1.1、操作系統安裝:
參見http://bbs.linuxtone.org/thread-6422-1-1.html附件
補充:配置sshd讓root登陸
# vi /etc/rc.d/sshd複製代碼
修改下面選項為如下:PermitRootLogin yes
PasswordAuthentication yes
UseDNS no複製代碼
1.2、平台環境:
FreeBSD- 8.0-RELEASE_i386
nginx-0.8.38
php-5.2.13
php-5.2.13-fpm-0.5.14
mysql-5.1.46複製代碼
1.3、系統分區:/   40G
swap   4GB
/var   5GB
/tmp   5MB
/data  剩餘所有分區
註:具體分區請根據相關業務劃分複製代碼
1.4、系統約定:
軟體源代碼包存放位置             /usr/local/src
源碼包編譯安裝位置(prefix)     /usr/local/software_name
腳本以及維護程序存放位置       /usr/local/sbin
MySQL 資料庫位置                /data/mysql/data(可按情況設置)
網站根目錄                          /data/www/wwwroot(可按情況設置)
虛擬主機日誌根目錄               /data/logs(可按情況設置)
Nginx運行賬戶                     www:www
install_software_name.sh     //存放編譯參數腳本習慣將所有編譯腳本存放在install_software_name.sh便於升級和更新軟體複製代碼
1.5、定時校正伺服器時鐘,定時與中國國家授時中心授時伺服器同步#crontab ?e

15 3 * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1複製代碼
1.6、下載軟體包:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.02.tar.gz
wget http://nginx.org/download/nginx-0.8.37.tar.gz
wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.46.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz/download
wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download
wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.14.diff.gz
wget http://cn.php.net/get/php-5.2.13.tar.gz/from/this/mirror
wget http://pecl.php.net/get/memcache-2.2.5.tgz
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget http://pecl.php.net/get/imagick-2.2.2.tgz
wget http://docs.linuxtone.org/soft/bsder/ZendOptimizer-3.3.0a-freebsd6.0-i386.tar.gz複製代碼
1.7、利用ports安裝基本包
1.7.1安裝wget
# cd /usr/ports/ftp/wget
#make install clean複製代碼#在出現的對話框中去掉IPV6前面的選擇
#接下來對話框全部默認皆可
剛剛安裝完后,wget並未能使用,需要執行下面的命令後方可生效。#rehash複製代碼
1.7.2安裝其他基本的軟體包(出現對話框默認皆可)
1.7.2.1
#cd /usr/ports/textproc/libxml2
make install clean複製代碼1.7.2.2
#/usr/ports/ftp/curl
make install clean複製代碼1.7.2.3
#/usr/ports/graphics/jpeg
make install clean複製代碼1.7.2.4
#/usr/ports/graphics/png
make install clean複製代碼1.7.2.5
#/usr/ports/print/freetype2
make install clean複製代碼
1.7.2.6
#/usr/ports/net/openldap24-server
make install clean複製代碼
1.7.2.7
#/usr/ports/devel/autoconf262
make install clean複製代碼
二.編譯安裝
2.1、pcre安裝配置:
#tar zvxf pcre-8.02.tar.gz
#./configure && make && make install
2.2、nginx安裝配置:
#tar zvxf nginx-0.8.37.tar.gz
#vi init_nginx.sh複製代碼./configure \"--user=www" \
     "--group=www" \
     "--prefix=/usr/local/nginx/" \
     "--with-http_stub_status_module" \
     "--with-http_ssl_module" \
     "--with-md5=/usr/lib" \
     "--with-sha1=/usr/lib"
make
make install複製代碼
2.3、mysql安裝配置:
#tar zvxf mysql-5.1.46.tar.gz
#vi init_mysql.sh複製代碼./configure \
     "--prefix=/usr/local/mysql" \
     "--localstatedir=/data/mysql/data" \
     "--with-comment=Source" \
     "--with-server-suffix=-Linuxtone.Org" \
     "--enable-assembler" \
     "--with-charset=utf8" \
     "--with-collation=utf8_chinese_ci" \
     "--with-collation=utf8_chinese_ci" \
     "--with-extra-charsets=complex" \
     "--enable-thread-safe-client" \
     "--with-big-tables" \
     "--with-readline" \
     "--with-ssl" \
     "--with-embedded-server" \
     "--enable-local-infile" \
     "--with-plugins=innobase"
make
make install
pw useradd mysql -d /data/mysql -s /sbin/nologin
/usr/local/mysql/bin/mysql_install_db --user=mysql
cd /usr/local/mysql
chown -R root:mysql .
mkdir -p /data/mysql/data
chown -R mysql /data/mysql/data
rm -f /etc/my.cnf
cp share/mysql/my-huge.cnf /etc/my.cnf.bak
cd /etc
wget http://www.caifw.com/api/my.cnf
sed -i '50 s/^/#/' /etc/my.cnf
cd /usr/local/mysql
cp share/mysql/mysql.server /etc/rc.d/mysqld
chmod 755 /etc/rc.d/mysqld
/etc/rc.d/mysqld start

ln -s /usr/local/mysql/bin/* /usr/bin/複製代碼
2.4、安裝php相關的lib及擴展模塊
2.4.1 libiconv-1.13
#tar zxvf libiconv-1.13.tar.gz
#cd libiconv-1.13
#./configure --prefix=/usr && make && make install複製代碼2.4.2 libmcrypt-2.5.8
#tar zxvf libmcrypt-2.5.8.tar.gz
#cd libmcrypt-2.5.8/
#./configure --prefix=/usr && make && make install
#ldconfig
#cd libltdl/
#./configure --enable-ltdl-install
#make && make install複製代碼
2.4.3 mhash-0.9.9.9
#tar zxvf mhash-0.9.9.9.tar.gz
#cd mhash-0.9.9.9
#./configure --prefix=/usr && make && make install
#ldconfig複製代碼2.4.4 mcrypt-2.6.8
#tar zxvf mcrypt-2.6.8.tar.gz
#cd mcrypt-2.6.8
#cd src
#vi rfc2440.c複製代碼FreeBSD與Linux的不同點,造成需要對 mcrypt 的源碼進行一下小小的修改,才能在FreeBSD下編譯通過。將其中的
#include <malloc.h>複製代碼修改為
#include <stdlib.h>複製代碼
編譯:
#./configure --prefix=/usr && make&& make install複製代碼
2.5 安裝php與php-fpm#tar zvxf php-5.2.13.tar.gz
#gzip -cd php-5.2.13-fpm-0.5.14.diff.gz | patch -d php-5.2.13 -p1
#vi init_php.sh複製代碼./configure  \ "--prefix=/usr/local/php-fcgi" \
     "--enable-fastcgi" \
     "--enable-fpm" \
     "--enable-discard-path" \
     "--enable-force-cgi-redirect" \
     "--with-config-file-path=/usr/local/php-fcgi/etc" \
     "--with-mysql=/usr/local/mysql" \
     "--with-mysqli=/usr/local/mysql/bin/mysql_config" \
     "--with-iconv-dir" \
     "--with-freetype-dir" \
     "--with-jpeg-dir" \
     "--with-png-dir" \
     "--with-gd" \
     "--with-zlib" \
     "--with-libxml-dir" \
     "--with-curl" \
     "--with-curlwrappers" \
     "--with-openssl" \
     "--with-mhash" \
     "--with-xmlrpc" \
     "--with-mcrypt" \
     "--with-ldap" \
     "--with-ldap-sasl" \
     "--enable-xml" \
     "--disable-rpath" \
     "--enable-discard-path" \
     "--enable-safe-mode" \
     "--enable-bcmath" \
     "--enable-shmop" \
     "--enable-sysvsem" \
     "--enable-inline-optimization" \
     "--enable-mbregex" \
     "--enable-mbstring" \
     "--enable-gd-native-ttf" \
     "--enable-ftp" \
     "--enable-pcntl" \
     "--enable-sockets" \
     "--enable-zip" \
     "--disable-debug" \
     "--disable-ipv6"
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-dist /usr/local/php-fcgi/etc/php.ini複製代碼2.6 安裝PHP擴展模塊
2.6.1 memcache-2.2.5
#tar zvxf memcache-2.2.5.tgz
#cd memcache-2.2.5
#/usr/local/php-fcgi/bin/phpize
#./configure --with-php-config=/usr/local/php-fcgi/bin/php-config
#make && make install複製代碼
2.6.2 eaccelerator-0.9.6
#tar jvxf eaccelerator-0.9.6.tar.bz2
#cd eaccelerator-0.9.6
#/usr/local/php-fcgi/bin/phpize
#./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php-fcgi/bin/php-config
#make && make install複製代碼
2.6.3 PDO_MYSQL-1.0.2
#tar zxvf PDO_MYSQL-1.0.2.tgz
#cd PDO_MYSQL-1.0.2
#/usr/local/php-fcgi/bin/phpize
#./configure --with-php-config=/usr/local/php-fcgi/bin/php-config --with-pdo-mysql=/usr/local/mysql
#make && make install複製代碼
2.6.4 ImageMagick
#tar zxvf ImageMagick.tar.gz
#cd ImageMagick-6.5.1-2/   
#./configure --enable-shared --with-modules --without-x --with-gs-font-dir=default --with-perl=yes --with-xml=yes --with-zlib=yes --with-jpeg=yes
#make && make install複製代碼
2.6.5 imagick-2.2.2
#tar zxvf imagick-2.2.2.tgz
#cd imagick-2.2.2/
#/usr/local/php-fcgi/bin/phpize
#./configure --with-php-config=/usr/local/php-fcgi/bin/php-config
#make
#make install複製代碼
2.7 配置php.ini

# sh init_php.ini
複製代碼#!/bin/bash
fcgi_cf="/usr/local/php-fcgi/etc/php.ini"
ea(){
cat << EOF

zend_extension="/usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/data/cache/ea"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
EOF
}
#mkdir
mkdir -p /data/cache/ea
ea >> $fcgi_cf複製代碼
再修改如下項:
;open_basedir =

disable_functions =

expose_php = On

expose_php = Off

display_errors = On

extension_dir =

output_buffering = Off複製代碼
修改為:
open_basedir = /data/www/wwwroot:/tmp

disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

display_errors = Off

extension_dir = "/usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
extension = "ffmpeg.so"

output_buffering = On複製代碼
2.8 安裝Zend
#tar zvxf ZendOptimizer-3.3.0a-freebsd6.0-i386.tar.gz
# cd ZendOptimizer-3.3.0a-freebsd6.0-i386
# ./install
註:php.ini的位置為/usr/local/php-fcgi/etc 伺服器不選用apache
三、配置整合nginx與php
參見netseek的LEMP構建高性能WEB伺服器(第三版)提供完整的配置腳本下載:http://www.linuxtone.org/lemp/scripts.tar.gz  
基於netseek的附件需要修改nginx.conf的內容如下:nginx.conf

user  www www;

worker_processes 10;

pid /var/log/nginx.pid;
# [ debug | info | notice | warn | error | crit ]
error_log  /dev/null;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
        use kqueue; #FreeSBD下要啟用kqueue,Linux下是epoll   

        #maxclient = worker_processes * worker_connections / cpu_number
        worker_connections 51200;
}

http
{
        include       /usr/local/nginx/conf/mime.types;
        default_type  application/octet-stream;
        charset  gb2312;
        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;

        log_format  main  '$remote_addr - $remote_user [$time_local] $request '
                          '"$status" $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log  /data/www/logs/access.log  main;
         access_log  /dev/null;

        sendfile on;
        tcp_nopush     on;
        
        keepalive_timeout 60;
        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 128k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 128k;
        fastcgi_intercept_errors on;
        client_max_body_size       50m;
        client_body_buffer_size    256k;
        
        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;
        #
        proxy_temp_path            /dev/proxy_temp;
        fastcgi_temp_path          /dev/fastcgi_temp;
        client_body_temp_path      /dev/client_body_temp;
        #client_body_temp_path  /usr/local/nginx/client_body_temp 1 2;
        #proxy_temp_path        /usr/local/nginx/proxy_temp 1 2;
        #fastcgi_temp_path      /usr/local/nginx/fastcgi_temp 1 2;
        
        #upstream
        # upstream  bbs.linuxtone.org  {
        #  ip_hash;
        #  server   127.0.0.1:8080;
        #  server   61.164.122.252:8080;
        #  server   220.189.245.68;
        #}

        # The following includes are specified for virtual hosts
         #www.linuxtone.org
         include          /usr/local/nginx/conf/vhosts/www.linuxtone.org.conf;
         #for example just for study! have fun!
         #include          /usr/local/nginx/conf/conf_example/*.conf ;
}複製代碼


四、加入開機啟動:
打開/etc/rc.local,如果不存在的話,就新建一個,輸入以下內容:
ulimit -SHn 51200
/etc/rc.d/mysqld start
/usr/local/php-fcgi/sbin/php-fpm start
/usr/local/nginx/sbnin/nginx複製代碼
《解決方案》

好東西,謝謝分享
《解決方案》

這個不錯,需要的時候非常值得參考!
《解決方案》

支持!
使用PORTS安裝,輕鬆愉快。
《解決方案》

http://blog.haohtml.com/archives/1133

自己也整理了一篇,一直在用.
《解決方案》

硬體支持是個大問題啊
《解決方案》

運維群:168572651
歡迎各位新手加入,一起學習集群一起學習運維
《解決方案》

受用了,謝謝



[火星人 via ] 基於FreeBSD 8.0搭建nginx+php+php-fpm+mysql高性能php平台已經有178次圍觀

http://www.coctec.com/docs/service/show-post-1929.html