Ubuntu Server 10.10安装配置Nginx+php-fpm+mysql

归类于CGI/FastCGI | Linux | Nginx | php 参与评论

新安装的系统,软件包更新,首先找一个速度不错的Ubuntu源,这里网上搜了一个。

http://www.cnblogs.com/lei1016cn/archive/2010/10/21/1857761.html

更改源

vi /etc/apt/source.list

全部删除,加入下面的源。

### Security Sourcelist

deb http://security.ubuntu.com/ubuntu maverick-security main restricted
deb-src http://security.ubuntu.com/ubuntu maverick-security main restricted
deb http://security.ubuntu.com/ubuntu maverick-security universe
deb-src http://security.ubuntu.com/ubuntu maverick-security universe
deb http://security.ubuntu.com/ubuntu maverick-security multiverse
deb-src http://security.ubuntu.com/ubuntu maverick-security multiverse

### 163.com Sourcelist
deb http://mirrors.163.com/ubuntu/ maverick main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ maverick main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ maverick-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ maverick-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ maverick-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ maverick-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ maverick-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ maverick-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ maverick-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ maverick-updates universe main multiverse restricted

上面部分是保留Ubuntu官方紧急安全补丁源。保存后,执行

sudo apt-get update
sudo apt-get upgrade

安装Nginx

apt-get install nginx

安装Mysql-server

apt-get install mysql-server

安装php,php-fpm,php常用模块

apt-get install php5-cgi php5-mysql php5-fpm php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-ming php5-pspell php5-recode

就这样,把Nginx,mysql,php都安装好了,安装好后都是启动了的,手动启动或者停止服务用下面的命令。

service nginx start     #启动nginx
service nginx restart   #重启nginx
service nginx stop      #停止nginx

service php5-fpm start    #启动php5-fpm
service php5-fpm restart  #重启php5-fpm
service php5-fpm reload   #重加载php5-fpm
service php5-fpm stop     #停止php5-fpm

service mysql start       #启动mysql
service mysql restart     #重启mysql
service mysql stop        #停止mysql

安装好了,还需要做一些优化配置。
nginx优化配置,/etc/nginx/nginx.conf

user www-data;
worker_processes  8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    use epoll;
    worker_connections  51200;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile       on;
    keepalive_timeout  65;
    tcp_nodelay    on;
    tcp_nopush     on;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 2k;
    large_client_header_buffers 4 4k;
    client_max_body_size 20m;

    ## gzip
    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_min_length 1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types  text/plain text/css image/jpeg application/json application/x-javascript text/xml application/x-shockwave-flash application/xml application/xml+rss text/javascript;
    gzip_vary on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

上面的是按照服务器8个cpu来配置的,也就是每个cpu开一个worker总共8个,并且指定每个worker的序号

php-fpm优化配置,主要是进出数的配置,找到以下几个关键配置选项,在/etc/php5/fpm/poll.d/www.conf

pm = dynamic                        #这里可以设置为dynamic/static,前者为动态管理php-fpm进程,后者为静态

pm.max_children  200                #最大的子进程数量,这个参数只在pm=static模式下有效,dynamic模式得下面参控制
pm.start_servers = 200              #启动的时候开启的进程数
pm.min_spare_servers = 100          #空闲时候最少保留的进程数
pm.max_spare_servers = 300          #最大进程数

上面假如选择pm的方式为static,那么只有pm.max_children参数设置起作用,因为使用静态的模式管理进程,php-fpm管理器只会静态的设置最大的进程数量为max_children,而反过来,使用pm=dynamic,则pm.max_children不起作用了,会根据下面的三个参数联合控制。这里,pm.start_servers是要根据pm.min_spare_servers和pm.max_spare_servers两个参数的设置计算来的,公式为:pm.start_servers = pm.min_spare_servers + (pm.max_spare_servers – pm.min_spare_servers)/2。
另外,到底开启多少进程数合适呢?以及选择怎样的模式更好呢?
假如服务器配置不错,那就是用static模式,毕竟动态的管理php-fpm进程会有消耗服务器资源,以及数量上的话,一般一个php-fpm据说是消耗20-30MB的内存(我自己也没考究过-_-!)。按照这样算,1G内存的机器,大概开30个差不多了,8G的话,我多的时候是配置到了300个最大进程数量。

使用rsync备份网站数据(2)

归类于Linux | rsync 一条评论

前面一篇文章比较详细的讲了关于rsync的配置,这里我们以具体的应用来讲讲如何使用rsync、crontab、shell来做网站数据的备份,还没配置好rsync服务的同学移步这里–使用rsync备份网站数据(1)

前面文章讲到rsync服务器可以配置多个同步备份项目,对于备份网站程序文件以及图片等静态文件来说我们可以直接配置rsync模块目录为网站根目录即可,比如备份整个WEB服务器根目录/var/www,可以这样配置成rsync的一个模块。

[larro]
path = /var/www
list=yes
ignore errors
auth users = root
secrets file = /etc/rsyncd.secrets
comment = This is the System file of Larro's Blog
exclude = unrsync/

对,这样就可以了。假定我们这台机器IP是192.168.1.1,然后我们在提供备份的机器上(192.168.1.2,同样安装了rsync服务)上只需要输入以下命令:

rsync -avzP --password-file=/etc/rsync/rsync.passwd root@192.168.1.1::larro /data/backup/webhost

关于具体参数详细说明可以参考使用rsync备份网站数据(1),或者官方文档http://www.samba.org/ftp/rsync/rsync.html
这样,就讲192.168.1.1机器上/var/www里所有文件备份到/data/backup/webhost里面去了,但是这样肯定不够,因为每次得手动去输入命令同步备份,于是我们借助Linux系统的crontab命令服务,让系统自己定时去备份,(crontab详细介绍).
接着编辑crontab,把上面备份命令直接写入crontab里面:

crotab -e

在里面输入以下命令代码:

30 4 * * * /usr/bin/rsync -avzP --password-file=/etc/rsync/rsync.passwd root@192.168.1.1::larro /data/backup/webhost

上面命令表示,每天的4:30执行rsync命令,自动同步备份网站数据。

但是数据库MYSQL文件我们不好直接设置成MYSQL的数据库读写文件,例如/var/lib/mysql,数据库一直运行着,一直在读写着这些文件,如果我们直接使用rsync很容易出错,解决办法很多种,脚本里可以先停掉mysql服务,或者直接使用Mysqldump命令导出数据库文件然后打包到某个文件夹,我们把这个文件夹配置成一个rsync项目位置,然后再同步备份。
个人觉得使用mysqldump方式好点,也简单并且不必停掉mysql服务。
首先,写一个简单的shell脚本,处理导出数据库文件,并且顺便打包下放到某个位置:

#! /bin/sh
backdate = $(date +'%Y%m%d-%H')
mysqldump -uUSERNAME -pPASSWORD dbname > /data/backup/mysql-dump/dbname_"$backdate".sql
cd /data/backup/mysql-dump
tar -czf dbname_"$backup_date".tar.gz dbname_"$backup_date".sql
rm dbname_"$backup_date".sql

上面脚本大概意思就是,设置一个变量backdate值为当前时间数值,然后mysqldump导出数据库,打包压缩,删除原来的sql文件,OK
接下来就是不知任务crontab让系统定时去备份数据库了,以便rsync能随时备份到最新的数据,然后就是同上,在192.168.1.2上添加一个任务同步备份了

crontab -e
30 5 * * * /usr/bin/rsync --password-file=/etc/rsync/rsync.passwd root@192.168.1.1::mysql-backup /data/backup/mysql-dump

至此,就都做好了
//-_- Larro

使用rsync备份网站数据(1)

归类于Linux | rsync 一条评论

前天干了件吐血的大事,是这样的,同事让我帮他清理下服务器上一些乱七八糟的用户,我cat下/etc/passwd文件,里面一堆的用户乱七八糟的用户文件,更为可耻的是有人还把用户加入sudoers里面去了(之前接触过该台服务器的人),我二话不说,一个个使劲的删,连同用户所属的文件也通通删了(使用命令usrdel -f -r xxx,以后删除东西的时候千万千万要注意-f参数,最好任何时候都别用),包括一些FTP账户,FTP用户直接使用的是本地用户,自然FTP是用来管理网站程序的,于是我也把它删了,悲剧发生了,这些FTP账户所属目录就是网站程序文件,一删除用户资料带着程序文件全删除了,后来网站不能访问了检查一遍机器其他问题后才发现问题,当时都没反应过来,之后那个悔,那个慌。还好有备份,不过这两天的图片没了得重新上传。

于是,在这件事情的基础上,就决定配置一个实时性比较强的数据备份,自然用rsync。至于rsync是什么东东,同学们自己Google或者百度去。

Ubuntu Server,Centos,Debian等安装rsync服务可以直接使用在线安装包。


sudo apt-get install rsync


yum install rsync

安装好了之后,我们接下来需要配置三个文件,分别是rsyncd.conf、rsyncd.motd、rsyncd.secrets,这三个文件分别是主配置文件、显示欢迎界面文件以及密码验证文件,并且rsyncd.conf默认是不存在的,得自己创建。

touch rsyncd.conf

接下来,在该配置文件里写入如下配置代码:

# Distributed under the terms of the GNU General Public License v2
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
port = 873
address = 192.168.1.1

#uid = nobody
#gid = nobody
uid = root
gid = root
use chroot = yes
read only = yes

#limit access to private LANs
hosts allow=192.168.1.2/255.255.255.0
hosts deny=*
max connections = 5
motd file = /etc/rsyncd.motd

#This will give you a separate log file
log file = /var/log/rsync.log

#This will log every file transferred - up to 85,000+ per user, per sync
#transfer logging = yes
log format = %t %a %m %f %b

syslog facility = local3
timeout = 300

[larro]
path = /var/www/larro
list=yes
ignore errors
auth users = root
secrets file = /etc/rsyncd.secrets
comment = This is the System file of Larro's Blog
exclude = easylife/ samba/

大概解释下上面的配置代码:
address =192.168.1.1 rsync服务器的IP地址
uid = root 使用root用户
gid = root 使用root用户组

注意:服务器端传输文件时,需要配置使用哪个用户和用户组来执行,默认是nobody。 如果用nobody用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。偷懒为了方便,用了root ,或者也可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。

hosts allow=122.224.164.218/255.255.255.0
hosts deny=*
上面两行是指定那些客户端IP可以连接到该rsync服务器,这个配置能很大程度上提高安全性,host allow 是允许的IP列,格式为IP/网段,多个空格隔开

log file=/etc/log/rsync.log rsync的日志记录文件
以及,上面的rsyncd.conf配置文件是分为两部分,包括第一部分公共配置参数(上面解释部分)以及单个模块的配置,如上:

[larro]
path = /var/www/larro
list=yes
ignore errors
auth users = root
secrets file = /etc/rsyncd.secrets
comment = This is the System file of Larro's Blog
exclude = unrsync/

这里,是指配置了一个名为larro的同步备份项目模块:
path = /var/www/larro 是要备份的文件的位置

list = yes 参数是表示是否允许列出文件结构,一般不要配置成yes,因为这样别人就能知道文件结构了,多少是个不太安全的因素。
auth users = root 验证时候使用的用户
secrets file = /etc/rsyncd.secrets 验证时候使用的密码验证文件,就是上面提到的三个配置文件之一
comment = This is the system file of Larro’s Blog 这个是当你列出该项目模块时候的一个说明文字,可以任意配置
exclude = unrsync/ 配置项目模块里你不想同步备份的文件及文件夹,多个空格隔开
至此,rsyncd.conf配置文件弄好了,具体的其他详细配置项目在官方配置文档里查看,大家可仔细参考,接下来来配置rsyncd.motd,rsyncd.secrets.

rsyncd.motd也是可以任意配置,因为它仅仅是一个显示欢迎的话语,不过可以写得工整点,比如:

+++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Welcome to use the rsync +
+++++++++++++++++++++++++++++++++++++++++++++++++++++

然后配置rsyncd.secrets,前面rsyncd.conf里面使用的验证用户名是root,那么这里面配置的就是root的验证密码.

echo "mypasswod" > /etc/rsyncd.secrets
chown root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

听上去有点恐怖,太不安全了吧呵呵,这个配置文件权限必须是设置成600,不然无法使用rsync服务,到时候会提示以下错误信息:

password file must not be other-accessible
continuing without password file
Password:

这样子就没关系了,因为权限设置为600,也就是只有root用户本身才能读写,也就是说其他用户登录系统后,并不能查看到root的账户信息,不过前提是你是这样设置的并且rsync服务被你配置成功了,呵呵。
到这里,一个rsync服务器上面的简单配置就好了。
启动服务:

rsync --daemon --config=/etc/rsyncd.conf

上面命令是通过–daemon参数在后台启动rsync服务,并且通过使用/etc/rsyncd.conf配置文件来启动rsync服务,如果配置文件为默认的/etc/rsyncd.conf则可以不使用–config参数来指定配置文件位置。

然后你得弄另外一个机器192.168.1.2来备份上面机器项目文件。
一样,先安装rsync。
然后,使用下面命令测试下:

rsyncd --list-only root@192.168.1.1::larro

之后会提示输入密码,成功后会列出larro模块下所有的文件,或者通过在客户机上配置存放一个密码文件来访问,省得每次都提示输入密码,创建某个rsync账户的密码文件,比如上面用的root密码。

mkdir /etc/rsync
touch /etc/rsync/rsync.larro.passwd
echo "mypassword" > /etc/rsyc/rsync.larro.passwd

