当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : Ubuntu 810 上 Nginx + MySQL + PHP-FPM的配置笔记
帖子发表于 : 2009-07-08 20:21 
头像

注册: 2006-09-14 0:21
帖子: 43
地址: 狐狸羹的坑
送出感谢: 0 次
接收感谢: 0 次
小白的安装笔记,欢迎来喷...
最近买了个VPS,服务器应该是,就开始在上面折腾Ubuntu 810 X64了。
装好以后啥都没有,当然首先想到的更新软件源了,结果命令敲进去一堆错误,获取失败,google了下,看到有可能是DNS解析的问题,而且另一个CentOS上的nameserver的IP地址和这一台不一样,于是就把IP给改掉了,这下就顺畅了。
代码:
cp /etc/resolv.conf /etc/resolv.conf_backup  #做什么还是备份下好
vi /etc/resolv.conf

#改成如下面这样
nameserver 208.67.220.220
nameserver 208.67.222.222


然后把系统给更新下:
代码:
apt-get update
apt-get upgrade


把GCC(编译工具)和Wget(下载工具),对了还有cron(计划任务,就是crontab),这仨个给装上再说,首先还是创建个文件夹来放置自己的安装包,还有个rcconf,类似windows的msconfig,可以设置启动项的,顺便把vim也装上算了。
代码:
apt-get install build-essential wget cron rcconf vim


然后再来安装一些程序库什么的。安装的时候可能会弹出错误提示,我的是这样的:
引用:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "zh_CN.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory


于是又开始google,看到个简单的办法,可能会装些不要的东西在里面, :em06 ,但是咱就怕麻烦。
代码:
apt-get install language-support-zh


问题解决了。然后重启一下应该就没问题了…然后是噼里啪啦一堆要用上的程序库…
代码:
apt-get install autoconf \
libjpeg62 libjpeg62-dev \
libpng12-0 libpng12-dev \
libfreetype6 libfreetype6-dev \
libxml2 libxml2-dev \
zlib1g zlib1g-dev \
bzip2 libbz2-dev \
libncurses5 libncurses5-dev \
curl \
libssl-dev \
slapd ldap-utils \
libcurl4-openssl-dev \
libmcrypt-dev \
libmhash-dev \


至于MySQL,本来想装最新的,结果编译一直失败, :em20 ,还是apt算了:
代码:
apt-get install mysql-server mysql-client libmysqlclient-dev


然后咱开始下载Nginx,PHP,PHP-FPM等等一些软体了,现在PHP最新的是5.3了,不过5.3的和5.2.10的我打了PHP-FPM补丁之后编译都有问题,只有5.2.9很完美...
先创建个目录来放自己的软件。
代码:
mkdir apps
cd apps
wget http://sysoev.ru/nginx/nginx-0.8.4.tar.gz
wget http://cn2.php.net/get/php-5.2.9.tar.gz/from/this/mirror
wget http://dev.ixiezi.com/files/2009/06/php-529-fpm-0510diff.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz


我们先开始安装pcre吧。
代码:
tar xzf pcre-7.9.tar.gz
cd pcre-7.9
./configure --enable-utf8 --enable-unicode-properties --enable-pcregrep-libz --enable-pcregrep-libbz2
make
make install


如果编译的时候看到少什么就自己找了装一下就可以了。

再来编译安装iconv了。
代码:
tar zxvf libiconv-1.13.tar.gz
cd libiconv-1.13
./configure --prefix=/usr/local
make
make install


好了,开始安装Nginx了,用的是最新的啥开发稳定版。
代码:
# 解压缩nginx安装文件
tar xzf nginx-0.8.4.tar.gz
# 编译nginx,增加 http_stub_status模块,默认安装到目录/usr/local/nginx,指定可执行脚本到/usr/local/sbin
cd nginx-0.8.4
./configure --sbin-path=/usr/local/sbin \
--user=www-data --group=www-data\
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_stub_status_module \
--with-http_ssl_module
# 编译并安装
make
make install


