Ubuntu 8.04 Linux + Apache2 + MySQL5 + PHP + Tomcat5.5 整合安装
从去年3月份开始,先是尝试了Ubuntu6.06 TLS,随后又用了Ubuntu7.04以及Ubuntu7.10,每次都是重新安装,体验着每个版本带来的喜悦。
而今年4月份,又一个TLS版本Ubuntu8.04 Hardy Heron,可以看作是又一个里程碑。于是下定决心要把开发平台有WAMP转向LAMP。
历经4天多的安装与配置(中间居然碰到Ubuntu的内核升级,还重装了一次),终于还是把开发平台给搭建了起来,兴奋之余把安装配置的经过贴上来,以俟后来人参考。
0. 安装与配置Ubuntu Linux
这个就不再赘述了,只是要记得在安装后更新软件源。还有问题的话,http://forum.ubuntu.org.cn上面有漫天繁星般的安装参考帖。
根据Windows下整个jsp与php的经验,接下去大体上分两步走,第一步安装经典的php环境(AMP),第二步再想办法把jsp运行环境整合进去。
1. 安装与配置AMP
1.1 先看了看网上的许多文章,说是要用源文件编译安装...我就晕了,其实根本不需要这么复杂,Ubuntu区别于其他Linux的好处就在于软件包的强大管理能力。然而在真正装上了之后,我才彻底臣服于Ubuntu脚下。
在新立得中,编辑菜单 → 使用任务分组标记软件包 → 选择 LAMP Server,然后应用所作的更改,LAMP环境就这样OK了!天知道我在Windows下要安装多少时间!
1.2 用新立得获取phpMyAdmin,或者直接sudo apt-get install phpmyadmin。不过这好像没什么用,因为装了之后,用http://localhost/phpMyAdmin无法访问,结果还是从Windows下面把我原来的那个phpMyAdmin复制过来才好用。
1.3 启用 mod_rewrite 模块
sudo a2enmod rewrite
sudo a2enmod rewrite
1.4 让apache支持.htm .html .php
sudo gedit /etc/apache2/apache2.conf
在文件后面加上
AddType application/x-httpd-php .php .htm .html
sudo gedit /etc/apache2/apache2.conf
在文件后面加上
AddType application/x-httpd-php .php .htm .html
安装与配置大致上到这里就结束了,有一些问题下面要小结一下。
1.5 安装的一些目录
由于使用新立得进行的安装,系统会将AMP安装到如下的位置
Apache2 /etc/apache2
MySQL /etc/mysql
PHP /etc/php5
1.6 相关的配置文件
1.6.1 Apahce2相关
在Windows下,Apache2的配置就是简单的一个在conf目录下的httpd.conf文件,而现在/etc/apache2目录下有数个配置文件,其中httpd.conf居然还是空白的文件!不必恐慌,Apache2会首先读取apache2.conf,而只要仔细看一下apache2.conf就知道了,它里面Include了很多配置文件,包括了httpd.conf以及其他的几个文件与目录,所以可以把apache2.conf看成是一个主配置文件。这其实也集中反映了Unix的理念吧,即把大的问题划分成若干小的问题来各个击破。
1.6.2 PHP相关
看过Apache2的配置后,会发现PHP的配置和Windows下的几乎没有什么太大的区别,只要搞透那个php.ini文件就没有不成功的理由了。
提醒一点,在php.ini中搜索date.timezone,将前面的;去掉,修改成date.timezone = PRC,亦即把时间解析为中华人民共和国,我爱中国!~
1.7 几条重要的命令
启动Apache2 $ sudo /etc/init.d/apache2 start
停止Apache2 $ sudo /etc/init.d/apache2 stop
重启Apache2 $ sudo /etc/init.d/apache2 restart
另外提一点,在更新了Apache2等相关配置后,一定要记得restart一下Apache2,注意是restart,有文献记载用stop+start可能会无法加载新的配置。
1.8 几个问题的小结
1.8.1 在重启Apache2后如果出现:
* Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
* Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
sudo gedit /etc/apache2/apache2.conf
在文件后面加上:
在文件后面加上:
#Server Name
ServerName 127.0.0.1
1.8.2 提示是否下载PHP文件且无法正常解析php的解决方法
如果当您浏览PHP网页的时候,浏览器提示您是否下载PHP文件而不是去显示它的时候,就可能是您没有安装libapache2-mod-php5。当您安装PHP5的时候,它会被默认的安装进去的,如果您不小心的将它遗忘了。您就需要去将它打开,sudo a2enmodphp5,然後使用sudo /etc/init.d/apache2 restart来重新启动Apache2。
1.8.3 运行phpMyAdmin,提示Wrong permissions on configuration file, should not be world writable!
将phpmyadmin权限由777改成755,即把所有文件的组和其他用户的写权限全部去掉才行,尤其是config.inc.php。
还有注意访问phpMyAdmin是要用http://localhost/phpMyAdmin,注意大小写的区别要完全符合目录,而不能像Windows下,用http://localhost/phpmyadmin也可以访问。
1.8.4 更改网站所在目录
sudo gedit /etc/apache2/sites-available/default
将其中的两处/var/www/改成所需要的目录位置,重启apache2即可。
将其中的两处/var/www/改成所需要的目录位置,重启apache2即可。
如果只是要开发php的话,到这里就可以了,下面阐述如何将Tomcat整合到Apache2。
2. 整合Apache2与Tomcat
2.1 用新立得搜索并安装如下软件包
jdk、tomcat与mod_jk
注意:
(1) jdk强烈推荐安装的,因为毕竟除了开发php、jsp,还需要用eclipse开发单机版的Java程序,所以是强烈推荐安装的,另外还可以安装Java的demo和source等等相关内容
(2)Tomcat就选择5.5版本就好,其实也没啥原则性的问题,mod_jk是用来连接apache与tomcat的模块。一说apache2和tomcat6可以不需要此模块,而采用proxy即可实现两个解析器的协同工作,有兴趣的可以查一下。以下过程以mod_jk为准。
2.2 设置环境变量
sudo gedit /etc/profile
添加如下内容
#JDK所在目录,这个也烦恼了我半天,因为网上的介绍中大多采用编译安装,而如果用新立得安装的话,JDK的默认目录就是这个,而JRE则处在这个目录下的/jre中,这个路径结构和Windows下有些不同。
export JAVA_HOME=/usr/lib/jvm/java-6-sun #相当于C:\Program Files\Java\jdk1.6.0_05
#这个变量其实不设置也可以,只是为了显示新立得安装后的目录相对结构罢了。
export JRE_HOME=$JAVA_HOME/jre #相当于C:\Program Files\Java\jre1.6.0_05
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/etc/tomcat5.5
注销后重新登陆,然后在终端中测试 $ echo $JAVA_HOME,有输出的话就说明设置成功。
2.3 校对Apache2启用的模块
sudo ls /etc/apache2/mods-enabled/
请校对,并确保至少已启用如下模块
cgi.load php5.conf proxy.conf rewrite.load
userdir.load jk.load php5.load proxy.load
userdir.conf
如果发现有哪个模块缺失的话,到/etc/apache2/mods-available/下寻找,创建链接并放到/etc/apache2/mods-enabled/下,最好命名成链接所指向的文件名。
2.4 Apache2与Tomcat5.5协同工作的配置文件
在/etc/apache2/conf下新建两个配置文件 mod_jk.conf 和 workers.properties
在mod_jk.conf中添加如下
# 指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /etc/apache2/conf/workers.properties
JkWorkersFile /etc/apache2/conf/workers.properties
# Where to put jk logs
#JkLogFile /usr/local/apache2/logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
#JkLogFile /usr/local/apache2/logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
JkRequestLogFormat "%w %V %T"
# 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1
JkMount /servlet/* worker1
JkMount /*.jsp worker1
在workers.properties中添加如下
# Defining a worker named worker1 and of type ajp13
worker.list=worker1
worker.list=worker1
# Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
2.5 更新Apache2中的配置
配置ports.conf,将Listen 80 修改为 Listen 127.0.0.1:80
配置apache2.conf,将ServerName 127.0.0.1 改为 ServerName localhost:80
配置httpd.conf,设置如下内容
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.html.var index.php index.jsp
配置apache2.conf,将ServerName 127.0.0.1 改为 ServerName localhost:80
配置httpd.conf,设置如下内容
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.html.var index.php index.jsp
#LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
Include /etc/apache2/conf/mod_jk.conf
2.6 更新Tomcat配置
修改tomcat配置文件server.xml
用<!-- -->屏蔽掉一下内容
<!--<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">-->
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">-->
并替换成
<Host name="amoyrico" appBase="/var/www"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"
workDir="/var/www/work">
<Context privileged="true" crossContext="true" docBase="htdocs" path="/" reloadable="true">
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="/www/var/logs" prefix="access_log." suffix=".log" pattern="combined" resolveHosts="false"/>
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"
workDir="/var/www/work">
<Context privileged="true" crossContext="true" docBase="htdocs" path="/" reloadable="true">
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="/www/var/logs" prefix="access_log." suffix=".log" pattern="combined" resolveHosts="false"/>
其中/var/www应当根据1.8.4更换成所需的网站所在目录,而其中的workDir以及logsDir都应作相应调整
2.7 Tomcat相关问题
2.7.1 重启Tomcat服务器
sudo /etc/init.d/tomcat5.5 restart
至此,php+jsp的开发平台已经搭建完毕。
参考文档
1.http://blog.163.com/yaozekun_999/blog/static/2572236120071168531115/
2.http://forum.ubuntu.org.cn/viewtopic.php?p=628489
3.http://hi.baidu.com/toicine/blog/item/3785ed31154c0a1aebc4af00.html