在Jaunty Jackalope(Ubuntu 9.04)上设置Subversion W / WebDav,提交后挂钩和多个站点
1关于本教程。
本教程专为某人设置他们的第一个Jaunty Jackalope(Ubuntu 9.04) - Subversion服务器而设计。 当我第一次开始使用Subversion时,对于我正在安装的关键部分的许多教程变得非常沮丧... Subversion! 我包括一些“易用性”包为我们的Linux新星:)。
本教程中包含:
- 安装Webmin
- WebDav设置
- 如何准备Jaunty Jackalope(Ubuntu 9.04)作为web / svn服务器
- SSL设置
- 如何创建SLL证书
- 如何设置SVN SSL VHOST
- 如何设置分阶段VHOST
- 如何设置Live VHOST
- Subversion设置
- 如何创建一个后提交钩子来自动更新您的登台服务器
不在本教程中:
- 如何设置Ubuntu(有很多教程)
因为我对Linux很新,我喜欢从我的Windows框中工作,请参阅本教程的先决条件的以下信息...
Jaunty Jackalope(Ubuntu 9.04):
- 安装LAMP
- 安装SSH
Windows Box
- 安装PuTTY
- 安装TortoiseSVN
如果您尝试安装SVN并且失败,建议您在启动Ubuntu并安装新的副本之前, 本教程需要遵循“信”工作。 我的Ubuntu安装是一个标准的服务器,只有LAMP和SSH。 如果您尝试并失败,您可能有不同于本教程中使用的目录结构
我在本教程中使用example.com,您将需要用.com替换示例 ,并且还有您的stg。 和svn。 子域设置并指向您的ip。 由于我的工作VPN问题,我总是让我们的用户设置家庭网络为192.168.2.0在本教程中,我用那个IP
赞扬杰里米·
斯派尔(Geremy Speer)
多年的Google Talk帮助! 谢谢你!
2安装Ubuntu的网络和主机。
sudo su
编辑/ etc / network / interfaces
。
sudo nano /etc/network/interfaces
这样看起来像这样:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.2.2 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 gateway 192.168.2.1
重新启动网络。 (如果你在PuTTY,你将需要重新连接)
sudo /etc/init.d/networking restart
编辑/ etc / hosts
以使用您的新IP。
sudo su
sudo nano /etc/hosts
编辑它看起来像这样...
127.0.0.1 localhost 192.168.2.2 EXP-01.example.com EXP-01 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
安装/ etc / hostname
来反映你的主机。
echo EXP-01.example.com > /etc/hostname
开始吧
sudo /etc/init.d/hostname.sh start
运行以下命令时,都应该回复EXP-01.example.com
hostname
hostname -f
3更新Ubuntu并安装所需的软件包。
更新和升级Ubuntu。
sudo apt-get update
sudo apt-get upgrade
安装所需的软件包。
sudo apt-get install subversion libapache2-svn ssl-cert
安装webmin。
我喜欢webmin从https://www.example.com:10000来管理我的服务器,你可以跳过这个。
编辑/etc/apt/sources.list
并将以下内容添加到底部...
sudo nano /etc/apt/sources.list
deb http://download.webmin.com/download/repository sarge contrib
再次更新。
sudo apt-get update
安装Webmin。
sudo apt-get install webmin
4创建SSL证书和您的站点
当它煽动你,使用svn.example.com
作为主机。
sudo mkdir /etc/apache2/ssl
sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
启用SSL
sudo a2enmod ssl
/etc/init.d/apache2 restart
我觉得更安全,不要离开默认网站,所以我把它们放在这里。
sudo a2dissite default
sudo a2dissite default-ssl
我们现在将为本教程的所有三个站点创建VHOST。
#START#SSL SVN site
sudo nano /etc/apache2/sites-available/svn.example.com
复制将以下内容粘贴到新文件中。
<virtualhost *:443> ServerName svn.example.com ServerAdmin webmaster@localhost SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem <DirectoryMatch "^/.*/.svn/*"> Order deny,allow Deny from all </DirectoryMatch> ErrorLog /var/log/apache2/ssl-error.log CustomLog /var/log/apache2/ssl-access.log combined ServerSignature On </virtualhost>
启用SVN站点
sudo a2ensite svn.example.com
#END#SSL SVN site。
#START#分段网站
sudo nano /etc/apache2/sites-available/stg.example.com
复制将以下内容粘贴到新文件中。
<VirtualHost *:80> ServerName stg.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/stg/example.com/httpdocs/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/stg/example.com/httpdocs/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/stg-example-access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
启用分段站点
sudo a2ensite stg.example.com
#END#分段网站。
#START#Live site
sudo nano /etc/apache2/sites-available/live.example.com
复制将以下内容粘贴到新文件中。
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/live/example.com/httpdocs/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/live/example.com/httpdocs/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/live-example-access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
启用实时站点
sudo a2ensite live.example.com
#END#实时网站。
为您的网站制作文档文件夹
sudo mkdir /var/www/stg
sudo mkdir /var/www/live
5安装Subversion w / WebDAV
备份现有的DAV配置
sudo mv /etc/apache2/mods-available/dav_svn.conf /etc/apache2/mods-available/dav_svn.bak
创建一个新的DAV配置:
sudo nano /etc/apache2/mods-available/dav_svn.conf
复制将以下内容粘贴到新文件中。
<Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user <LimitExcept GET PROPFIND OPTIONS REPORT> </LimitExcept> SSLRequireSSL </Location>
创建您的第一个SVN用户。
sudo htpasswd -cm /etc/apache2/dav_svn.passwd usera
新密码
重新输入新密码
要创建更多用户,请删除-cm。
sudo htpasswd /etc/apache2/dav_svn.passwd userb
新密码
重新输入新密码
创建SVN存储库根目录。
sudo mkdir /var/lib/svn
创建您的第一个存储库。
sudo svnadmin create /var/lib/svn/example.com
创建存储库结构
sudo svn mkdir file:///var/lib/svn/example.com/trunk file:///var/lib/svn/example.com/tags file:///var/lib/svn/example.com/branches -m "example.com Initial SVN Structure"
承诺修订1。
将存储库结帐到您的临时文件夹。
sudo svn co file:///var/lib/svn/example.com/trunk /var/www/stg/example.com
退房修订1。
以下只是创建/var/www/stg/example.com/httpdocs
,以便apache在我们重新启动时对我们进行“吠叫”。
添加分段www-root文件夹。
sudo mkdir /var/www/stg/example.com/httpdocs
将新文件夹添加到版本控制。
cd /var/www/stg/example.com/
sudo svn add httpdocs/
Ahttpdocs
提交对存储库的更改。
sudo svn commit httpdocs/ -m "Adding intial Staging root folder -usera"
添加httpdocs
承诺修订2。
将存储库结帐到实际文件夹。
sudo svn co file:///var/lib/svn/example.com/trunk /var/www/live/example.com
因为你提交了对repo的分期更改,当你检查到活的文件夹的repo, httpdocs /
已经在那里!
ls /var/www/live/example.com/
这很重要,确保www数据拥有所有这些。 这将允许后提交远程工作。
sudo chown -R www-data:www-data /var/lib/svn/
sudo chown -R www-data:www-data /var/www/
重新加载Apache2。
sudo /etc/init.d/apache2 reload
以下网站现在工作!
https://svn.example.com/svn/example.com/ (这一个需要您使用webdav用户登录并传递您创建的)
http://stg.example.com/
http://www.example.com/
警告:只有当您的服务器不向公众开放时,才应该执行以下操作:我每次都将日志记录保存到服务器中,以更新我的分段副本,这是在防火墙后面...我们的实际服务器完全不同机。 还有其他方法可以让后提交工作。
6创建提交后的Hook
后提交钩子将让SVN自动更新您的登台服务器上的httpdocs /,当您从本地开发框使用ToirtoiseSVN时,这非常方便。 它阻止您不必登录SVN服务器来更新您的登台工作副本。
添加www数据作为sudoer。
sudo nano /etc/sudoers
复制粘贴文件末尾的以下内容。
www-data ALL=(ALL) NOPASSWD:ALL
创建后提交文件
sudo cp /var/lib/svn/example.com/hooks/post-commit.tmpl /var/lib/svn/example.com/hooks/post-commit
使后提交文件可执行。
sudo chmod +x /var/lib/svn/example.com/hooks/post-commit
编辑提交后文件。
sudo nano /var/lib/svn/example.com/hooks/post-commit
改变文件看起来像这样。
#!/bin/sh # POST-COMMIT HOOK # # The post-commit hook is invoked after a commit. Subversion runs # this hook by invoking a program (script, executable, binary, etc.) # named 'post-commit' (for which this file is a template) with the # following ordered arguments: # # [1] REPOS-PATH (the path to this repository) # [2] REV (the number of the revision just committed) # # The default working directory for the invocation is undefined, so # the program should set one explicitly if it cares. # # Because the commit has already completed and cannot be undone, # the exit code of the hook program is ignored. The hook program # can use the 'svnlook' utility to help it examine the # newly-committed tree. # # On a Unix system, the normal procedure is to have 'post-commit' # invoke other programs to do the real work, though it may do the # work itself too. # # Note that 'post-commit' must be executable by the user(s) who will # invoke it (typically the user httpd runs as), and that user must # have filesystem-level permission to access the repository. # # On a Windows system, you should name the hook program # 'post-commit.bat' or 'post-commit.exe', # but the basic idea is the same. # # The hook program typically does not inherit the environment of # its parent process. For example, a common problem is for the # PATH environment variable to not be set to its usual value, so # that subprograms fail to launch unless invoked via absolute path. # If you're having unexpected problems with a hook program, the # culprit may be unusual (or missing) environment variables. # # Here is an example hook script, for a Unix /bin/sh interpreter. # For more examples and pre-written hooks, see those in # the Subversion repository at # http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and # http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ REPOS="$1" REV="$2" #/usr/share/subversion/hook-scripts/commit-email.pl \ # "$REPOS" "$REV" commit-watchers@example.org sudo svn update /var/www/stg/example.com >> /var/lib/svn/logs/exampleup.log
创建SVN日志目录。
sudo mkdir /var/lib/svn/logs
创建日志文件以进行更新跟踪。
sudo touch /var/lib/svn/logs/exampleup.log
提供www数据所有权。
sudo chown -R www-data:www-data /var/lib/svn/logs/exampleup.log
现在当您从本地机器上的ToroiseSVN提交文件时,您不必在登台服务器上运行,该提交将为您提供。
要更新您的实时站点,您仍然必须登录到服务器并在实际文件夹上运行更新。 我这样做,所以我不会意外拧我的实时服务器,
sudo svn up /var/www/live/example.com
而已!
我希望本教程可以帮助您节省一切挫折!