Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1211417
  • 博文数量: 259
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2518
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-13 16:12
个人简介

科技改变世界,技术改变人生。

文章分类

全部博文(259)

分类: 系统运维

2015-11-27 15:13:26

因业务需求需要安装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) |
给主人留下些什么吧!~~