Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5542627
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: LINUX

2013-01-18 16:59:15

nginx + php + mysql + memecache (强)_V2


新版本说明:

1> 增加 php 对 pdo_mysql 的支持, mysqlnd 的支持



搭建说明: 

所有的服务器统一使用源代码方式进行安装,统一安装到 /server/app 目录下面


目录划分:

/server

/server/app 所有服务器安装目录

/server/Install 用到的所有安装源代存放目录

/server/backup 备份数据存放目录

/server/www 网址根目录




安装软件:

nginx,php,mysql, memcached


备注:mysql_pool 运行出现问题,暂时保留


//-----------------------------------------------------------------------------------------------------------------------------

常用命令:


目录创建

#mkdir -p {/server,/server/app,/server/install,/server/backup,/server/www};


// 如果需要开机启动的,可以把启动命令写在 /etc/rc.local 文件中,此文件中的命令,系统开机后,会自动执行


远程登陆:

# ssh root@192.168.1.100


文件拷贝 (在本地终端中)

#scp -r xxx_file1 root@192.168.0.100:~/dirName/


// 如果变异的时候,提示没有安装 gcc ,使用此命令安装 gcc 

#  yum install gcc  


#service iptables stop // 有时候莫名奇妙连不上服务器,把防火墙关掉在试一下。


#netstat -lnp | grep 5000 // 查看 500 号端口运行的进程

#netstat -na | grep 3306   查看 3306 号端口的监听状态

# lsof -i:3306  查看 3306 号端口的监听进程,pid, 用户信息

#ps -ef 查看系统所有进程状态

#chkconfig 查看所有服务的默认启动状态

#runlevel 查看当前系统的运行级别

#chkconfig  | less  将输出的结果,逐行查看

#top 查看系统,cpu ,内存 的使用状态

#killall php-fpm 删除 php-fpm 的所有进程

#file worker.gcc  查看文件信息


//------------------------------------------------------------------

动态链接库问题

// 查看动态链接库信息

#ldd /server/app/mysql_pool/bin/worker.fcgi 


出现问题:

libfcgi.so.0 => not found   


解决方法:

#vi /etc/ld.so.conf

/server/app/services/lib/ // 添加链接库目录到文件中

#ldconfig /etc/ld.so.conf // 重新加载配置



//-----------------------------------------------------------------------------------------------------------------------------

// vsftpd 服务器安装 


1>  解压缩 安装包 (切换到安装包目录下)

# cd /server/install

# tar -xvf vsftpd-3.0.2.tar.gz

# cd vsftpd-3.0.2


2>  编译 

#make 

#ls -l vsftpd   查看是否生成执行文件


备注:

/usr/bin/ld: cannot find -lcap 错误解决

打开 vsf_findlibs.sh 文件。 

找到 elif locate_library /lib/libcap.so.2; then 在后面添加一句

elif locate_library /lib64/libcap.so.2; then

  echo "/lib64/libcap.so.2";




3> 添加 vsftpd 运行设置

# useradd nobody // 需要 nobody 默认用户配置

#mkdir /usr/share/empty/

#mkdir /var/ftp/

#useradd -d /var/ftp ftp

#chown root.root /var/ftp

#chmod og-w /var/ftp



4> 安装

#make install


安装执行如下代码,将文件拷贝到默认的目录中(如命令不能执行,需要手动拷贝)

* cp vsftpd /usr/local/sbin/vsftpd

* cp vsftpd.conf.5 /usr/local/man/man5

* cp vsftpd.8 /usr/local/man/man8


5>  设置配置文件

#cp vsftpd.conf /etc


6> 启动服务器, & 表示后台运行

# /usr/local/sbin/vsftpd &


7> 测试服务器释放正常

# ftp localhost  (登陆ftp)

#ftp 192.168.1.100 (从其他地方登陆,如果连接不上,常识把防火墙关掉)


8> 设置开机启动

/etc/rc.local 添加 /usr/local/sbin/vsftpd &


9> ftp 登陆

ftp://username@192.168.1.100  (浏览器输入)     //username 为系统中添加的用户




//-----------------------------------------------------------------------------------------------------------------------------

// mysql 数据库安装 (源码安装)


安装 mysql 需要使用 cmake 进行编译,需要先安装 cmake

