2009年5月30日星期六

FreeBSD笔记┊Ports部署apache2+php5+mysql5+ZendOptimizer(转)

转:http://www.coos.cn/article.asp?id=194

FreeBSD笔记┊Ports部署apache2+php5+mysql5+ZendOptimizer

其实咱学习freebsd的最终目的,也就是LAMP应用。但是我一直不赞成直接就去学习AMP的学习,而是先把L,也就是操作系统先玩懂,在去整服务,就明朗的多了。
所以现在接触freebsd半个月,我开始是潜心学习freebsd的相关系统管理,现在基本上算是弄懂了。所以可以开始来学习服务配置了,昨天星期天,花了一天的时间在家里研究,最后忙到另成2点左右,才终于配置成功。其实配置成功后,在回头看看其实原来这么简单。

一、系统准备
什么叫系统准备,前面不是已经学习怎么安装系统了吗?
但是专业的服务器是不需要安装那么多东西的,我们安装的时候就选择minimal安装,然后使用sysinstall安装scr内核,以及ports。
然后编译内核,去掉一些没用的东西。这个我还没学,稍晚一点再学习。
然后升级portstree,可以用portsnap或者cvsup,推荐使用portsnap,这个已经学习过了,可以看前面的笔记。

二、安装apache2.0
升 级ports目录树后,最新版的apache是2.2.9_5。本来我是想安装最新版的,但是公司用的是2.0,为了能够和公司同步,我在这里也安装 apache2.0。但其实2.2和2.0相差不大,而2.2安装的时候会启动make config,也就是一个类图形界面,可以手动选择需要的模块,这样更直观一点;apache 2.0却没有,如果需要设置模块,就要用参数来指定了。

现在来安装apache 2.0:
[root@bsd01 ~] cd /usr/ports/www/apache20
[root@bsd01 apache20] make install clean


但是安装完之后,竟然无法正常启动,虽然用
httpd -k start
apachectl start
/usr/local/etc/rc.d/apache2 start
这些命令启动的时候,都没有报错,但是
[root@bsd01 ~]# apachectl stop
httpd (no pid file) not running
竟然提示httpd没有运行。

我们来看看错误在那里:
[root@bsd01 ~]# cat /var/log/httpd-error.log | tail -f
[Mon Nov 17 13:28:07 2008] [error] [client 10.1.1.20] File does not exist: /usr/local/www/data/favicon.ico
[Mon Nov 17 13:28:08 2008] [error] [client 10.1.1.20] File does not exist: /usr/local/www/data/favicon.ico
[Mon Nov 17 13:28:09 2008] [error] [client 10.1.1.20] File does not exist: /usr/local/www/data/favicon.ico
[Mon Nov 17 13:28:29 2008] [notice] caught SIGTERM, shutting down
[Mon Nov 17 13:28:32 2008] [notice] Apache/2.0.63 (FreeBSD) configured -- resuming normal operations
[Mon Nov 17 13:28:44 2008] [notice] caught SIGTERM, shutting down
[Mon Nov 17 13:28:45 2008] [alert] (EAI 8)hostname nor servname provided, or not known: mod_unique_id: unable to find IPv4 address of "bsd01"
Configuration Failed
[Mon Nov 17 13:28:59 2008] [alert] (EAI 8)hostname nor servname provided, or not known: mod_unique_id: unable to find IPv4 address of "bsd01"
Configuration Failed


貌似是找不到hostname,所以我们编辑/etc/hosts文件:
[root@bsd01 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.my.domain
改成下面(也就是后面加上本机计算机名):
127.0.0.1 localhost localhost.my.domain bsd01

现在来启动测试,发现启动成功了:
[root@bsd01 ~]# apachectl start
[root@bsd01 ~]# fetch http://127.0.0.1
127.0.0.1 100% of 1517 B 161 kBps


三、安装php5
[1]. 先来安装php5:
[root@bsd01 ~]# cd /usr/ports/lang/php5
[root@bsd01 php5]# make install clean

然后会出现“make config”的界面,选择你需要的组件就可以,一般如下面所示:
Options for php5 5.2.6_2
───────────────────────────────────────
[X] CLI Build CLI version
[X] CGI Build CGI version
[X] APACHE Build Apache module
[ ] DEBUG Enable debug
[X] SUHOSIN Enable Suhosin protection system (not for jails)
[X] MULTIBYTE Enable zend multibyte support
[ ] IPV6 Enable ipv6 support
[ ] MAILHEAD Enable mail header patch
[ ] REDIRECT Enable force-cgi-redirect support (CGI only)
[ ] DISCARD Enable discard-path support (CGI only)
[X] FASTCGI Enable fastcgi support (CGI only)
[X] PATHINFO Enable path-info-check support (CGI only)


然后OK开始安装。

[2]. 配置apache以支持php:
[root@bsd01 ~]# vi /usr/local/etc/apache2/httpd.conf
加入如下2行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

另外看有没有下面这行,没有的话也加上:
LoadModule php5_module libexec/apache2/libphp5.so

然后找到下面这行,在后面加上index.php:
DirectoryIndex index.html index.html.var index.php


[3]. 安装php5扩展
[root@bsd01 ~]# cd /usr/ports/lang/php5-extensions
[root@bsd01 php5-extensions]# make install clean

然后会出现“make config”的配置界面,选择需要的组件就可以了,一般如下所示:
Options for php5-extensions 1.1
───────────────────────────────────────
[X] BCMATH bc style precision math functions
[X] BZ2 bzip2 library support
[X] CALENDAR calendar conversion support
[X] CTYPE ctype functions
[X] CURL CURL support
[ ] DBA dba support
[ ] DBASE dBase library support
[X] DOM DOM support
[X] EXIF EXIF support
[X] FILEINFO fileinfo support
[X] FILTER input filter support
[ ] FRIBIDI FriBidi support
[X] FTP FTP support
[X] GD GD library support
[X] GETTEXT gettext library support
[ ] GMP GNU MP support
[X] HASH HASH Message Digest Framework
[X] ICONV iconv support
[X] IMAP IMAP support
[ ] INTERBASE Interbase 6 database support (Firebird)
[X] JSON JavaScript Object Serialization support
[X] LDAP OpenLDAP support
[X] MBSTRING multibyte string support
[X] MCRYPT Encryption support
[X] MHASH Crypto-hashing support
[ ] MING ming shockwave flash support
[ ] MSSQL MS-SQL database support
[X] MYSQL MySQL database support
[ ] MYSQLI MySQLi database support
[ ] NCURSES ncurses support (CLI only)
[ ] ODBC unixODBC support
[X] OPENSSL OpenSSL support
[ ] PCNTL pcntl support (CLI only)
[X] PCRE Perl Compatible Regular Expression support
[X] PDF PDFlib support (implies GD)
[X] PDO PHP Data Objects Interface (PDO)
[X] PDO_SQLITE PDO sqlite driver
[ ] PGSQL PostgreSQL database support
[X] POSIX POSIX-like functions
[ ] PSPELL pspell support
[ ] READLINE readline support (CLI only)
[ ] RECODE recode support
[X] SESSION session support
[ ] SHMOP shmop support
[X] SIMPLEXML simplexml support
[X] SNMP SNMP support
[ ] SOAP SOAP support
[X] SOCKETS sockets support
[X] SPL Standard PHP Library
[X] SQLITE sqlite support
[ ] SYBASE_CT Sybase database support
[ ] SYSVMSG System V message support
[ ] SYSVSEM System V semaphore support
[ ] SYSVSHM System V shared memory support
[ ] TIDY TIDY support
[X] TOKENIZER tokenizer support
[ ] WDDX WDDX support (implies XML)
[X] XML XML support
[X] XMLREADER XMLReader support
[ ] XMLRPC XMLRPC-EPI support
[X] XMLWRITER XMLWriter support
[X] XSL XSL support (Implies DOM)
[ ] YAZ YAZ support (ANSI/NISO Z39.50)
[X] ZIP ZIP support
[X] ZLIB ZLIB support


这个安装过程比较长,需要耐心等待。
至此,apache+php基本上算是配置成功了。“apachectl restart”重启一下。然后去下载个php探针去测试一下。


四、安装mysql5
[1]. mysql5的安装
安装过程很简单,因为前面我们安装php组件的时候,它自动给我们安装了mysql-client5.0,所以我们server也安装5.0好了:
[root@bsd01 ~]# pkg_info | grep mysql
mysql-client-5.0.67_1 Multithreaded SQL database (client)
php5-mysql-5.2.6_2 The mysql shared extension for php
[root@bsd01 ~]# cd /usr/ports/databases/mysql50-server
[root@bsd01 mysql50-server]# make install clean

* 不过这样安装的mysql不支持gb2312,gbk等编码,查询会出错。可以使用“make WITH_XCHARSET=all install clean” 的安装命令来释放其他的编码支持。如果使用“make WITH_CHARSET=gb2312 WITH_XCHARSET=all install clean”这样的安装命令,则表示把释放所有编码支持并设置gb2312为mysql的默认编码,一般来说是不可取的,除非你真的决定想这么做!

[2]. mysql5配置过程
不要以为上面的安装完之后,mysql-server就可以使用了,其实会出故障的:
[root@bsd01 ~]# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

我就是被这个问题搞了我2天都没解决,现在开始配置:
[root@bsd01 ~]# cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf
[root@bsd01 ~]# /usr/local/bin/mysql_install_db --user=mysql
[root@bsd01 ~]# /usr/local/bin/mysqld_safe --user=mysql &
[1] 74754
[root@bsd01 ~]# mysqladmin -u root pqssword '123456'

[root@bsd01 ~]# ps -ef | grep mysqld
ps: Process environment requires procfs(5)
74754 p5 I 0:00.08 /bin/sh /usr/local/bin/mysqld_safe --user=mysql
74780 p5 S+ 0:00.02 grep mysqld
[root@bsd01 ~]# kill -9 74754
[1]+ Killed: 9 /usr/local/bin/mysqld_safe --user=mysql
[root@bsd01 ~]# /usr/local/etc/rc.d/mysql-server start
[root@bsd01 ~]# pgrep mysqld
74775
[root@bsd01 ~]# mysql -u root -p
Enter password:123456
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.67-log FreeBSD port: mysql-server-5.0.67_1

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


五、为php配置ZendOptimizer
ZendOptimizer可以为php的解析加速,听说可以提高40%-100%的执行速度。所以一般php都会加载这个,现在我们来配置:
[root@bsd01 /]# cd /usr/ports
[root@bsd01 ports]# make search key=^Zend
Port: ZendOptimizer-3.3.0.a
Path: /usr/ports/devel/ZendOptimizer
Info: An optimizer for PHP code

[root@bsd01 ports]# cd /usr/ports/devel/ZendOptimizer
[root@bsd01 ZendOptimizer]# make install clean


这样就可以安装完成了,然后会有提示,在php.ini加入如下文字:
[root@bsd01 ~]# vi /usr/local/etc/php.ini
在最后加入如下文字:

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

然后重启apache服务:
[root@bsd01 ~]# apachectl stop
[root@bsd01 ~]# apachectl start


六、让freebsd自动启动apache+mysql服务
至此,apache+php+mysql已经配置成功了,现在我们配置让freebsd能够在开机的时候自动运行这些服务。
[root@bsd01 ~]# vi /etc/rc.conf
加入如下2行:
apache2_enable="YES"
mysql_enable="YES"

另如果你在手动启动apache的时候,经常提示:
[Wed Nov 26 22:05:59 2008] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter

那是因为apache无法开始Accept Filter机制。
则可以在/boot/loader.conf加入“accf_http_load="YES"”即可:
[root@bsd01 ~]# echo 'accf_http_load="YES"' >> /boot/loader.conf


结语:
至此,freebsd7.0下的apache2+php5+mysql5+ZendOptimizer3就已经完满成功了,这里花了我2天多时间的研究。网上很多的教程都是比较不切实际,所以最重要的还是自己实践。
其中最麻烦的就是mysql数据库了,稍微不注意就出现那个/tmp/mysql/sock的错误,很烦,而且网上也找不到具体的解决办法。根据经验,一般是mysql数据库没有启动起来,可以使用“pgrep mysqld”来看看进程有没有启动。
如果没有,可尝试先用“mysql_install_db --user=mysql”,然后再用“mysqld_safe &”来启动,然后重启电脑。

还就是比较烦freebsd的就是我发现如果用“apachectl、mysql-server”这些服务命令执行start|restart命令的时候,经常是服务没启动,但是也不报错,有时候想骂人。所以最好把mysql加在/etc/rc.conf里让它自己启动。
apache 重启的时候,也最好不要用“apachectl restart”,还是依次用“apachectl stop”;"apachectl start"来使用,最后别忘了用“pgrep httpd”来看一下有没有正常启动。没办法,好像freebsd下的apache+mysql有点不保险,所以我们要处处留意。

没有评论: