2007/02/01

freebsd 6.1 上安装 apache2+php5+mysql5

以前的安装笔记,简单整理了一下,还是有点乱。

一、安装mysql

要先安装mysql,如果在apache,php后面安装,会带来许多麻烦。

a.编译安装
# cd /usr/ports/databases/mysql50-server
# make WITH_CHARSET=latin1 WITH_COLLATION=latin1_general_ci WITH_XCHARSET=all BUILD_OPTIMIZED=yes BUILD_STATIC=yes WITHOUT_INNODB=yes WITH_PROC_SCOPE_PTH=yes SKIP_DNS_CHECK=yes

输入上面的语句它会给你提示下面的文字:

You may use the following build options:

WITH_CHARSET=charset Define the primary built-in charset (latin1).
WITH_XCHARSET=list Define other built-in charsets (may be 'all').
WITH_COLLATION=collate Define default collation (latin1_swedish_ci).
WITH_OPENSSL=yes Enable secure connections.
WITH_LINUXTHREADS=yes Use the linuxthreads pthread library.
WITH_PROC_SCOPE_PTH=yes Use process scope threads
(try it if you use libpthread).
BUILD_OPTIMIZED=yes Enable compiler optimizations
(use it if you need speed).
BUILD_STATIC=yes Build a static version of mysqld.
(use it if you need even more speed).
WITHOUT_INNODB=yes Disable support for InnoDB table handler.
WITH_ARCHIVE=yes Enable support for Archive Storage Engine.
WITH_CSV=yes Enable support for CSV Storage Engine.
WITH_FEDERATED=yes Enable support for Federated Storage Engine.
WITH_NDB=yes Enable support for NDB Cluster.

这下你知道我们加入BUILD_OPTIMIZED=yes BUILD_STATIC=yes的原因了吧,就是为了大幅提高mysql的性能。

# make install clean
# make rmconfig
(记住make rmconfig这个命令,以后重新编译ports时很重要,只有执行了它才会再次出现config界面的。)

如果在freebsd里面下载文件太慢,你可以通过windows多线程下载相应的编译所需要的文件包后,然后通过F-Secure SSH 的FTP方式直接上传到
/usr/ports/distfiles目录里,这样会大大节约编译时间。据我的经验,ports安装软件80%时间都浪费在fetch文件上了。

如果某个时候因为fetch太慢,你关掉了电脑,重新make install或上传新文件前,必须先进入/usr/ports/distfiles删除那些未下载完成的文件,否则再次ports抓取时会出错。


b.启动设置

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# ee /etc/rc.conf
mysql_enable="YES"

/usr/local/bin/mysql_install_db
chown -R mysql /var/db/mysql
##这一步一定不能少,否则mysql将启动不起来

缺少这两步将会导致出现:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

# /usr/local/share/mysql/mysql.server start
# /usr/local/etc/rc.d/mysql-server start

给mysql设置密码。
# /usr/local/bin/mysqladmin -u root password 'password'


二、安装apache

# cd /usr/ports/www/apache22

# ee Makefile

WITH_MPM?= worker

# make WITH_MPM=worker WITHOUT_IPV6=yes WITH_STATIC_SUPPORT=yes WITH_THREADS=yes WITHOUT_SSL=yes
# make install clean

安装完成后,
# ee /etc/rc.conf

增加下面的一行,让apache服务在系统启动时自动启动。

apache22_enable="YES"

apache启动
# /usr/local/sbin/apachectl start
可以在任何时候使用下面的命令来停止服务:

# /usr/local/sbin/apachectl stop
当由于某种原因修改了配置文件之后, 需要重启服务器:

# /usr/local/sbin/apachectl restart

如果想不停止httpd服务地重启服务器,则使用:

# /usr/local/sbin/apachectl graceful

查看一下apache的状态:
# httpd -l
core.c
worker.c
http_core.c
mod_so.c

修改默认的线程库,让mysql和apache 使用libthr.so线程库,这个线程库会大大提高你的apache.mysql的性能。

ee /etc/libmap.conf
[httpd]
libpthread.so.2 libthr.so.2
libpthread.so libthr.so
[mysql]
libpthread.so.2 libthr.so.2
libpthread.so libthr.so

附录:worker的工作原理及配置

  相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。

  在configure -with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd.conf中有以下配置段:


StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0


  worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

  MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。

  ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:

#define DEFAULT_THREAD_LIMIT 64
#define MAX_THREAD_LIMIT 20000

  这两行对应着ThreadsPerChild和ThreadLimit的限制数。最好在configure之前就把64改成所希望的值。注意,不要把这两个值设得太高,超过系统的处理能力,从而因Apache不起动使系统很不稳定。

  Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是 20000)。这两个值位于源码树server/mpm/worker/worker.c中的以下两行:

#define DEFAULT_SERVER_LIMIT 16
#define MAX_SERVER_LIMIT 20000

  需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且 MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值(可能是个非期望值)。下面是笔者的 worker配置段:


StartServers 3
MaxClients 1984
ServerLimit 31
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 64
ThreadsPerChild 64
MaxRequestsPerChild 0



  通过上面的叙述,可以了解到Apache 2.0中prefork和worker这两个重要MPM的工作原理,并可根据实际情况来配置Apache相关的核心参数,以获得最大的性能和稳定性。


三、安装PHP

a.基本安装
# cd /usr/ports/lang/php5
# make install clean

注意一定要选with apache模块。

另外千万不要选debug模块,否则会和zend冲突,导致zend用不了。

安装完成后
# ee /usr/local/etc/apache2/httpd.conf
最末尾处添加,

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

DirectoryIndex index.html index.html.var
添加索引index.php

顺便因为我们要用到rewrite,伪静态,所以也打开。

LoadModule rewrite_module modules/mod_rewrite.so
要打开。freebsd上默认已打开。

找到下面的配置段:
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride none

改为 AllowOverride all

OK。

另外通过ports安装的apache2.2.3,缺少打开的模块相当多,你可以将那些你不需要的模块加#注释掉。
关闭后会提高apache的运行速度。


cd /usr/local/etc/

四、安装 php扩展,这个是必须要装的。

# cd /usr/ports/lang/php5-extensions
# make
# make install FORCE_PKG_REGISTER=yes

会提示你选择编译选项,除默认的外,gd,mysql,mysqli,xml,gzip等是必须选择的。

在/usr/local/www/data目录下新建一个index.php文件


用于查看php是否已经安装成功。
浏览器中输入:
http://localhost/index.php

五、安装phpmyadmin 管理数据库

为了节省安装时间,这里选择手工安装,先下载软件包,然后解压,再复制到/usr/local/www/apache2/data 下面

大家注意,phpMyAdmin版本升级很快,可能你下载的版本与我下载的不一样,不能照搬。原理是一样的。

cd /usr/ports/databases/phpmyadmin/
make fetch
cd /usr/ports/distfiles
cp phpMyAdmin-2.9.0.2.tar.bz2 /usr/local/www/data
cd /usr/local/www/data
tar -zxvf phpMyAdmin-2.9.0.2.tar.bz2
mv phpMyAdmin-2.9.0.2 phpmyadmin
cd /usr/local/www/data/phpmyadmin/libraries

修改配置文件:
# ee config.default.php
找到
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed

配置授权类型(可选cookie和http,我选的是cookie),设置连接mysql数据库的用户名,密码。 // with 'config' auth_type)

再找到
$cfg['blowfish_secret'] = '';
这是程序要求的绝密套接字,随便设置什么字符都行的。


六、安装eaccelerator

cd /usr/ports/www/eaccelerator
make install clean

Then create the cache directory:

mkdir /tmp/eaccelerator
chown www /tmp/eaccelerator
chmod 0700 /tmp/eaccelerator

# ee /usr/local/etc/php.ini-recommended and add:

在php.ini中加入
extension=eaccelerator.so
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

ports安装后提示的应该在php.ini中加载zend_extension="/usr/local/lib/php/20050922-zts/eaccelerator.so"
是错误的。

注意如果同时安装eaccelerator和zend的,eaccelerator的配置信息应该在zend配置信息之前。

cp /usr/local/etc/php.ini-recommended php.ini
eaccelerator只能在php.ini中加载,而apache22却可以加载php.ini-recommended,
所以必须将php.ini-recommended改名一下。

apachectl restart
就可以看到eaccelerator已经成功加载了。

在我安装eaccelerator时,ports还是0.9.5.rc1 ,实际上正式版已经出来了,如果我们想通过ports安装正式版就要费一些周折了。
首先
ee Makefile
找到并修改为 DISTVERSION= 0.9.5

ee distinfo 去修改文件的md5和sha256值为
MD5 (eaccelerator-0.9.5.tar.bz2) = dad54af67488b83a2af6e30f661f613b
SHA256 (eaccelerator-0.9.5.tar.bz2) = 9118cda6f7a8013bb22621304f783ecb629fcc9c556f182e3caf0913dc7294cf

cd /usr/local/www/apache22/data/
ee index.php

你就会看到各种php信息

cd /tmp/eaccelerator
ls
你会看到产生了好些文件夹。祝贺你成功了。

我的apache刚刚安装结束后一个线程战胜的内存是6MB左右,安装php就达到13MB左右啦。安装这个eaccelerator呵呵,更巨大了。这个占用内在的值取决于
eaccelerator.shm_size="32",你在这儿设置的大小。

七、安装ZendOptimizer


可以从ports安装,也可以上传压缩包直接解压安装。
我们还是从ports进行安装,不过版权原因,仍然要求你自己上传压缩包文件。

# cd /usr/ports/devel/ZendOptimizer
# make install clean
===> ZendOptimizer-3.0.1_1 :
You have to fetch the binary distribution manually from the
http://www.zend.com/free_download/optimizer URL.
Download the file ZendOptimizer-3.0.1-freebsd6.0-i386.tar.gz,
and place it in /usr/ports/distfiles.
.*** Error code 1

# mv /home/wangjing/ZendOptimizer-3.0.1-freebsd6.0-i386.tar.gz /usr/ports/distfiles
# make install clean

Edit /usr/local/etc/php.ini and add:

[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer="/usr/local/lib/php/20050922-zts/Optimizer"
zend_extension_manager.optimizer_ts="/usr/local/lib/php/20050922-zts/Optimizer_TS"
zend_extension="/usr/local/lib/php/20050922-zts/ZendExtensionManager.so"
zend_extension_ts="/usr/local/lib/php/20050922-zts/ZendExtensionManager_TS.so"

chmod 777 /usr/local/www/apache22/data/bbs/

OK。WEB服务器我们就安装完成了。

没有评论: