小組開發環境搭建: apache+ftp+cvs+samba

版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明。http://www.chedong.com/tech/dev.html


內容摘要:本文主要介紹一些小組開發環境搭建中經常會遇到一些服務器服務設置,這些服務很多都是鑑於大部分的開發客戶端仍然是Windows設置 的,每個服務都提供了簡單的基本配置示範。包括:
IP管理(DHCP):服務器IP地址的管理和解析(結合SAMBA的WINS服務),開發客戶端的IP管理;
WEB服務(APACHE):文檔共享,CVS的WEB界面瀏覽,論壇工具等;
FTP服務(FTP):用於文件下載/共享;
版本控制(CVS):程序源代碼和文檔的版本控制;
文件共享(SAMBA):基於NETBIOS的文件共享,方便WINDOWS客戶端的訪問(比如一些工具的安裝等);
數據庫服務器(MYSQL):一些應用的後臺數據庫服務;
備份機制(wget + rsync):備份

很多設置是缺省按照在bash環境中,在tcsh環境中,有一些設置不太一致。

服務器規劃如下:
[img]http://fuwa-jane.iteye.com/upload/attachment/66770/c8a0cdfc-81ae-32e5-b158-9eb376e90799.jpg[/img]

硬件準備:至少要2臺服務器
1.從理論上說,任何系統的崩潰只是時間問題,而且誰也不能保證開發者不犯錯誤;
2.解決以上問題的辦法只有:備份,備份,備份……

操作系統準備

FreeBSD或GNU/Linux,系統安裝時,本文的配置主要以在RedHat 8上運行爲例。注意:安裝時要將“開發工具”大類選上,後面的很多工具都需要使用GCC進行編譯,有的應用腳本運行用到了perl。2臺主服務器分別使用 IP地址192.168.0.200和192.168.0.201
語言環境缺省設置:

vi /etc/sysconfig/i18n


刪除UTF-8相關設置:

LANG="en_US"
SUPPORTED="en_US:en"
SYSFONT="latarcyrheb-sun16"


GNU/Linux安裝完後:經常有很多不必要的服務需要刪除,但根據服務器的不同,要刪除的服務也不一樣:本來是想總結一個統一的腳本,後來發現是需要刪除的服務比需要保留的服務多,而且缺省有那些服務和系統版本,安裝的模式也相關。

這裏我總結的了一個簡單的方法來刪除不必要的服務:

首先:備份原始服務設置:
#chkconfig --list > chkconfig.orig

生成刪除腳本:把所有在LEVEL 3啓動的服務過濾出來,並生成chkconfig service off 這樣的命令

#chkconfig --list | grep 3:on | awk '{print "chkconfig "$1" off"}'
chkconfig kudzu off
chkconfig syslog off
chkconfig netfs off
chkconfig network off


chkconfig random off
chkconfig rawdevices off
chkconfig pcmcia off
chkconfig keytable off
chkconfig apmd off
chkconfig atd off
chkconfig gpm off
chkconfig autofs off
chkconfig iptables off
chkconfig isdn off
chkconfig sshd off
chkconfig portmap off
chkconfig nfslock off
chkconfig sendmail off
chkconfig rhnsd off
chkconfig crond off
chkconfig anacron off
chkconfig xfs off
chkconfig xinetd off


我們把需要保留的服務從這個列表中刪除:
一般WEB服務器只留network sshd crond atd syslog

刪掉相應的行以後就生成了不需要的服務刪除腳本:

chkconfig kudzu off
chkconfig syslog off
chkconfig netfs off
chkconfig rawdevices off
chkconfig pcmcia off
chkconfig keytable off
chkconfig apmd off
chkconfig gpm off
chkconfig autofs off
chkconfig iptables off
chkconfig isdn off
chkconfig portmap off
chkconfig nfslock off
chkconfig sendmail off
chkconfig rhnsd off
chkconfig xfs off
chkconfig xinetd off


2臺機器上都安裝的服務:SSH FTP DHCP服務
SSH

基本的登陸服務,對於內部分開發來說一般用缺省的就可以了,但是建議將/etc/ssh/sshd_config中的:
PermitRootLogin yes改成PermitRootLogin no
FTP

建議用proftpd代替原有的ftp服務:http://www.proftpd.org/ 當然如果是vsftpd就不用換了
安裝:tar zxf proftpd-version.tar.gz; cd proftpd-version/; ./configure; make; make install
缺省配置/usr/local/etc/proftpd.conf


ServerName "ProFTPD"

ServerType standalone

DefaultServer on
AllowOverwrite on

Port 21

Umask 022


UseReverseDNS off

MaxInstances 30


User apache

Group apache


1.不反相解析登陸機器的域名 UseReverseDNS off
2.使用了系統缺省的apache用戶/組運行服務
3.使用AuthUserFile把一些虛擬用戶映射成系統帳戶是一種更安全的方式,可以把多個只需要FTP權限的開發者用虛擬帳號映射成一個系 統用戶。這些虛擬用戶的認證密碼在ftpd.passwd中設置,從而實現了於系統認證的分離:
ftpasswd是一個perl腳本,下載即可使用: ftpasswd --passwd --name=test --uid=501 --gid=501 --home=/home/test --shell=/sbin/nologin --file=/etc/ftpd.passwd
然後在proftpd.conf配置中增加:DefaultRoot ~ 讓用戶只能在自己的目錄下工作,不能通過cd ..轉向更上級目錄進行操作
AuthUserFile /etc/ftpd.passwd
DefaultRoot ~

DHCP

爲了更方便的管理在同一個局域網中開發者的IP地址和服務器的IP地址,最好將服務器安排在一定範圍內的靜態IP內(比如 192.168.0.200以上),將(192.168.0.10-200)範圍內爲開發機客戶端提供動態IP。假設我們的主服務器 (192.168.0.200)和輔助開發服務器(192.168.0.201)使用靜態IP,同時爲網段內提供192.168.0.10-200動態 IP分配服務。DHCP服務在2臺服務器上都安裝,一個做主DHCP服務,用於給子網IP池提供70%的IP,另外一臺做備份,擁有IP池的30%。在例 子中:200負責10-100,201負責110-150。缺省dhcpd沒有安裝的話,從安裝盤上找到DHCP軟件包安裝或者從http://www.isc.org下載源文件編譯即可(安裝位置和配置文件可能有所 不同)。缺省配置文件位於/etc/dhcpd.conf

缺省配置:主服務器上

ddns-update-style none;
default-lease-time 120000;
max-lease-time 920000;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option netbios-name-servers 192.168.0.200;
option routers 192.168.0.1;
option domain-name-servers 202.106.196.115,202.96.199.133;
option domain-name "example.com";

subnet 192.168.0.0 netmask 255.255.255.0{
range 192.168.0.10 192.168.0.100;
}


說明:
缺省每個IP租期2天: default-lease-time 120000;
最長租期: max-lease-time 920000;
缺省子網掩碼:option subnet-mask 255.255.255.0;
缺省廣播地址:option broadcast-address 192.168.0.255;
讓192.168.0.200上的samba服務啓用WINS服務:用於內部域名解析
option netbios-name-servers 192.168.0.200;
缺省網關 option routers 192.168.0.1;
缺省域名服務器 option domain-name-servers 202.106.196.115,202.96.199.133;
缺省域名 option domain-name "example.com";


#一個缺省的子網設置:
subnet 192.168.0.0 netmask 255.255.255.0{
#爲子網動態分配0.10-100的IP
range 192.168.0.10 192.168.0.100;
}


輔DHCP服務器上唯一不同的地方是:爲子網動態分配0.110-150的IP,主DHCP和附DHCP服務器的IP池不能相互重疊

subnet 192.168.0.0 netmask 255.255.255.0{
range 192.168.0.110 192.168.0.150;
}


注意:
如果主服務器是2塊網卡並同時用作NAT服務,則外網IP是DHCP不能廣播的,需要將外網IP地址屏蔽廣播
加入:
subnet 202.102.34.102 netmask 255.255.255.255 {}

主服務器上的應用安裝:

SAMBA服務:用於文件的共享和內部WINS解析

這裏只做一個只讀共享的簡單配置,


[global]
#別人會通過"網上鄰居"看到WORKGROUP組裏名爲的Linux機器,註釋是:My Samba Server
workgroup = WORKGROUP
netbios name = Linux
server string = My Samba Server

#日誌設置
log file = /var/log/samba/%m.log
max log size = 50

#安全設置
security = share

#用SAMBA的WINS服務支持,並且用/etc/hosts做內部域名解析
wins support = yes
name resolve order = hosts lmhosts wins bcast
dns proxy = yes

[public]
#一個共享設置
comment = Public Stuff
path = /home/share
public = yes
guest ok = yes
read only = yes
writable = no
printable = no

[docs]
#一個需要密碼驗證的設置,密碼通過#smbpasswd -a user password增加
comment = Public Stuff
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
path = /home/docs
public = yes
guest ok = no
read only = yes
writable = no


在這裏爲了讓大家能夠在內部使用dev.example.com訪問主服務器(192.168.0.200),我用DHCP設置主服務器 (192.168.0.200)同時也是是內部的WINS服務器,而在200的SAMBA服務中,啓用了WINS支持,並設置WINS用可以利用DNS做 NETBIOS名稱解析。這樣如果DNS讀取的是/etc/hosts文件中的設置的話,hosts文件就可以當作WINS域名配置文件了,在 /etc/hosts裏設置了:
192.168.0.200 dev.example.com bbs.example.com dev bbs
192.168.0.201 bak.example.com backup
後,通過DHCP獲得IP的內網客戶端就可以直接通過: dev.example.com訪問開發服務器了。

所有的機器名前綴我都使用了縮寫:dev, bbs bak之類的,原因是samba的NMBD實際上是NETBIOS名稱的解析,名稱長度是16個字符(實際是15個)有限制的。因此,雖然 192.168.0.202 username.example.com雖然是一個合法的DNS名稱解析,但由於username.example.com長度超過了16個字符,所以 通過SAMBA的WINS服務解析仍然無法找到。dev.chedong.com相當於\\dev.chedong.com\這樣的一臺機器。當初用 SAMBA的WINS解析在客戶端總是ping不通testing.chedong.com這個問題困擾了我好一陣。

WEB服務:APACHE + php + resin

主要用作文件的WEB共享和一些應用的前端瀏覽(CVSWEB GNATSWEB PHPMYADMIN等),Apache,這裏仍然使用了1.3,因爲很多應用,比如PHP在2.0上運行還不是完整。

安裝: http://httpd.apache.org下載最 新版本:

編譯選項:這樣可以讓所有的模塊都通過配置文件動態加載,方便後面其他應用模塊的添加刪除:
./configure --prefix=/home/apache --enable-shared=max --enable-module=most
更多安裝說明可以參考: APACHE安裝筆記

重複如下:

apache:
diff httpd.h httpd.h.orig
314c314
< #define HARD_SERVER_LIMIT 2560
---
> #define HARD_SERVER_LIMIT 256

./configure --prefix=/home/apache --enable-shared=max --enable-module=most


刪除過多的註釋:
grep -v "#" httpd.conf.default >httpd.conf

php + mysql

mysql: innodb效率和ORACLE差不多,一般應用用不上
./configure --prefix=/home/mysql --without-innodb

./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars \
--with-mysql=/home/mysql \
--with-oci8=/home/oracle/product/8.1.7 \
--with-oracle=/home/oracle/product/8.1.7
make
#make install

修改httpd.conf
<IfModule mod_dir.c>
DirectoryIndex index.html index.php index.php3
</IfModule>
在<IfModule mod_mime.c>中加入:
AddType application/x-httpd-php .php .php3

resin
./configure --with-apxs=/home/apache/bin/apxs
make
make install

修改httpd.conf
<IfModule mod_caucho.c>
CauchoConfigFile /home/resin/conf/resin.conf
</IfModule>


文檔共享技巧:
1 對於文檔的共享來說,autoindex模塊非常有用,讓APACHE自動索引目錄缺省是按文件/目錄名排序的,而且文件名40個字符以上部分是被截斷 的,爲了能顯示完整的文件名,並且像資源管理器那樣將目錄排在前面,文件排在後面:
在<IfModule mod_autoindex.c>模塊設置中:
#增加NameWidth選項,並且文件名長度是*(自動適應當前目錄下最長文件名)
#增加FoldersFirst選項,讓目錄列在前面(類似於資源管理器)
#增加了ScanHTMLTitles用HTML文件的TITLE做文件的描述,並設置描述長度是*(自適應最長)
IndexOptions FancyIndexing +NameWidth=* FoldersFirst ScanHTMLTitles +DescriptionWidth=*

2 如果是CGI開發,如何讓用戶在自己的目錄下能夠發佈CGI程序,比如:http://192.168.0.200/~chedong/cgi- bin/my_cgi:在
<IfModule mod_alias.c>模塊設置中,添加正則表達式:
ScriptAliasMatch ~([a-z]+)/cgi-bin/(.*) /home/$1/cgi-bin/$2
意思是匹配~user_name/cgi-bin/cgi_name自動映射到/home/user_name/cgi-bin/cgi-name腳本