------如果本机不存在 cmake -------------

#cd /server/install/

#tar -xvf cmake-2.8.6.tar.gz

#cd cmake-2.8.6

# yum -y install gcc gcc-c++ ncurses-devel (如果运行报错,不存在 gcc, c++ 需要先安装)

#./bootstrap && make && make install     // 安装软件

#cd /server/install/

#rm -rf cmake-2.8.6 // 删除不需要的文件

------如果已经存在 cmake,想要更新版本吧 -------------

#cd /server/install/

#tar -xvf cmake-2.8.6.tar.gz

#cd cmake-2.8.6

#cmake . && make && make install

#cd /server/install/

#rm -rf cmake-2.8.6 // 删除不需要的文件



------------------ 源码安装 mysql   mysql-5.5.17.tar.gz ------------

1> 解压缩安装包

#cd /server/install/

#tar -xvf mysql-5.5.17.tar.gz // 解压

#cd mysql-5.5.17


2> 配置环境

#groupdel mysql // 如果存在,先删除

#userdel mysql

#groupadd mysql

#useradd -d /server/app/mysql -s /bin/bash -g mysql mysql


3> 编译 mysql 源码

#cmake . -DCMAKE_INSTALL_PREFIX=/server/app/mysql -DINSTALL_LIBDIR=/server/app/mysql -DMYSQL_DATADIR=/server/app/mysql/data -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLE_DOWNLOADS=0 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DWITH_LIBWRAP=1 -DWITH_DEBUG=0 -DWITH_SSL=bundled -DMYSQL_USER=mysql


4> 设置目录属性

#chown -R mysql /server/app/mysql

#chgrp -R mysql /server/app/mysql


5> 安装

#make && make install

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

#chmod  755  /etc/init.d/mysqld

#mkdir -p {/server/app/mysql/data,/server/app/mysql/log}

#chmod 755 -R /server/app/mysql/data

#chmod 755 -R /server/app/mysql/log


#cp -f extra/my_print_defaults /server/app/mysql/bin/  (如果不存在在拷贝)

#ln -s /server/app/mysql/bin/mysql /bin/mysql

#ln -s /server/app/mysql/bin/mysqladmin /bin/mysqladmin


6> 配置 配置文件 my.cnf

#sed  -i '/^\[mysqld\]$/a max_connections=2000' /etc/my.cnf

#sed  -i '/^\[mysqld\]$/a datadir=/server/app/mysql/data' /etc/my.cnf

#sed  -i '/^\[mysqld\]$/a socket=/tmp/mysql.sock' /etc/my.cnf

#sed  -i '/^\[mysqld\]$/a bind-address=192.168.1.100' /etc/my.cnf

#sed  -i '/^\[mysqld\]$/a innodb_data_file_path = ibdata1:2G;ibdata2:2G;ibdata3:2G;ibdata4:2G;ibdata5:2G;ibdata6:10M:autoextend' /etc/my.cnf     // 需要根据实际电脑的内存情况情况设置

#sed  -i '/^\[mysqld_safe\]$/a log-error=/server/app/mysql/log/mysqld.log' /etc/my.cnf

#sed  -i '/^\[mysqld_safe\]$/a pid-file=/server/app/mysql/mysqld.pid' /etc/my.cnf

#sed  -i '/^\[mysql\]$/a socket=/tmp/mysql.sock' /etc/my.cnf

#sed  -i '/^\[mysqladmin\]$/a socket=/tmp/mysql.sock' /etc/my.cnf


(如果有配置好的 my.cnf 配置文件,可以直接替换 /etc/my.cnf)

如果你的内存≤64M,则复制/mysql/my-small.cnf/etc/my.cnf

如果内存是128M,则复制mysql/my-medium.cnf/etc/my.cnf

如果内存是512M,则复制mysql/my-large.cnf/etc/my.cnf


/server/install/mysql-5.5.17/support-files/ my-xxx.cnf 为配不同配置文件的模板

如果服务器启动失败,将 my-small.cnf 拷贝替换 /etc/my.cnf 试一下。





7> 将 mysql 服务添加到 chkconfig 管理中

#chkconfig --add  mysqld

#chkconfig mysqld on

#chkconfig --list | grep mysql    // 查看是否成功添加



8> 初始化 mysql 数据库

#/server/app/mysql/scripts/mysql_install_db --user=mysql --basedir=/server/app/mysql --datadir=/server/app/mysql/data


#cd /server/app/mysql ; /server/app/mysql/bin/mysqld_safe &


9> 启动服务器

#service mysqld start

#service mysqld stop

#service mysqld restart



10> 设置 mysql 远程登陆

#mysql     // 进入 mysql 命令操作

mysql > grant all privileges on *.* to UserName@"%" identified by "Password";    // 增加一个 新的用户 % 表示任意 ip 地址访问

mysql > flush privileges; // 刷新刚才的设置

mysql > use mysql;

mysql > select host,user,password from user;   // 查看最新的表



//-----------------------------------------------------------------------------------------------------------------------------

// web 服务器搭建 (源码安装)



说明:web 服务器架构  nginx + php + memcached + mysql_pool + mysql  (mysql 的搭建,参考上面说明)


服务器端业务处理流程:


客户端查询请求:

(1) php 接受请求逻辑

(2) php 先查询 memcached 缓冲, 如果存在,直接返回

(3)如果不存在 , php 请求 mysql_pool 去数据中查询,返回查询结果



客户端增加,删除,修改请求:

(1) php 接受请求逻辑

(2) php 请求 mysql_pool 先增加到数据库中。

(3) php 将最变动更新到 memcached 中。



1> 安装前设置


#mkdir /server/app/services // 新建目录

#export PATH=$PATH:/server/app/services/bin:/server/app/services/sbin




2> 安装Zlib (依赖库)


#cd /server/install/

#tar -xvf zlib-1.2.5.tar.gz

# cd zlib-1.2.5

# ./configure --prefix=/server/app/services

# make && make install

# cd ..

# rm -rf zlib-1.2.5


3>  安装 libxml 依赖库


#cd /server/install/

#tar -xvf libxml2-2.7.4.tar.gz

#cd libxml2-2.7.4

#./configure --prefix=/server/app/services --with-zlib=/server/app/services/lib

#make && make install

#cd ..

#rm -rf libxml2-2.7.4


4> 安装 Curl

#cd /server/install/

#tar -xvf curl-7.15.1.tar.bz2 

#cd curl-7.15.1

#./configure --prefix=/server/app/services

#make && make install

#cd ..

#rm -rf curl-7.15.1


5> 安装 fcig

#cd /server/install/

#tar -xvf fcgi-2.4.0.tar.gz

#cd fcgi-2.4.0

#./configure --prefix=/server/app/services

#make && make install

#cd ..

#rm -rf fcgi-2.4.0



备注:报以下错误:

fcgio.cpp: In destructor 'virtual fcgi_streambuf::~fcgi_streambuf()':

fcgio.cpp:50: error: 'EOF' was not declared in this scope

fcgio.cpp: In member function 'virtual int fcgi_streambuf::overflow(int)':

fcgio.cpp:70: error: 'EOF' was not declared in this scope

fcgio.cpp:75: error: 'EOF' was not declared in this scope

fcgio.cpp: In member function 'virtual int fcgi_streambuf::sync()':

fcgio.cpp:86: error: 'EOF' was not declared in this scope

fcgio.cpp:87: error: 'EOF' was not declared in this scope

fcgio.cpp: In member function 'virtual int fcgi_streambuf::underflow()':

fcgio.cpp:113: error: 'EOF' was not declared in this scope

make[2]: *** [fcgio.lo] Error 1

make[2]: Leaving directory `/root/downloads/fcgi-2.4.1-SNAP-0910052249/libfcgi'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/root/downloads/fcgi-2.4.1-SNAP-0910052249'

make: *** [all] Error 2


解决办法:

/include/fcgio.h文件中加上 #include ,然后再编译安装就通过了。



6> 安装 libzip2

#cd /server/install/

#tar -xvf bzip2-1.0.6.tar.gz

#cd bzip2-1.0.6

#make -f Makefile-libbz2_so

#make && make install

#cp bzip2-shared /server/app/services/bin/bzip2

#cp -a libbz2.* /server/app/services/lib/

#cd ..

#rm -rf bzip2-1.0.6



7> 安装 libevent  依赖库 (memcached  服务器用到)

#cd /server/install/

#tar -xvf libevent-1.4.13-stable.tar.gz

#cd libevent-1.4.13-stable

#./configure --prefix=/server/app/services

#make && make install

#cd ..

#rm -rf libevent-1.4.13-stable


8> 安装 memcached (缓存服务器)

#cd /server/install/

#tar -xvf memcached-1.4.5.tar.gz

#cd memcached-1.4.5

#./configure --prefix=/server/app/services --with-libevent=/server/app/services/

#make && make install

#cd ..

#rm -rf memcached-1.4.5



9> 安装 libmemcached 

#cd /server/install/

#tar -xvf libmemcached-0.46.tar.gz

#cd libmemcached-0.46

#./configure --prefix=/server/app/services --with-memcached=/server/app/services/bin/memcached

#make && make install

#cd ..

#rm -rf libmemcached-0.46


10> 安装 pcre

#cd /server/install/

#tar -xvf pcre-8.20.tar.bz2

#cd pcre-8.20

#./configure --prefix=/server/app/services

#make && make install

#cd ..

#rm -rf pcre-8.20



11> 安装 php 

#cd /server/install/

#tar -xvf php-5.3.20.tar.gz


#tar -xvf APC-3.1.6.tgz 

#mv ./APC-3.1.6 ./php-5.3.20/ext/apc


#tar -xvf memcache-2.2.6.tgz 

#mv ./memcache-2.2.6 ./php-5.3.20/ext/memcache


#tar -xvf memcached-1.0.2.tgz

#mv ./memcached-1.0.2 ./php-5.3.20/ext/memcached


#tar -xvf zlib-1.2.5.tar.gz 

#mv ./zlib-1.2.5 ./php-5.3.20/ext/zlib



#cd php-5.3.20

#rm -f configure

#./buildconf --force


// 如果提示 autoconf not found., 需要安装 :#yum install autoconf   

php5.3.20 编译 autoconf 2.1.3 版本问题解决:

#cd /server/install/

#tar -xvf autoconf-2.13.tar.gz 

#cd autoconf-2.13

#./configure --prefix=/usr/local/autoconf-2.13

#export PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf

#export PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader


http://blog.chinaunix.net/space.php?uid=20622737&do=blog&id=3466172




// 配置 php 编译选项 (./configure --help 查看帮助信息)

#./configure --prefix=/server/app/services/ --with-libxml-dir=/server/app/services/ --with-config-file-path=/server/app/services/ --enable-fastcgi --enable-force-cgi-redirect --with-curl=/server/app/services --enable-apc --enable-memcache --with-zlib-dir=/server/app/services/ --with-zlib --with-libmemcached-dir=/server/app/services/ --enable-memcached --enable-sockets --enable-fpm --enable-pdo 


// 编译 php (支持 mysql, mysqlnd, pdo)-- 推荐

 ./configure --prefix=/server/app/services/ --with-libxml-dir=/server/app/services/ --with-config-file-path=/server/app/services/ --enable-fastcgi --enable-force-cgi-redirect --with-curl=/server/app/services --enable-apc --enable-memcache --with-zlib-dir=/server/app/services/ --with-zlib --with-libmemcached-dir=/server/app/services/ --enable-memcached --enable-sockets --enable-fpm --enable-pdo  --enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd



// 安装 php

#make && make install


#cp php.ini-developmentt /server/app/services/php.ini    // 拷贝配置文件

#cd ..

#rm -rf php-5.2.15


// 编辑 php ini 配置文件

#vi /server/app/services/php.ini 

设置 cgi.fix_pathinfo=1

include_path = ".:/php/includes:/server/app/services/lib/php"  // 添加 /server/app/services/lib/php 目录



// 编辑 php-fpm.conf 配置文件

#cd /server/app/services/etc

#cp php-fpm.conf.default php-fpm.conf

#vi php-fpm.conf

listen = 192.168.1.100:9000    设置 绑定的地址和端口


//启动 php-fpm  (php 的专用 first-cgi)

#/server/app/services/sbin/php-fpm


//杀死 php-fpm 所有进程

#killall php-fpm




11> 安装 nginx 服务器 

#cd /server/install/

#tar -xvf nginx-0.9.2.tar.gz 

#cd nginx-0.9.2

#./configure --prefix=/server/app/nginx --without-http-cache

#make && make install

#cd ..

#rm -rf nginx-0.9.2



安装提示错误 

./configure: error: the HTTP rewrite module requires the PCRE library.

解决方法: 

yum -y install pcre-devel openssl openssl-devel



// 配置服务器 nginx.conf, 参考网上相关资料

http://blog.chinaunix.net/uid-20622737-id-3464140.html


编辑 nginx.conf文件,设置服务器网站的根目录为 / server/www 

worker_processes  10; // 可以设置服务器监听进程的个数



//创建 webgame 用户 ,方便以后操作网页文件读写

#rm -rf /server/www

#groupadd www // 增加 www 用户组

#useradd -d /server/www -s /bin/bash -g www webgame

#passwd  webgame    // 设置密码 

#chmod 755 /server/www // 设置目录的读写属性(让 nginx 服务器可以访问里面的文件)


备注:

nginx 默认是用 nobody 用户的身份运行的,确保 nobody 用户可以正常访问  /server/www 下的文件

如果 nginx 不能访问 /server/www 下的文件,先检查一下文件的权限,



// 启动 nginx 

#/server/app/nginx/sbin/nginx



//平滑重启

#/server/app/nginx/sbin/nginx -s reload 


//检测配置文件是否正确,重启前必须检测一下

#/server/app/nginx/sbin/nginx -t -c /server/app//nginx/conf/nginx.conf  


打开浏览器,输入:,查看服务器是否启动成功

其他问题:http://blog.chinaunix.net/uid-20622737-id-3464343.html http://blog.chinaunix.net/uid-20622737-id-3464140.html



13> 启动memcached服务器

/server/app/services/bin/memcached -d -m 512 -l 192.168.1.100 -p 11211 -u nobody   (使用nobody用户来运行)


-d 以守护程序(daemon)方式运行 memcached; 

-m 设置 memcached 可以使用的内存大小,单位为 M; 

-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数; 

-p 设置监听的端口,默认为 11211,所以也可以不设置此参数; 

-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。

-n 最大连接数, 默认为4096

-D don't go to background

-k 使用ketama算法

-i 保持激活的连接数, 默认为 20

-v 输出警告和错误信息




//--------------------------------------------------------------------------------------------------------------

//(暂时保留)


14> 配置 mysql_pool  (代码运行错误,暂时保留)

#cd /server/install/

#tar -xvf mysql_pool.tar.bz2 

#cp -r mysql_pool /server/app

#rm -rf mysql_pool


// 编辑配置文件 

#vi /server/app/mysql_pool/conf/worker.conf  配置数据库 ip ,用户名,密码等等


// 查看动态链接库信息

#ldd /server/app/mysql_pool/bin/worker.fcgi 


出现问题:

libfcgi.so.0 => not found   


解决方法:

#vi /etc/ld.so.conf

/server/app/services/lib/ // 添加链接库目录到文件中

#ldconfig /etc/ld.so.conf // 重新加载配置




#/server/app/mysql_pool/lighttpd/clean.sh

#/server/app/mysql_pool/lighttpd/configure.sh   // 更新配置


#vi /server/app/mysql_pool/lighttpd/lighttpd.conf

// 设置绑定的端口和地址

server.port = 5001

server.bind    = "192.168.1.100"


#vi /server/app/mysql_pool/lighttpd/conf-enabled/000-service.conf

// 修改参数  "min-procs" => 8, "max-procs" => 8,





15> 安装 spawn-fcgi 服务(一个公用的 first-cgi ,用来实现 php 操作 mysql_pool 的)


#cd /server/install/

#tar -xvf spawn-fcgi-1.6.3.tar.gz

#cd spawn-fcgi-1.6.3

#./configure --prefix=/server/app/services

# make && make install

# cd ..

# rm -rf spawn-fcgi-1.6.3


// 启动 spawn-fcgi 服务 (使用 spawn-fcgi  来启动 mysql_pool)

#/server/app/services/bin/spawn-fcgi -a 192.168.1.100 -p 9001 -u mysql  -F 8 -f /server/app/mysql_pool/bin/worker.fcgi


-a  绑定的地址

-p 绑定的端口

-F 分裂的子进程个数

-u 指定哪个用户来运行

-f   文件名 filename of the fcgi-application



阅读(2170) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~