然后你就可以直接这样使用命令:

rsync --list-only --passwd-file=/etc/rsync/rsync.larro.passwd root@19\
2.168.1.1::larro

rsync有六种不同的工作模式:

  1. rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
  2. rsync [OPTION]… [USER@]HOST:SRC DEST
  3. rsync [OPTION]… SRC [SRC]… DEST
  4. rsync [OPTION]… [USER@]HOST::SRC [DEST]
  5. rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
  6. rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

解释:

  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
  2. 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
  3. 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

rsync中的参数

-a  以archive模式操作、复制目录、符号连接 相当于-rlptgoD

-r  是递归

-l  是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;

-z  传输时压缩;

-P  传输进度;

-v  传输时的进度等信息,和-P有点关系,自己试试。可以看文档;

-e  ssh的参数建立起加密的连接。

-u  只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时

--progress  是指显示出详细的进度情况

--delete  是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致

--password-file=/password/path/file  来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

在这篇文章里就先讲讲rsync的基本配置,在下一篇写写怎么通过rsync、crontab、shell来完成备份同步服务器上数据文件。

// -_-  Larro

使用/proc虚拟文件系统查看优化WEB程序

归类于CGI/FastCGI | Linux | Nginx 参与评论

在服务器上,我们一般使用top命令工具来监视服务器进程和Linux整体性能。

top

将会看到如下结果界面:

会列出了进程PID,USER(所属用户),PR,%CPU,%MEM,COMMAND(命令或者服务)等参数的列表,这个显示列表是动态跟踪服务器的。
问题来了,在上面的监控中,主要查看$CPU,%MEM,COMMAND这几个参数值,上面可以看到排在前面的两个进程都肚子占用了一枚CPU的%100。另外也可以根据这个列表看出WEB服务器有多少个CPU,数数php5-cgi的行数就是了。

看到两个php-cgi进程貌似是因为程序存在问题死循环什么的了把当时处理这个脚本的CPU给占满了,在这里,虽然我们大概知道是程序某个地方存在严重的问题,但是我们不能具体定位出来到底是系统的哪段文件出问题了。

于是,/proc来帮我们了,我们找到哪个进程在耗CPU,

对,PID为24207和24219这两家伙,咱们来用/proc虚拟文件系统来定位吧。

ls -l /proc/24219 # 后面的数字为上面的PID

注意上图中蓝色的路径,对,这个路径就是此段程序执行的代码路径,定位到了吧,然后你就可以在这个路径下去找那原因了

服务器流量监控工具-bmon

归类于Linux | Nginx 参与评论

介绍一款服务器流量监控工具,Bmon,在Linux社区也比较常用,它提供的数据比较详细。
Ubuntu下安装

sudo apt-get install bmon

然后就可以查看某一块网卡的带宽流量情况了,比如查看eth0的:

bmon -p eth0

可以看到如下显示:

Bmon查看eth0网卡情况

Bmon查看网络带宽流量情况

其中,RX表示流入,TX流出,RX rate是流入比率,TX Rate流出比率。更多bmon用法可以man bmon查看。

另外,更加喜人的是它能提供与Apache/Nginx等WEB服务器配合以Html方式动态显示流量监控结果,输入以下命令:


bmon -I distribution:multicast -o null -O html:path=/var/www/dirname/

这里注意下,上面的目录”/var/www/dirname/”最好不要用网站的根目录,因为执行下这个命令的话,它会生成一个index.html文件,而我们网站一般由一个index默认文档,一般index解析为:index.html index.htm index.php这三个文件。

所以,当它生成的index.html替换网站根目录的index.html文件的时候,访问网站时候默认就访问到bmon的统计页面了。

我们可以把他放在其他位置,然后加一个Http Auth来设定一定的权限来查看。

比如我们的网站根目录是:/var/www/website

我们把它生成的统计文件放在/var/www/website/bmon下,通过配置Nginx的Http auth_basic来控制访问权限。

在网站配置文件里加下面这么一段

location ~ ^/bmon/ {
    auth_basic Hello_Auth;
    auth_basic_user_file /data/auth/manage_auth;</pre>
}

上面的auth_basic Hello_auth;只是给这个验证加一个类似提示语的,可以任何;auth_basic_user_file 是用来存储http登录账户密码的,得用htpasswd工具来生成。具体如下:


htpasswd -c /data/passwd username

提示输入密码,就会创建一个username用户,并在/data/目录下生成username的passwd文件。

最终,通过浏览器访问http://www.xxx.com/bmon/就能看到监控的网页形式数据了。

 

 

 

顶部