3 如果允許所有目錄可以自動索引瀏覽autoindex,需要將
<Directory "/home/apache/htdocs"> <===改成 <Directory "/">


版本控制:CVS

CVS缺省在服務器上幾乎都安裝好了,只要按照以下步驟初始化即可:

在/etc/profile裏:
CVS庫所在的主服務器設置:
export CVSROOT=/home/cvsroot
在其他開發服務器裏設置:
export CVSROOT=:ext:[email protected]:/home/cvsroot
export CVS_RSH=ssh

然後在主服務器上cvs init初始化:

關於CVSWEB的設置,重複以下CVS常用命令手冊中CVSWEB的內 容:

CVSWEB的下載:CVSWEB從最初的版本已經演化出很多功能界面更豐富的版本,這個是個人感覺安裝設置比較方便的:
http://www.spaghetti-code.de/software/linux/cvsweb/

下載解包:
tar zxf cvsweb.tgz
把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一個目錄下),
修改:cvsweb.cgi讓CGI找到配置文件:
$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';

轉到/path/to/apache/conf下並修改cvsweb.conf:
修改CVSROOT路徑設置:
%CVSROOT = (
'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT
);
缺省不顯示已經刪除的文檔:
"hideattic" => "1",#<==缺省不顯示已經刪除的文檔
在配置文件cvsweb.conf中還可以定製頁頭的描述信息,你可以修改$long_intro成你需要的文字

首先可以CVS進庫裏的就是以上系統的安裝文檔。

更多的關於CVS的擴展應用可以參考CVS常用命令手冊CVSTRAC部分

多個服務之間的資源共享

一般可以通過鏈接解決,比如:

我希望匿名ftp共享的內容(比如在/var/ftp/pub目錄下)都可以WEB發佈,
ln -s /var/ftp/pub /home/apache/htdocs/pub

我希望/usr/share/doc裏的文檔大家可以通過WEB瀏覽:
ln -s /usr/share/doc /home/apache/htdocs/doc

我希望WEB發佈的內容大家通過WINDOWS網絡鄰居也可以訪問:假設/home/share是samba發佈的只讀共享路徑
ln -s /home/apache/htdocs /home/share

服務的自動啓動:
系統已經安裝的服務一般可以通過setup的服務配置是否自動啓動,否則就在/etc/rc.local里加一些啓動腳本即可。
比如:

備份和日誌統計

可以將以下腳本寫在主服務器的ROOT的CRON裏:
#time sync
0 5 * * 1 (/usr/bin/rdate -s YOUR_DATE_TIME_SERVER)

#backup cvsroot
5 3 * * * (cd /home; tar czf /home/backup/cvsroot.`date +\%w`.tgz cvsroot)

#backup apache
8 3 * * * (cd /home; tar czf /home/backup/apache.`date +\%w`.tgz apache)

#webalizer demo
3 5 * * * (/usr/local/bin/webalizer -c /home/apache/conf/webalizer.conf /home/apache/logs/`date -d yesterday +\
%w`/access_log)

#remove last week web log
3 4 * * * (find /home/apache/logs/ -name access_log -mtime +4 -exec rm -f {} ;)

這樣,在/home/backup目錄下會有按星期輪訓的7個備份。然後通過在輔助服務器上設置CRON用wget的-m選項鏡像主服務器上的 /home/backup目錄或者用rsync做同步就可以了。後面的2條是關於使用webalzier做服務器的日誌統計,APACHE的日誌通過 cronolog進行了輪循。具體設置請參考:
注意:
在CRONTAB中 %需要轉義\%,比如:tar czf /home/backup/apache.`date +\%w`.tgz apache
而命令行中需要轉義的\; 在crontab 中不需要轉義,比如:...-mtime +4 -exec rm -f {} ;

基於RSYNC的同步備份:

主服務器:設置啓動rsync服務

/etc/rsyncd.conf
hosts allow 192.168.0.*
[ftp]
path = /home/apache/htdocs
comment = docs need backup

備份服務器:每天6點同步一次數據
2 6 * * * (/usr/bin/rsync -au --delete rsync://192.168.0.200/ftp /home/apache/htdocs )

如何給用戶設置缺省密碼:
/home/apache/bin/htpasswd -bmn chedong 123
chedong:$apr1$5hoi./..$XlpyjZk6rw7R9D5QPo6V6/
-b don't prompt
-m md5
-n print to stout

TODO:
基於WIKI的文檔共享:twiki
打印服務;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章