2009年3月4日星期三

OpenBSD.Nginx.MySQL.PHP环境搭建手册

作者: young_king,  出处:博客, 责任编辑: 罗丽艳, 
2009-02-18 09:30
  所谓的O.N.M.P.是指OpenBSD、Nginx、MySQL、PHP(fastcgi),是利用OpenBSD及其软件包搭建的时下流行的MySQL+PHP应用环境,下面对主要的软件做下介绍……

  所谓的O.N.M.P.是指OpenBSD、Nginx、MySQL、PHP(fastcgi),是利用OpenBSD及其软件包搭建的时下流行的MySQL+PHP应用环境,下面对主要的软件做下介绍:

  [url=http://www.openbsd.org/]OpenBSD:可能是这个星球最安全的操作系统了,在十几年的时间里面只被发现了两个远程安全漏洞。

  [url=http://wiki.codemongers.com/Main]Nginx:来自俄罗斯的HTTP软件,据说性能达到老牌的 Apache十倍!并且极其节约资源,是单台服务器跑PHP应用的首选。官方文档声称能达到5W个并发连接,生产环境下单台双核2.33G服务器可以跑到 3W个并发连接(仅运行Nginx+PHP-fastcgi)。

  [url=http://www.mysql.com/]MySQL:老牌的开源数据库软件。

  [url=http://www.php.net/]PHP:这个几乎无人不知,和MySQL一起构成了开源环境下最强的建站组合。

  下面以[url=http://www.openbsd.org/44.html]OpenBSD 4.4为例进行讲解。按照惯例,root环境:

  一、软件环境的搭建

  OpenBSD的安装就不罗嗦了,重点是分区的部分,推荐/var/mysql、/var/log、/var/mail、/var/nginx这几个目录单独分区,并给予足够的空间。系统安装的最后询问是否默认启动Ssh服务时回答”n”。

  安装必须的软件包:

  [hide]

  export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/

  pkg_add wget mysql-server php5-fastcgi php5-gd-5.2.6-no_x11 php5-mysql phpMyAdmin lighttpd-1.4.19p3 nginx pecl-APC

  装完后按提示做连接并创建PHP工作目录:

  ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules

  ln -fs /var/www/conf/php5.sample/apc.ini /var/www/conf/php5/apc.ini

  ln -fs /var/www/conf/php5.sample/gd.ini /var/www/conf/php5/gd.ini

  ln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.ini

  ln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini

  ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini

  mkdir /var/www/tmp

  chmod 0777 /var/www/tmp

  mkdir /var/nginx/html/pma/

  cp -rf /var/www/phpMyAdmin/* /var/nginx/html/pma/

  vi /etc/login.conf


跳到最后,加入MySQL所需的修改:

  引用:mysql:\

  :openfiles-cur=2048:\

  :openfiles-max=4096:\

  :tc=daemon:

  使修改生效:

  cap_mkdb /etc/login.conf

  安装数据库:

  /usr/local/bin/mysql_install_db

  二、修改各软件的配置文件

  修改nginx的默认配置文件:

  vi /etc/nginx/nginx.conf

  增大nginx的并发连接数:

  引用:worker_connections 51200;

  加入对.php文件的支持:

  引用: location / {

  root /var/nginx/html;

  index index.php index.html index.htm;

  }

  (加入index.php)

  将下面这段前面的注释都去掉,改成:

  引用: location ~ \.php$ {

  root html;

  fastcgi_pass 127.0.0.1:9000;

  fastcgi_index index.php;

  fastcgi_param SCRIPT_FILENAME /var/nginx/html$fastcgi_script_name;

  include fastcgi_params;



}

  注意上面第五行,这个部分原来是/scripts,改成[color=blue]/var/nginx/html[/color]。

  其他的部分请酌情修改。

  修改MySQL的配置文件(或从/usr/local/share/mysql目录中拷贝合适的文件为/etc/my.cnf)。

  关于MySQL的配置和优化,网上有很多这方面的文章,可以自行Google,这里就不多讨论了。

  贴下偶的(总内存512M,MySQL使用256M,在my-large.cnf的基础上修改):

  在[mysqld]段增加或修改:

  引用:skip-innodb

  skip-networking

  max_connections = 600

  skip-bdb

  skip-name-resolve

  wait_timeout= 5

  保存退出。

  修改phpMyAdmin的配置文件,使之可用:

  vi /var/nginx/html/pma/config.inc.php

  将下面这行修改成:

  引用:$cfg['blowfish_secret'] = 'a'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

  (仅是加入了字母a而已)

  保存退出。

  三、系统启动脚本的修改

  修改系统启动脚本,使得MySQL、PHP(fastcgi)、Nginx可以在系统启动的时候自动启动,免去手动启动的麻烦。

  vi /etc/rc.local

  跳到最后,加入下面的部分:

  引用:rdate -n 210.72.145.44


# Start MySQL

  if [ -x /usr/local/bin/mysqld_safe ] ; then

  echo -n 'Starting MySQL...'

  su -c mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'

  echo "DONE"

  fi

  # Start php-fastcgi

  if [ -x /usr/local/bin/spawn-fcgi ] ; then

  echo -n 'Starting php-fastcgi...'

  /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www -f /usr/local/bin/php-fastcgi > /var/run/fcgi.pid

  echo "DONE"

  fi

  # Start nginx

  if [ -x /usr/local/sbin/nginx ] ; then

  echo -n 'Starting nginx...'

  /usr/local/sbin/nginx

  echo "DONE"

  fi

  保存退出。

  四、修改默认的SSH端口

  vi /etc/ssh/sshd_config

  在#PorT 22的下面新建一行,输入:

  引用:PorT 49813


 使得Sshd监听49813端口,以避免黑客扫描22端口。

  vi /etc/rc.conf.local

  增加一行,输入:

  引用:sshd_flags=""

  使得系统启动时启动Sshd服务。

  保存退出。

  reboot

  等系统重启完毕,用top命令看下,O.N.M.P.环境已经搭建好了!

  

  写在最后:

  终于明白了OpenBSD官方力推packages的原因!看看吧,步骤多么简单,无须下载软件源码,无须长时间的make && make install,很短的时间就可以搭建起时兴的O.N.M.P.环境,而且安全性有很高的保障!

  (xxx.xxx.xxx.xxx为你服务器的IP地址)。默认情况下MySQL的root用户是没有密码的,请第一时间设置!

  本文没有加入PF的部分,因为偶写了几个语句貌似执行起来都有问题,将偶挡在了外面,留待下一版手册中解决吧!



没有评论: