不合格的程序猿
分类: LINUX
2015-12-14 15:55:58
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