资源描述
RedHat Linux网络服务器构架实务
2002-02-06 17:14:00· 赵凤君· Yesky
前言
这里我将说明本文档的书写动机、配置目标、主要内容、遵循原则和使用说明。
我主要的从事领域是网络开发,主要采用的技术方案是FreeBSD/Linux+MySQL/Oracle+JavaBean/EJB+Jsp,也就是所说的四层结构(也有人认为是三层结构,但在J2EE中添加了界面层的概念)。项目开发过程中,常常需要进行服务器的构架,每次配置完毕我都会写一份简单的配置文档作为项目技术文档的一部分。这份文档是我一次次配置的结晶,我将构建网路服务器常用的部分写进了本文档,其一可以作为初学者的安装向导,其二也可以听取大家的意见和建议,使之更加严谨和完善。
本文档的目标是构架一个比较规范的RedHat开发服务器作为项目的开发环境。本文档当前共十七个步骤,简明而全面的介绍了DNS、FTP、 MySQL、Apache 、JVM、 Resin、 PHP等服务器的配置办法。
下面是我书写本文档所遵循的几个原则:
1、力求简明:去除任何多余的步骤;让命令说话,只加必要的注释,这样方便大家作为配置清单使用。本文档主要告诉读者如何去做,很少说明为什么这样做(这一点在本版本中有所改善),但需要注意的是,如果您忽略了其中的任何一步都可能导致后面出错;
2、系统全面:步骤贯穿从安装操作系统到配置完成的全过程,初学者一步一步照做即可;服务器的配置是一个系统的过程,很多说明文档只是说明某几个软件的配置方法,没有统筹兼顾,所以照搬往往失败;
3、力求严谨:这是我的一个目标,也是我发布原因之一,当然这需要大家的检验才能实现;
4、保持最新:包括操作系统在内,所有的软件都是截止到文档发布日的最新版本,如果有新的软件版本出现,我也会努力做到及时更新;
5、精选软件:文中提及的软件都是大家所熟悉的,只有两个需要说明。其一:为什么不选择FreeBSD而用Redhat?FreeBSD可谓是Intel平台上最好的网络操作系统,但它对JAVA(尤其是新版本的JDK)的支持很差,我曾在较长一段时间内采用FreeBSD作为JAVA开发平台,然而由于SUN并没有发布FreeBSD上的JDK,所以经常造成系统崩溃,已经是多次的经历了;为什么不用Tomcat而使用Resin?虽然Tomcat是Apache组织的一个项目,虽然它也在不断完善起来,但较之Resin还是有一定的差距;Resin在中文支持、执行效率、可定制性、升级速度、支持J2EE等方面都有不俗的表现,也是我个人已经体会到的;虽然我怀疑它在高端应用、系统负载等方面的性能,但应付中小型的Web项目方面应该是绰绰有余的;
6、侧重JSP:以搭建JSP开发环境为主,可以作为JSP初学者的服务器配置手册:其一:RH7.2增强了多语言的支持,如果你在安装的过程中选择语言时选择了i18n的简体中文包,加上Resin对中文的良好支持,你无需声明Content-Type(任何方式的声明都不需要),中文将自动支持,这一点文档中也已说明;其二:提供了Resin连接池的配置方法和调用方法,并提供了一个用于数据库连接和处理的组件;其三:提供了添加一个JSP虚拟主机的详细方法,从DNS E到Resin全面讲述;其四:指出了JDBC2.0的支持办法,并提供代码进行测试;
7、编译安装:软件全部编译安装,有益于系统可定制性和系统稳定性;
8、目标读者:Linux初学者的配置向导和中高级读者的参考;
9、配置目标:本文档当前最适合作为企业内部开发服务器的配置手册,如果作为Internet服务器,需要考虑的安全因素还很多,最起码不能全部安装,也不需要安装X server,Internet 服务器不仅需要我文档中提及的功能,更需要一个简洁安全的系统;
10、功能清晰:我将服务器定位在一个DNS+p构架的Web开发服务器,而将可有可无的服务去掉。所以,文档中没有提及QMAIL、ORACLE和ASP、FrontPage扩展等配置方法。除了功能的分离和读者的需求之外,Oracle的最佳运行平台是SUSE Linux,ASP的最佳运行平台是NT,至于Qmail,后续版本可以增加进去;
以下是本文档的使用说明:
1、颜色说明:
深蓝色: 在原文文档中修改的或者添加的部分
深绿色: 我的注释
2、符号说明
#: 系统或者软件配置文档中原有的注释;
##: 我为随后段落做的说明
//: 我的行末说明
/*…*/:篇幅较长的说明
3、命令说明:
我习惯使用vi来表示编辑一个文件,如果不喜欢使用这个工具,你完全可以使用Advanced Editor之类的可视化编辑器或者mc等其他命令。
偶尔我会在命令之前加上shell>表示这是一个命令,以与文件内容区别开来,但这个版本是中文的,所以我一般不加该符号。
make 和make install是可以使用make;make install替代的,但为了便于查看每一步的提示信息,建议分开执行。
. /在文中很多地方出现,中间没有空格,而且点号也不明显,需要注意。
软件列表
下载下面的软件并将它们放到/home/src目录。首先要创建一个系统帐户,然后将软件放到该目录下。下面的软件都将在本文档中用到,下面的连接都是截止到01/18/2002的最新版本:
RedHat 7.2
mysql-3.23.47.tar.gz
mm.mysql-2.0.4-bin.jar
apache_1.3.22.tar.gz
php-4.1.1.tar.gz
j2sdk-1_3_1_01-linux-i386.bin
jaf1_0_1.zip
javamail1_1_3.zip
resin-2.0.5.tar.gz
phpMyAdmin-2.2.3-php.tar.gz
配置步骤
Step 1 RedHat 7.2 install
我的建议:
1、安装时为/home建立单独的分区,因为/home是用户数据的存放之地,本文档中也将软件的安装文件都放到这个目录下,所以,这样做当你下次重新安装系统的时候,可以保留该分区,数据也就得以保全;
2、采用定制安装的方式并选中'Everything'选项,这样特别适合于初学者,否则后面的安装过程中可能会出现找不到某个包或某个命令的情况;但如果是配置Internet服务器,就应该只选择必需的包,做到尽量的精简才够安全;
3、选择语言时,建议选中simplified chinese(P.R.CHINA)选项,这样,当你配置好服务器的时候,在程序代码中无需任何声明,中文将被支持而不会乱码;
4、使用Gnome做为登陆管理器,使用KDE作为默认的Session,设置默认启动到X,这样做的目的是为了方便远程控制;
5、IP: 192.168.1.2,这是我在本文档中使用的IP,这个可以自行设置。
6、文档中我没有涉及到防火墙的设置,系统安装完成后你可以使用ntsysv或者chkconfig命令将iptables和ipchains两个服务禁用掉,否则会导致telnet和远程登陆等无法使用;
当然,如果您熟悉防火墙设置,可以自行处理。
Step 2 X setup
##这一步完成后,重启服务器,然后你就可以使用Extra!X等远程控制软件以图形界面在微软平台上进行服务器配置,这样做的好处是可以同时控制服务器端和客户端,不必奔走在两台机器之间。如果你按照下面的设置不能进行远程控制,那么,很有可能你的防火墙策略不允许这样做,禁用掉iptables和ipchains就可以了。
vi /etc/X11/gdm/gdm.conf //启用远程控制
[xdmcp]
Enable=1
vi /etc/X11/gdm/Sessions/Default //设置默认Session
exec /etc/X11/xdm/Xsession kde
vi /etc/X11/xdm/Xaccess //设置广播对象
192.168.1.*
Step 3 Services setup
Shell> ntsysv
运行ntsysv命令启用named 、telnet 和 wu_ftpd 服务,禁用httpd 、mysqld、iptables和ipchains 服务和其他一些不需要的服务,然后用reboot重启服务器。
Step 4 Dns setup
vi /etc/named.conf
1 创建标准区域
##你可以根据你的喜好来命名,这里我使用的后缀是.loc,主要是为了避免和Internet已经注册的域名相冲突,你可以自行决定你的后缀。
##添加下面的文本到 /etc/named.conf
zone yesgo.loc{
type master;
file "yesgo.loc";
}
zone 1.168.192.in-addr.arpa{
type master;
file "192.168.1";
}
2 创建域名库文件
touch /var/named/yesgo.loc
touch /var/named/192.168.1
##编辑正向域名库文件,建立主机名和主机别名
vi /var/named/yesgo.loc
@ IN SOA ns.yesgo.loc. root.ns.yesgo.loc. (
2001050801 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yesgo.loc.
IN MX 0 ns.yesgo.loc.
ns IN A 192.168.1.2
ftp IN CNAME ns.yesgo.loc.
mail IN CNAME ns.yesgo.loc.
pop IN CNAME ns.yesgo.loc.
smtp IN CNAME ns.yesgo.loc.
##编辑反向域名库文件,建立主机名指针
vi /var/named/192.168.1
@ IN SOA ns.yesgo.loc. root.ns.yesgo.loc. (
2001050801 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.yesgo.loc.
IN MX 0 ns.yesgo.loc.
2 IN PTR ns.yesgo.loc.
3 重新启动DNS服务
/etc/rc.d/init.d/named restart
4 域名查询
##测试域名是否解析成功,这是一个交互式的命令行,你可以输入域名或者IP地址进行正向和反向查询nslookup -sil
Step 5 KDE setup
这一步是可有可无的,因为你完全可以不去理会而直接使用默认界面。一般的做法是先根据KDE配置向导进行总体设置,然后再使用KDE控制中心进行详细配置,在此不多介绍。需要提的一点是你可以通过KDE Control Panel 中的Windows Manager来设置默认Session,当然也可以通过配置文件来实现这一点。
Step 6
vi /etc/shells
##添加下面一行到/etc/shells,将作为FTP用户的shell,使其不能使用命令和telnet服务/dev/null
## 增加组,该组中的用户将以自己的home目录作为FTP根目录
groupadd
## 添加FTP用户,该类用户只能使用FTP服务,且以自己的home目录为根目录
useradd src -s /dev/null -g //本帐号用来存放软件包
passwd src
/*
我习惯将软件包放到自定义的/home/src目录,主要目的还是上面提到的数据保全和软件上传问题,如果放到/usr/local/src目录,这两点也能实现但不方便,如果你习惯将软件包放到/usr/local/src,你可以删除/usr/local/src然后为/home/src建立一个符号连接。
*/
rm -R -f /usr/local/src
ln -s /home/src /usr/local/src
Step 7 MySQL、Apache and php Unistall
使用Package管理器或者rpm命令卸载MySQL、Apache和PHP,建议初学者使用Package管理器,分别查找这三个关键词直到将所有相关的软件包都卸载干净。我们接着会编译安装这些软件。
Step 8 MySQL install
1 准备用户
userdel mysql
useradd mysql -s /dev/null -g
passwd mysql
2 安装MySQL
cd /home/src
tar xvzf my* //解包
cd my*
./configure --prefix=/usr/local/mysql //配置
make //编译
make install //安装
./scripts/mysql_install_db //建库
3 修改文件夹权限
##下面修改相关文件夹权限,否则MySQL服务不能启动,或者说你对数据库没有写权限
chown -R root /usr/local/mysql
chgrp -R mysql /usr/local/mysql
chown -R root /usr/local/mysql/bin
chgrp -R mysql /usr/local/mysql/bin
chown -R root /usr/local/mysql/var
chgrp -R mysql /usr/local/mysql/var
chmod 770 /usr/local/mysql/var
chown -R root /usr/local/mysql/var/mysql
chgrp -R mysql /usr/local/mysql/var/mysql
chmod 770 /usr/local/mysql/var/mysql
chown -R root /usr/local/mysql/var/mysql/*
chgrp -R mysql /usr/local/mysql/var/mysql/*
chmod 770 /usr/local/mysql/var/mysql/*
chmod 770 /usr/local/mysql/lib/mysql/libmysqlclient.a
4 重新加载动态库
##因为我们采用自定义编译安装的方式,所以跟系统原先定义的库位置不一样,现在我们重新指定它并重新加载vi /etc/ld.so.conf
#添加下面一行
/usr/local/mysql/lib
shell>ldconfig //重新加载动态库
5 测试MySQL
cd /usr/local/mysql
./bin/safe_mysqld --user=mysql & //启动MySQL服务
mysqladmin -u root -p password 'your_password' //更改用户密码
mysql -p //开始使用
6 创建启动脚本
##创建MySQL服务,使之在系统启动时自动启动
cd /etc/rc.d/init.d
touch mysqld
vi mysqld
##文件内容如下:
#!/bin/bash
#Start MySQL service
cd /usr/local/mysql
./bin/safe_mysqld - -user=mysql&
##改变该脚本的权限,否则系统启动时会说由于没有执行权限而启动失败
chown -R root /etc/rc.d/init.d/mysqld
chmod 700 /etc/rc.d/init.d/mysqld
##将此服务连接到init 5,如果你使用init 3启动机器,连接到rc3.d即可,60代表启动的次序,S要大写
ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/S60mysqld
Step 9 Apache install
1 安装Apache
cd /home/src
tar xvzf apa* //解包
cd apa*
./configure --prefix=/usr/local/apache --enable-module=so //设置编译参数
make //编译
make install //安装
2 建立符号连接
##为启动程序建立符号连接,便于以后重启服务
ln -s /usr/local/apache/bin/apachectl /usr/bin/apache
3 编辑配置文件
## 设置默认页面,中间用空格分开
DirectoryIndex index.html index.jsp index.xtp index.php index.php3
4 测试Apache
Shell>apache start
lynx http://localhost
##如果出现Apache的文档页面,表示安装成功。
5 创建启动脚本
##创建Apache服务
touch /etc/rc.d/init.d/httpd
vi /etc/rc.d/init.d/httpd
## 文件内容如下:
#!/bin/bash
#Start httpd service
/usr/local/apache/bin/apachectl start
##设置文件权限
chown -R root /etc/rc.d/init.d/httpd
chmod 700 /etc/rc.d/init.d/httpd
##连接到你默认init 级别的所在目录
ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S65httpd
Step 10 Php install
## 本版本中我采用的是DSO安装模式,这样当你升级PHP的时候就无需重新安装Apache
1 安装PHP
cd ..
tar xvzf php*
cd php*
./configure --with-mysql=/usr/local/mysql --with-apxs=/usr/local/apache/bin/apxs --enable-track-vars --enable-sockets --enable-ftp //设置PHP编译参数
make //编译
make install //安装
cp ./php.ini-dist /usr/local/lib/php.ini //复制配置
文件到/usr/local/lib
2 配置Apache
vi/usr/local/apache/conf/httpd.conf //配置Apache支持PHP
## 以php为关键词查找到如下几行,去掉前面的注释符号
# AddType application/x-httpd-php .php
# AddType application/x-httpd-php .php3 //本行需要自行添加,用来 支持PHP3
# AddType application/x-httpd-php-source .phps
#重新启动Apache
apache restart
Step 11 Jvm setup
cp /home/src/ j2sdk-1_3_1-linux-i386.bin /usr/local
cd /usr/local
chmod a+x j2sdk-1_3_1-linux-i386.bin
##下面的指令是一个脚本,它先要问你是否同意,输入Y,然后它会自行安装
./j2sdk-1_3_1-linux-i386.bin
##为当前的JDK版本建立一个符号连接,这样做的目的是将来如果有新的版本安装到系统上,可以将新的目录连接为/usr/local/jvm,这样就无需修改很多配置文件
ln -s /usr/local/jdk1.3.1_01 /usr/local/jvm
Step 12 Classes Install
##这个步骤是我的一个习惯,如果不做JAVA或者JSP开发可能不需要这一步,这个步骤的目的是设置一个放置自己JAVA类库的主目录,然后在此主目录下建立子目录分别存放不同种类的类文件。
##这里需要探讨的是MySQL的驱动程序。大家可以看到我下面使用的仍然是mm驱动,有网友建议我使用resin自带的驱动,我到caucho的站点上看到caucho声明它的驱动比mm驱动快很多,并附有相关数据;然而我测试的结果是resin驱动在rs跳转时除了rs.next()其他的rs.previous();、rs.first();和rs.last();都没任何作用,所以我仍然使用mm.mysql-2.0.4-bin.jar.zip 。
##创建类库主目录
mkdir /usr/local/lib/java
##下面安装MySQL的JDBC驱动,这个驱动是支持JDBC2.0的
mkdir /usr/local/lib/java/drivers
cp /home/src/mm.mysql-2.0.4-bin.jar.zip /usr/local/lib/java/drivers //MySQL driver
##下面安装JAF,需要说明的是,下载的jaf包是个winzip文件,我是windows上解压的,然后创建了一个jaf的目录将activation.jar放到里面又上传到/home/src的,你可以自行解决
mkdir /usr/local/lib/java/jaf
cp /home/src/java/jaf/activation.jar /usr/local/lib/java/jaf //Jaf class
##下面安装JAVAMAIL,我的处理办法同上
mkdir /usr/local/lib/java/javamail
cp /home/src/java/javamail/*.jar /usr/local/lib/java/javamail //JavaMail classes
Step 13 Edit /etc/profile
##这一步用来配置环境变量,Resin的安装需要依赖该步骤
Vi /etc/profile
## 在/etc/profile文件末添加如下内容:
JAVA_HOME=/usr/local/jvm
RESIN_HOME=/usr/local/resin
CLASS_HOME=/usr/local/lib/java
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:$CLASS_HOME/drivers/mm.mysql-2.0.4-bin.jar.zip:$CLASS_HOME/jaf/activation.jar: $CLASS_HOME/javamail/mail.jar: $CLASS_HOME/javamail /smtp.jar: $CLASS_HOME/javamail /pop3.jar: $CLASS_HOME/javamail/mailapi.jar: $CLASS_HOME/javamail/imap.jar
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local:/usr/local/bin:/usr/local/jvm/bin:/usr/local/jvm/jre/bin:/usr/local/mysql/bin:/usr/bin/X11:/usr/X11R6/bin
export JAVA_HOME RESIN_HOME CLASS_HOME CLASSPATH PATH
## 保存文件后注销登陆,然后重新进入,输入下面的命令查看系统变量是否已经生效:
Shell>env
Step 14 Resin Install
1 安装Resin
cd /home/src
cp /home/src/resin-2.0.5.tar.gz /usr/local
cd /usr/local
tar xvzf resin*
cd resin*
./configure --with-apache=/usr/local/apache //设置编译参数
(Or: ./configure --with-apxs=/usr/local/apache/bin/apxs)
make //编译
make install //安装
2 建立符号连接
##建立resin的符号连接,道理同建立jvm符号连接
ln -s /usr/local/resin2.0.5 /usr/local/resin
##建立resin服务程序的符号连接,道理同建立apache符号连接
ln -s /usr/local/resin/bin/httpd.sh /usr/bin/resin
3 修改配置文件
vi /usr/local/resin/conf/resin.conf
Modify One: 建立连接池,类似于NT上的DSN(数据源)
<resource-ref>
<res-ref-name>jdbc/test</res-ref-name> //数据源名称
<res-type>javax.sql.DataSource</res-type> //数据源类型
<init-param driver-name="org.gjt.mm.mysql.Driver"/>//数据库驱动
<init-param url=" jdbc:mysql://localhost/test "/> //连接串 <init-param user="your_user_name"/> //用户名
<init-param password="your_password"/> //密码
<init-param max-connections="20"/> //最大连接数
<init-param max-idle-time="30"/> //延时时间
</resource-ref>
##后面的测试部分有例子介绍如何调用数据源
Modify Two: 修改默认主目录,如果使用虚拟主机,其实也可以不理会这个地方
<app-dir> /usr/local/apache/htdocs </app-dir>
Modify Three: 修改Resin端口,与Apache协同工作
<http port='8080' /> //删除本行即可
Modify Four: 添加支持JSP的虚拟主机
##添加一个支持JSP的虚拟主机需要做如下四方面的工作: DNS、、RESIN
1、添加一个DNS别名(当然主机名也可以)
vi /var/named/yesgo.loc
# 追加如下一行,当然你可以自定义其他别名或主机名
www IN CNAME ns.yesgo.loc.
/etc/rc.d/init.d/named restart
//重启DNS服务
nslookup //测试是否解析成功
##在文档中查找</host>,然后在其后加入如下内容:
<host id=''>
<app-dir>/home/www</app-dir> //指定该站点的根目录
<classpath id='classes' source='classes' compile='true'/ > //指定class文件目录
</host>
『注意』:
按照上面地设置,你放置JavaBean的目录就是站点根目录下的classes目录,不可以死记硬背/WEB-INFO/classes,关键要明白其中的道理,其实你设置什么都可以的,例如Amao,Agou啦,呵呵。
『强烈建议』:设置classes目录的权限,否则客户端可以浏览和下载你的组件
chmod 701 /home/ //设置classes目录的权限,避免非法获取
4 测试Resin
##启动Resin
shell>resin start
##重新启动Apache,因为刚才修改了httpd.conf,需要重启才生效
shell>apache restart
#创建文件
touch /home/
chown -R www /home/
chmod 701 /home/
##编辑源文件
vi /home/
##源代码只有一句:
1+1=<%=1+1%>
##测试该程序
lynx http://c/
##输出结果应该是:1+1=2
5 创建启动脚本
##创建Resin服务,道理跟创建MySQL和Apache服务是一样的,不过这里要设置相关环境变量。
##创建脚本文件
touch /etc/rc.d/init.d/resin
##更改文件权限
chmod 701 /etc/rc.d/init.d/resin
##连接到相关启动级别
ln -s /etc/rc.d/init.d/resin /etc/rc.d/rc5.d/S70resin
##编辑启动脚本
vi /etc/rc.d/init.d/resin
##文件内容如下:
#!/bin/bash
#Set environment parameter:
JAVA_HOME=/usr/local/jvm
RESIN_HOME=/usr/local/resin
CLASS_HOME=/usr/local/lib/java
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:$CLASS_HOME/drivers/mm.mysql-2.0.4-bin.jar.zip:$CLASS_HOME/jaf/activation.jar:$CLASS_HOME/javamail/mail.jar: $CLASS_HOME/javamail /smtp.jar: $CLASS_HOME/javamail /pop3.jar: $CLASS_HOME/javamail/mailapi.jar: $CLASS_HOME/javamail/imap.jar
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local:/usr/local/bin:/usr/local/jvm/bin:/usr/local/jvm/jre/bin:/usr/local/mysql/bin:/usr/bin/X11:/usr/X11R6/bin
export JAVA_HOME RESIN_HOME CLASS_HOME CLASSPATH PATH
#Start resin web server
exec /usr/local/resin/httpd.sh start
Step 15 PhpMyAdmin install
##phpMyAdmin是我最喜欢的MySQL客户端工具。我也使用过其他的客户端,包括win32的DBTools、mysqlfront等和基于web的其他工具,然而,我最后发现phpMyAdmin仍然是不可替代的。它基于web的通用性、免安装、多用户、平台无关性、稳定性、开放源码和极快的升级速度实在是太好了。况且本文档主要探讨的是服务器的配置,所以,我这里仍然只介绍phpMyAdmin。
1 配置DNS
vi /var/named/yesgo.loc
# 追加如下一行,当然你可以自定义其他别名或主机名
mysql IN CNAME ns.yesgo.loc.
/etc/rc.d/init.d/named restart //重启DNS服务
nslookup
展开阅读全文