因业务需求需要安装nginx-1.8.0+php-5.6.15+mysql-5.6.27服务web服务,将文档整理下,分享出来。
php支持 (OpenSSL PDO Mbstring Tokenizer Opcache Mcrypt)
为了下面的安装顺利建议先使用yum安装依赖库,前期准备
yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison libtool-ltdl-devel libmcrypt mhash mcrypt libmcrypt-devel pcre-devel openssl-devel freetype-devel libcurl-devel
ERROR:
No package libmcrypt available.
No package mhash available.
No package mcrypt available.
No package libmcrypt-devel available.
解决方法:
yum install epel-release //扩展包更新包
yum update //更新yum源 (更新内容太多,选择N)
yum install libmcrypt-devel libmcrypt mhash mcrypt // ok了
yum,遇到一个问题:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
修改文件“/etc/yum.repos.d/epel.repo”,
将baseurl的注释取消,mirrorlist注释掉。即可。
yum clean all
yum makecache
卸载apache服务
#rpm -qa|grep http*
vi /etc/profile
ulimit -SHn 65535
source /etc/profile
1、安装nginx
cd /usr/local
wget
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
{未操作
vi auto/cc/gcc
#将这句注释掉 取消Debug编译模式 大概在174行
#CFLAGS="$CFLAGS -g"
}
添加nginx用户
groupadd www
useradd -g www www
#我们再配置下nginx编译参数
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
make && make install
nginx部分配置
vi /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm index.php;
}
#fastcgi整合nginx,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;
}
/usr/local/nginx/sbin/nginx -t
/etc/init.d/nginx start
/usr/local/nginx/sbin/nginx -s reload
同样的修改了nginx的配置文件nginx.conf,也可以使用上面的命令重新加载新的配置文件并运行,可以将此命令加入到rc.local文件中,这样开机的时候nginx就默认启动了
vi /etc/rc.local
加入一行 /etc/init.d/nginx start 保存并退出,下次重启会生效。
#添加开机自启动
vi /etc/rc.local
#在这个文件里面添加如下
/usr/local/nginx/sbin/nginx
或者用个高大上的
开机自启动nginx
这里使用的是编写shell脚本的方式来处理
vi /etc/init.d/nginx (输入下面的代码)
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
:wq 保存并退出
设置文件的访问权限
chmod a+x /etc/init.d/nginx
(a+x ==> all user can execute 所有用户可执行)
/etc/init.d/nginx status
/etc/init.d/nginx start
/etc/init.d/nginx restart
/etc/init.d/nginx stop
同一台服务器第二个nginx安装
./configure --prefix=/usr/local/nginxtest --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
nginx部分配置
vi /usr/local/nginxtest/conf/nginx.conf
server {
listen 82;
server_name localhost;
vi /etc/init.d/nginxtest中
nginx相关的需要改成nginxtest 脚本中关闭restart,不然会同时关闭nginx和nginxtest,大牛可以改脚本解决这个问题
2、安装PHP
由于PHP需要这些类库的支撑
#先下载PHP
cd /usr/local/
wget
tar -zxvf php-5.6.15.tar.gz
cd php-5.6.15
#我们先配置下PHP的编译参数
./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/php.ini --with-iconv-dir --with-openssl --enable-xml --with-curl --with-zlib --with-pcre-dir --with-mcrypt --with-mhash --with-mysql --with-pdo-mysql --with-libxml-dir --enable-static --enable-mbstring --enable-shmop --enable-wddx --enable-sockets --enable-opcache --enable-fpm --with-gd --with-xmlrpc --enable-zip --enable-soap --with-libdir=/usr/lib64 --with-jpeg-dir=/usr/lib64 --with-freetype-dir=/usr/lib64 --with-png-dir=/usr/lib64
注:Nginx+PHP整合,在安装时必须启用-–enable-fastcgi 和 --enable-fpm ,这两个选项是做什么的上面已经描述。执行完后系统会提示-–enable-fastcgi是一个未知选项,我们不必理会。
新版本php 已经支持fastcgi,不需要加参数,老版本需要加参数。
Fastcgi is automagically enabled in php-cgi in PHP 5.3
make
make install
如果出现报错加上参数
{
#注:make的时候一定要加上后面的参数,才能成功。
# make ZEND_EXTRA_LIBS='-liconv'
# make install
# cp php.ini-dist /usr/local/php/etc/php.ini
# cd ../
}
#复制php.ini
cp php.ini-development /usr/local/php/etc/php.ini
PHP5.6配置Zend OPCache方法:
打开vi /usr/local/php/etc/php.ini,找到:[opcache],按下面PHP官方推荐的参数修改,并去掉前面的";"。
增加zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
修改完后通过phpinfo查看是否配置成功,如果成功启用会显示opcache的相关参数。
继续修改
date.timezone = PRC
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
测试配置
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t
启动
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
低调的开机启动
echo "/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf" >> /etc/rc.local
或者
vim /etc/rc.local
# ADD
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
#关闭php-fpm
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
#重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
#使用PHP-FPM管理脚本,在编译包里面已经配置好了,只需要复制到/etc/init.d/中即可
cd /usr/local/php-5.6.15/sapi/fpm/
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
如果你使用的是高大上脚本启动方式了 /etc/init.d/php-fpm
需要修改文件vi /etc/init.d/php-fpm
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
修改为
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_ini=${prefix}/etc/php.ini
#php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
php_opts="-c $php_ini -y $php_fpm_CONF"
这个调整主要是因为opcache修改以上内容后,php-fpm没有读取php.ini中的内容,
所以需要在脚本中修改下配置让php-fpm启动时读取php.ini文件
vim /usr/local/php/etc/php-fpm.conf重要参数详解(我设置了前三个参数)
pid = run/php-fpm.pid
#pid设置,默认在安装目录中的var/run/php-fpm.pid,必须开启,不然/etc/init.d/php-fpm不好用了
error_log = log/php-fpm.log
#错误日志,默认在安装目录中的var/log/php-fpm.log
log_level = notice
#错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
------------------------
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。
process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.
daemonize = yes
#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。
listen = 127.0.0.1:9000
#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置.
listen.backlog = -1
#backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:
listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket设置选项,如果使用tcp方式访问,这里注释即可。
user = www
group = www
#启动进程的帐户和组
pm = dynamic #对于专用服务器,pm可以设置为static。
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:
pm.max_children #,子进程最大数
pm.start_servers #,启动时的进程数
pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
pm.status_path = /status
#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
ping.path = /ping
#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。
ping.response = pong
#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
request_terminate_timeout = 0
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。
request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
slowlog = log/$pool.log.slow
#慢请求的记录日志,配合request_slowlog_timeout使用
rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.
chroot =
#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
chdir =
#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)
catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
-------------------------------------------
#启动php-fpm
service php-fpm start
#重启php-fpm
service php-fpm restart
#加入开机启动策略
chkconfig --add php-fpm
chkconfig php-fpm on
/etc/init.d/php-fpm reload
3、安装MySQL
必要软件包
yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make bison ncurses ncurses-* cmake
安装cmake
# tar -zxf cmake-2.8.12.tar.gz # 安装cmake
# cd cmake-2.8.12
# ./configure
# gmake
# gmake install
# which cmake # 配置cmake环境变量
# echo 'export PATH=/usr/local/bin:$PATH' >> /etc/profile
# source /etc/profile
此处cmake,也可以通过“yum install cmake -y”安装,但是这种方式安装的“cmake”,在编译mysql时会有警告:
CMake Warning (dev) in sql/CMakeLists.txt:
Policy CMP0022 is not set: INTERFACE_LINK_LIBRARIES defines the link
interface. Run "cmake --help-policy CMP0022" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
Target "mysqld" has an INTERFACE_LINK_LIBRARIES property which differs from
its LINK_INTERFACE_LIBRARIES properties.
INTERFACE_LINK_LIBRARIES:
-lpthread;sql;mysys
LINK_INTERFACE_LIBRARIES:
rt
This warning is for project developers. Use -Wno-dev to suppress it.
-- Generating done
#下载MySQL
cd /usr/local
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.27.tar.gz/from/http://cdn.mysql.com/
tar -zxvf mysql-5.6.27.tar.gz
cd mysql-5.6.27
#我们先配置下MySQL的编译参数 一般我们就配置下安装路径就可以了 如你有特殊配置也可以在安装之后修改参数也可以的
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
或
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci
#添加mysql用户
groupadd mysql
useradd -g mysql mysql
创建安装目录
mkdir -p /usr/local/mysql # 安装目录
mkdir /usr/local/mysql/data # 数据存储目录
#这里你大可以泡杯茶 编译需要较长的时间
make
make install
#复制mysql管理脚本
cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
#复制mysql配置文件
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
chown mysql:mysql /etc/my.cnf
#添加mysql服务
chkconfig --add mysqld
#加入开机启动策略
chkconfig mysqld on
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
修改目录权限
chown -R mysql.mysql /usr/local/mysql
#安装数据库
su - mysql
cd /usr/local/mysql/scripts
初始化mysql
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
启动数据库
/usr/local/mysql/bin/mysqld_safe --user=mysql &
或者
service mysqld start
设置密码
/usr/local/mysql/bin/mysql_secure_installation
2015-11-26 18:19:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
mysql主从设置
修改主服务器master:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
修改从服务器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=226 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
重启两台服务器的mysql
su mysql
/etc/init.d/mysqld restart
5、在主服务器上建立帐户并授权slave:
#mysql -uroot -p
mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'geo456321'; //一般不用root帐号,*.*表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如172.16.9.30,加强安全。
登录主服务器的mysql,查询master的状态
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 320 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
7、配置从服务器Slave:
mysql>change master to master_host='172.16.9.27',master_user='mysync',master_password='geo456321',master_log_file='mysql-bin.000002',master_log_pos=320; //注意不要断开,320数字前后无单引号。
Mysql>start slave; //启动从服务器复制功能
8、检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222 //主服务器地址
Master_User: mysync //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
......
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。
主节点查看状态
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 782
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
9、主从服务器测试:
主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
mysql> use test_db;
Database changed
mysql> create table test_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test_tb values(001,'bobo');
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test_db |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
从服务器Mysql查询:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test_db | //I'M here,大家看到了吧
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use test_db
Database changed
mysql> select * from test_tb; //查看主服务器上新增的具体数据
+------+------+
| id | name |
+------+------+
| 1 | bobo |
+------+------+
1 row in set (0.00 sec)
到此lnmp环境搭建完成,在/usr/local/nginx/html下新建文件phpinfo.php,用于测试
vim phpinfo.php
phpinfo();
?>
在浏览器中输入如果出现下图所示页面则lnmp环境搭建成功
参考:
http://blog.itpub.net/27181165/viewspace-1082617/
http://blog.chinaunix.net/uid-20784749-id-1844508.html
http://blog.haohtml.com/archives/14646
http://www.cnblogs.com/argb/p/3604340.html
mysql
http://blog.sina.com.cn/s/blog_637e04c9010117ri.html
http://my.oschina.net/u/2428313/blog/494028
http://blog.itpub.net/26230597/viewspace-1199722/
主备
http://369369.blog.51cto.com/319630/790921/
http://www.cnblogs.com/alvin_xp/p/4162249.html
阅读(3616) | 评论(0) | 转发(0) |