为博客添加演示地址 - 通过SVN自动化构建代码(二)

紧接上篇手动实现类似易企秀PPT那样的HTML5网站。博文中,为了增加演示地址。我试了两种方法,一种是为博客添加演示地址 - 将演示与博客代码一起发布(一);一种是为博客添加演示地址 - 通过SVN自动化构建代码(二)

通过SVN自动化构建代码的好处在于方便管理,坏处也很明显,那就是比较繁琐,但是这些事情做好后,对以后来说是一劳永逸的。准备工作有下:

  1. 准备好一个服务器
  2. 装好Svnbersion和服务器开发环境,比如Apache服务器
  3. 创建SVN仓库钩子,配置Apache站点,自动更新代码

说明

简单陈述上述工作。

  1. 推荐使用云服务器,方便管理,我这里使用的是阿里云的服务器Centos6.5
  2. 运行环境可以到阿里云市场下载一键安装包,我使用的是LAMP一键安装包,然后用yum装的Svnbersion。有时间我会将安装的过程和一些注意要点写一篇博文声明。
  3. 关于前2步,大家可以到网上去找教程,非常简单。今天我重点讲第3步。

目录声明

在这里我们先预设好相应的目录,其中:

SVN仓库地址:/alidata/lj/svn/repos/pub
代码运行目录:/alidata/www/pub
Apache的配置目录:/alidata/server/httpd/conf/vhosts

创建SVN仓库与钩子

创建svn仓库仓库

mkdir -p /alidata/lj/svn/repos/pub # 创建目录
svnadmin create /alidata/lj/svn/repos/pub # 创建仓库

配置SVN账号

/alidata/lj/svn/repos/pub/conf中需要配置2个文件,也可以在博文最后下载我分享的配置文件把相应用户的账号密码改成自己需要的就行,操作分别如下:

authz,添加svn账号

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = admin,lj
# [/foo/bar]
# harry = rw
# &joe = r
# * =

passwd,设置密码

[users]
# harry = harryssecret
# sally = sallyssecret
admin = 888888
lj = 888888

svnserve.conf,为联动authz和passwd文件,不需要做修改。

设置钩子与启动

/alidata/lj/svn/repos/pub/hooks/post-commit最后添加如下代码,完成每次提交时,SVN自动更新运行目录的代码

export LANG=zh_CN.UTF-8
/usr/bin/svn update --username admin --password WC8lJM /alidata/lj/svn/repos/pub/
date >> /var/log/gen_svn_auto_commit_update.log

chmod a+x post-commit # 赋予权限

svnserve -d -r /alidata/lj/svn/repos/pub/ --listen-port=58888 # 启动svn仓库

设置开机启动仓库

vi /etc/rc.d/rc.local
/usr/bin/svnserve -d -r /alidata/lj/svn/repos/pub/ --listen-port=58888

配置Apache站点

创建项目目录

mkdir -p /alidata/www/pub

配置虚拟主机

这里我配置的是Apache虚拟主机的配置,附带一个Nginx的配置,方便使用Nginx做服务器的同学做配置。

我们想要达到这样的效果,当用户访问pub.iamlj.com时,运行/alidata/www/pub的代码。在/alidata/server/httpd/conf/vhosts中,新建pub.conf。添加如下代码:

<DirectoryMatch "/alidata/www/pub/(attachment|html|data)">
<Files ~ ".php">
Order allow,deny
Deny from all
</Files>
</DirectoryMatch>

<VirtualHost *:80>
DocumentRoot /alidata/www/pub
ServerName pub.iamlj.com
<Directory "/alidata/www/pub">
Options FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)-htm-(.*)$ .php?
RewriteRule ^(.*)/simple/([a-z0-9\_]+\.html)$ /simple/index.php?
</IfModule>
ErrorLog "/alidata/log/httpd/pub-error.log"
CustomLog "/alidata/log/httpd/pub.log" common
</VirtualHost>

Nginx的配置
如果有其他的二级域名同样适用。

server {
listen 80;
server_name www.iamlj.com;
index index.html index.htm index.php;
root /alidata/www/www;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#伪静态规则
#include /alidata/server/nginx/conf/rewrite/www.conf;
access_log /alidata/log/nginx/access/www.log;
}

运行项目

service httpd restart

自动更新代码

客户机更新SVN代码

svn checkout svn://121.42.61.155:58888

修改提交

发现变化

访问网址

总结

回顾一下基本流程:客户端提交SVN代码->SVN服务器钩子拦截->执行钩子命令,更新服务端的网站运行代码。这里,如果我们配置是的Apache,那演示的代码仓库就可以运行PHP和HTML,如果是Tomcat,则可以运行JSPHTML。因为JSP需要编译打包,不利于热部署,所以一般大家都是选择用PHP的服务器。

现在这样的更新策略,其实效果和新浪SAE的SVN或Git提交代码,还有Github的站点发布是一样的,可以通过Web Url及时预览效果。我以前用的是Jenkins做的自动构建,对于各种构建支持非常好!
这里我们选择的Linux+Apache+SVN达到的自动构建。整体上还是比较简单的。
如果Svnbersion服务器仓库和代码运行不在同一个服务器,那就必须要用Jenkins,实现一站式的构建方案了。

最后,上述涉及到的配置文件在此:https://yunpan.cn/cBSqSDD3W3Dwx 访问密码 0702。实际操作有可能会碰到一些问题,比如SVN乱码,如何运行、构建多个项目。碰到问题解决问题即可。

热评文章