安装完成后,使用下面的语句启动nginx并在浏览器中输入 http://localhost 访问,如果访问能够出现的页面显示 “It Works” 那就说明您的nginx安装成功。

代码:
# 启动nginx
/usr/local/sbin/nginx


开始装PHP了:
代码:
# 解压缩php 5.2.9的php源代码
tar xzf php-5.2.9.tar.gz
# 打fpm补丁
gzip -cd php-529-fpm-0510diff.gz | patch -d php-5.2.9 -p1
cd php-5.2.9
#然后根据自己的喜欢编译PHP了,我打了很多上去
# 安装后php被安装在 /usr/local/ 下
# php fastcgi的可执行文件 php-fpm被安装在 /usr/local/sbin下
# 其他文件和扩展文件被安装在/usr/local/lib/php下,
# 扩展文件在 /usr/local/lib/php/extensions/no-debug-non-zts-20060613 下
./configure --enable-fastcgi \
--enable-fpm --enable-force-cgi-redirect \
--with-gd --enable-gd-native-ttf \
--with-openssl --with-mcrypt \
--with-mysql --with-mysqli \
--with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib \
--with-gettext=/usr/lib --with-curl=/usr/lib \
--with-curlwrappers --with-freetype-dir=/usr/lib \
--with-zlib-dir=/usr/include --enable-mbstring \
--enable-sockets --with-iconv-dir=/usr/local \
--with-libxml-dir=/usr --enable-xml \
--enable-discard-path --enable-bcmath \
--enable-shmop --enable-sysvsem \
--enable-inline-optimization --enable-mbregex \
--enable-pcntl --with-ldap  --with-xmlrpc --enable-zip \
--enable-soap --with-mhash
# 编译并安装
make
make install
# 将php-5.2.9目录下的php.ini-dist文件复制为/usr/local/lib/php.ini
cp php.ini-dist /usr/local/lib/php.ini


至此,PHP就结束了。可以用PCRE命令安装上memcache、zip和apc扩展,不过我喜欢用eaccelerator,所以APC就不装了,至于ZIP这个,发现和某个已经冲突了,虽然装了,但是没写到php.ini里面。
代码:
# 安装memcache等扩展,用于启用wordpress的memcached支持。
pecl install memcache zip apc


再来编辑一下php.ini的配置文件:
代码:
vi /usr/local/lib/php.ini

    首先修改配置 extension_dir 为 /usr/local/lib/php/extensions/no-debug-non-zts-20060613/ (注意:根据安装php版本和编译选项不同,可能不完全相同)。
    在Dynamic Extensions 设置部分,加入下面的设置,载入zip, memcached和apc扩展,也就是在php.ini的下面自己添加上即可。
代码:
extension = zip.so # 这个我注释掉了
extension = memcache.so # 这个俺用了
extension = apc.so # 这个俺没装


配置完成后,使用命令 pecl list-all 查看所有已经安装的pecl模块,确认apc, memcache和zip在其中。

然后配置一下Nginx了,打开 /usr/local/nginx/conf/nginx.conf,最好自己备份一个,这是nginx的主配置文件,下面是我自己的配置,自己的自己改... :em11
代码:
user  www-data www-data;
worker_processes  4;

#error_log  logs/error.log;
error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;

# Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events {
    use epoll;
    worker_connections  51200;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    sendfile        on;
    tcp_nopush     on;
   tcp_nodelay on;
   fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
   fastcgi_read_timeout 300;
   fastcgi_buffer_size 64k;
   fastcgi_buffers 4 64k;
   fastcgi_busy_buffers_size 128k;
   fastcgi_temp_file_write_size 128k;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;
   gzip_min_length  1k;
   gzip_buffers     4 16k;
   gzip_http_version 1.0;
   gzip_comp_level 2;
   gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
   gzip_vary on;

    server {
        listen       80;
        server_name  www.bargue.com.cn;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

   root /var/www;

        location / {
            root   /var/www;
            index  index.php index.html index.htm;

      # the main drupal app
      if (!-e $request_filename) {
         rewrite ^/(.*)$ /index.php?q=$1 last;
      }
        }

        error_page  404              index.php;
   error_page  403           /403.html;

        # redirect server error pages to the static page /50x.html
        #
        #error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
           #root   html;
       # }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           var/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
            include        fastcgi_params;
       access_log off;
        }

   # Bolster Add
   # Server static files derectly
   location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico)$ {
      rewrite ^/favicon.ico$ /sites/all/themes/mytheme/favicon.ico break;
   root /var/www;   
   expires      30d;
   access_log off;
   }

   # imagecache needs to have php read any files that it's planning to manipulate
   location ^~ /sites/default/files/imagecache/ {
      root /var/www;
      index  index.php index.html;
      # assume a clean URL is requested, and rewrite to index.php
      if (!-e $request_filename) {
         rewrite  ^/(.*)$  /index.php?q=$1  last;
         break;
           }
   }

   log_format  wwwlogs  '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" $http_x_forwarded_for';
   access_log logs/bargue-access.log  wwwlogs;
   error_log  logs/bargue-error.log  info;
   # Bolster add finish

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}


上面这个其实是从Drupal.org上抄的,自己改了改,支持Clean URL,ImageCache模块,不过无意间装了次Joomla,发现也可以完美支持,至少自己这里没有任何问题。
默认的fastcgi_params文件没有去动过。

安装eaccelerator缓存:
代码:
cd ~/apps
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar jxvf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3/
phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/bin/php-config
make
make install

还是老样子,把eaccelerator.so添加到php.ini配置文件中即可,当然需要设置一下:
代码:
mkdir -p /var/cache/eaccelerator #eaccelerator放缓存用

然后在php.ini添加eaccelerator.so,可以改成这样:
代码:
extension="eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


然后可以自己测试一下php了。

启动Nginx:
代码:
ulimit -SHn 51200
/usr/local/sbin/nginx


启动PHP-FPM:
代码:
/usr/local/sbin/php-fpm start


配置Nginx和PHP-FPM开机自启动:
代码:
vi /etc/rc.local

在末尾,可能会有个exit 0的,那么就放在exit那条上面了:
代码:
ulimit -SHn 51200
/usr/local/sbin/php-fpm start
/usr/local/sbin/nginx


重新载入nginx和php配置命令:
代码:
# 在不重新启动nginx的情况下重新载入nginx.conf文件
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
 # 在不重启php-fpm的情况下重新载入php.ini
/usr/local/sbin/php-fpm reload


配置日志轮循
web日志文件如果不进行定期的轮循备份处理,会越来越大,据说对以后的系统维护日志分析不好,设置nginx访问日志是每天4:38分进行定时切换的。以下是进行日志轮循的脚本:
代码:
#!/bin/bash
# This script run at 4:38
 # The Nginx logs path
logs_path="/usr/local/nginx/logs/"
 mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`


将这个脚本路径/usr/local/nginx/sbin /cut_nginx_log.sh,用 chmod +x cut_nginx_log.sh将其设置为可执行,使用 crontab -e 命令编辑系统定时任务,将下面这一句加入其中。其中的设置 38 4 * * * 表示本程序每天4点38分定时运行。
代码:
38 4 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh


还有Zend optimizer的安装,记得在询问是否使用Apache的时候选择no就可以了,然后把php-fpm重新加载一下就可以了:
代码:
wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
tar zxf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-x86_64
sh install #如果是远程终端安装还是用sh instal-tty


现在Nginx + PHP + MySQL跑是没有问题了,具体参数优化要自己去测试了。

有谁能给个Ubuntu详细的配置Postfix或者exim4的步骤呢,要那种不需要装Apache的,步骤越清楚越好,老是重装VPS系统真的很痛苦, :em20


_________________
浪荡哥哥狐狸羹


页首
 用户资料  
 
2 楼 
 文章标题 : Re: Ubuntu 810 上 Nginx + MySQL + PHP-FPM的配置笔记
帖子发表于 : 2009-09-07 0:02 

注册: 2009-09-06 18:59
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
不错 详细
php5.3 我安装成功了


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译