系统环境
最小化安装64位Centos7.1(已安装开发工具包)
部分安装包下载地址
wget http://ncu.dl.sourceforge.net/project/re2c/re2c/0.14.2/re2c-0.14.2.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz/from/http://cdn.mysql.com/
源码包存放目录
/usr/local/src
安装NGIX及PHP相关依赖包
yum install cmake
yum install zlib-devel pcre-devel openssl-devel ncurses-devel flex-devel bison-devel libxml2-devel libpng-devel freetype-devel libcurl-devel gd-devel
yum install glibc-devel glib2-devel bzip2-devel gdbm-devel dbus-devel gmp-devel readline-devel libxslt-devel xmlrpc-c xmlrpc-c-devel libvpx-devel libtool-libs libtool-ltdl-devel
添加NGINX及MYSQL用户
groupadd vmail -g 1001
useradd vmail -u 1001 -g 1001 -M -s /bin/false
groupadd mysql -g 1100
useradd mysql -u 1100 -g 1001 -M -s /sbin/nologin
安装内存管理优化工具
tar zxvf libunwind-1.1.tar.gz
cd libunwind-1.1
./configure
make
make install
tar zxvf gperftools-2.1.tar.gz
cd gperftools-2.1
./configure --enable-frame-pointers
make
make install
echo "/usr/local/lib" >>/etc/ld.so.conf
ldconfig -v
安装NGINX
mkdir /var/tmp/nginx
chown vmail:vmail /var/tmp/nginx/
tar zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3
./configure --prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/var/lock/subsys/nginx.lock \
--user=vmail --group=vmail \
--with-http_ssl_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-debug \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-google_perftools_module
make &&make install
配置NGINX支持内存管理优化
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc/
vi /usr/local/nginx/conf/nginx.conf
google_perftools_profiles /tmp/tcmalloc;
user vmail;
创建NGINX启动脚本
vi /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-
reload|configtest}"
exit 2
esac
chmod +x /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
chown vmail:vmail -R /usr/local/nginx/logs/
service nginx start
防火墙开启80端口
vi /etc/firewalld/zones/public.xml
在<zone>下添加如下行:
<service name="http"/>
firewall-cmd --reload
安装MYSQL
安装前先设置好主机名
vi /etc/hostname
主机名
mkdir -p /data/mysql
chown mysql:mysql -R /data/
chmod 750 -R /data/
tar zxvf mysql-5.6.24.tar.gz
cd mysql-5.6.24
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=gbk \
-DDEFAULT_COLLATION=gbk_chinese_ci \
-DEXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_TCP_PORT=3306
make && make install
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
rm -f /etc/my.cnf
chkconfig --add mysqld
chkconfig mysqld on
cd /data/mysql
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout -out mykey.pub
chmod 400 mykey.pem
chmod 444 mykey.pub
chown mysql:mysql mykey.*
vi /use/local/mysql/my.cnf
[mysqld]
federated //解决MySQL Plugin 'FEDERATED' is disabled 错误
innodb_buffer_pool_size = 128M
log_bin = /data/mysql/log/bin.log
expire_logs_days = 30
sync_binlog = 1
log-error=/data/mysql/log/error.log
general_log=1
general_log_file=/data/mysql/log/mysql.log
slow_query_log=1
slow_query_log_file=/data/mysql/log/slowquery.log
log-output=FILE
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
explicit_defaults_for_timestamp=true //解决TIMESTAMP with implicit DEFAULT value is deprecated.错误
sha256_password_private_key_path=mykey.pem //解决RSA private key file not found: /data/mysql//private_key.pem. Some authentication plugins will not work.
sha256_password_public_key_path=mykey.pub
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
service mysqld start
/usr/local/mysql/bin/mysqladmin -u root password 123456
/usr/local/mysql/bin/mysql -u root -p
mysql> grant all privileges on *.* to root@'%' identified by '123456' with grant option;
echo "/usr/local/mysql/lib" >>/etc/ld.so.conf
echo "/usr/local/mysql/lib/plugin" >>/etc/ld.so.conf
ldconfig -v
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
如果报[Warning] InnoDB: Cannot open table mysql/slave_master_info from the internal data dictionary of InnoDB though the .frm file for the table exists.错误按以下方法解决
登录数据库,进入mysql库,执行如下SQL删除5张表,记住,一定要是drop table if exists
/usr/local/mysql/bin/mysql -u root -p
mysql>use mysql;
mysql>drop table if exists innodb_index_stats;
mysql>drop table if exists innodb_table_stats;
mysql>drop table if exists slave_master_info;
mysql>drop table if exists slave_relay_log_info;
mysql>drop table if exists slave_worker_info;
执行前用show tables查看一下表的数据,执行完后看是否已经比删除之前减少了,如果减少了,说明成功了
退出并停止数据库,进入到数据库数据文件所在目录,删除5个表所对应的idb文件
rm -f /data/mysql/mysql/innodb_index_stats.ibd innodb_table_stats.ibd slave_master_info.ibd slave_relay_log_info.ibd slave_worker_info.ibd
启动数据库,进入到mysql库,重建上面被删除的表结构
/usr/local/mysql/bin/mysql -u root -p
mysql>use mysql;
source /usr/local/mysql/share/mysql_system_tables.sql
查看表,如果5个表已成功创建,说明成功了
安装PHP
tar zxvf re2c-0.14.2.tar.gz
cd re2c-0.14.2
./configure
make && make install
tar -zxvf php-5.6.7.tar.gz
cd php-5.6.7
./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--with-mysql-sock --with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-fpm --with-mhash \
--enable-soap --with-libxml-dir \
--with-openssl --with-vpx-dir \
--with-pcre-regex --with-sqlite3 \
--with-zlib --enable-bcmath \
--with-iconv --with-bz2 \
--enable-calendar --with-curl \
--with-cdb --enable-dom \
--enable-exif --enable-fileinfo \
--enable-filter --with-pcre-dir \
--enable-ftp --with-gd \
--with-openssl-dir --with-jpeg-dir \
--with-png-dir --with-zlib-dir \
--with-freetype-dir --enable-gd-native-ttf \
--enable-gd-jis-conv --with-gettext \
--with-gmp --with-mhash --enable-json \
--enable-mbstring --disable-mbregex \
--disable-mbregex-backtrack --with-libmbfl \
--with-onig --enable-pdo --with-pdo-mysql \
--with-zlib-dir --with-pdo-sqlite \
--with-readline --enable-session \
--enable-shmop --enable-simplexml \
--enable-sockets --with-xpm-dir \
--enable-sysvmsg --enable-sysvsem \
--enable-sysvshm --enable-wddx \
--with-libxml-dir --with-xsl --enable-zip \
--enable-mysqlnd-compression-support \
--enable-maintainer-zts
make && make install
cp /usr/local/src/php-5.6.7/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
vi /etc/init.d/php-fpm
user vmail
group vmail
内存小于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
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
service php-fpm start
cp /usr/local/src/php-5.6.7/php.ini-development /usr/local/php/lib/php.ini
vi php.ini
expose_php = Off
display_errors = Off
date.timezone =PRC
log_errors = On
error_log = /usr/local/nginx/logs/php_error.log
disable_functions =
passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用
vi /usr/local/nginx/conf/nginx.conf
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
service nginx restart
在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化缓存指令
vi /usr/local/nginx/conf/nginx.conf
添加到http层级:
--------------------------
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
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 128k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;