zoukankan      html  css  js  c++  java
  • ubuntu搭建svn服务器并htpp访问版本库并svn与web同步

    Ubuntu搭建SVN服务器多版本库

    1  介绍
      Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。这样就可 以很方面恢复到以前的版本,并可以查看数据更改细节。目前,Subversion已成为主流的开源代码版本管理软件之一,简称SVN。
    2.  安装和服务器搭建
        执行下列指令安装 
    sudo apt-get install subversion
    3  创建版本库
       3.1先创建目录文件夹
    sudo mkdir /home/svn
    sudo mkdir /home/svn/project1
    sudo mkdir /home/svn/project2
       3.2创建第一个项目project1 第二个项目project2
    svnadmin create /home/svn/project1
    svnadmin create /home/svn/project2
    4. 为了便于管理,将所有版本库的密码和权限设置在同一个文件下面,操作步骤如下:
        4.1 取出project1下面conf文件夹下的authz和passwd两个文件到svn根目录下面
        4.2 修改每个版本库目录conf文件夹下面的svnserve.conf文件, 将
             # anon-access = read ,#auth-access = write ,# password-db = passwd,#authz-db = authz 修改为:
               anon-access = none ,auth-access= write,password-db = ../../passwd,authz-db = ../../authz
               (password-db = ../../passwd,authz-db = ../../authz代表相对路径而非绝对路径)
    5. 定义一下几个角色用来测试
        5.1 配置管理员(svnadmin),用来管理整个库
        5.2 项目经理(manage),用来相关管理文档
        5.3 开发人员 (dev),测试开发是否正常
     6. 下面添加角色
           打开svn目录下的passwd文件,创建方法是在[user]下面添加 username = passwd,记得“=”前后的空格,如下图:
        (svnadmin控制所有项目,统一管理)
     
    7. 为角色分配权限:
           假设(quxin是project1的项目经理,huzhixin是project2的项目经理,dev1、dev2是project1 的开发人员,dev3、dev4是project2的开发人员,test1是             project1的测试人员,test2是project2的测试人员)
           库目录及具体权限如下图所示:
           
        具体权限:(根目录下,svnadmin拥有所有权限,其他人只有读权限,要设置子目录权限,需设置子目录上级的权限方可,设置个别文件权限如下:)
       
    8启动svn服务
       一次启动  sudo svnserve -d -r /home/svn
    查看是否启动成功,可看的监听3690端口
    sudo netstat -antp |grep svnserve
    tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve
    如果想关闭服务,可使用pkill svnserve
        开机自启动svn
    在/etc/init.d目录建立一个脚本文件svnd.sh
    cd /etc/init.d
    touch svnd.sh
    chmod +x svnd.sh
    vi svnd.sh
    输入如下内容:
    #!/bin/bash
    #svnserve startup
    svnserve -d -r /ysh/svn
    更新修改权限:
    update-rc.d svnd.sh defaults
    (若提示权限不足,请用sudo执行)
    9 工具
    SVN 服务器端:Subversion 1.5 ,客户端 TrotoiseSVN 1.5 (https://tortoisesvn.net/downloads.html)
    10访问版本库地址
    svn://ip/project1
    svn://ip/project2
     
    阿里云Ubuntu系统搭建SVN版本库浏览服务器
    (4)sudo apt-get install apache2-utils libapache2-svn
    其中subversion是SVN必须的,apache2和libapache2-svn是为了配置SVN服务器支持通过HTTP访问
    ##SVN服务器配置
    1、相关用户、组的设定
    sudo addgroup subversion
    sudo usermod -G subversion -a www-data
    2、配置Subversion
    (1)配置dav_svn.conf文件
    vim /etc/apache2/mods-available/dav_svn.conf
    按照下面的步骤进行配置即可
    <1>删除<Location /svn>和DAV svn这两行前面的注释
     
    <2>删除SVNParentPath ...前面的注释,并且把后面的路径替换成创建的SVN的项目路径/home/svn 
     
    <3>删除AuthType Basic、AuthName “Subversion Repository”前面的注释,去掉AuthUserFile所在行前面的注释,并且修改后面的路径为/etc/subversion/dav_svn.passwd,去掉AuthzSVNAccessFile所在行前面的注释,并且修改后面的路径为/etc/subversion/dav_svn.authz,删除Require valid-user和</Location>前面的注释,具体如下所示:
    其中:
    /etc/subversion/dav_svn.passwd文件是SVN用户名和密码的配置,指定基本用户验证的密码文件存放的位置
    /etc/subversion/dav_svn.authz文件是访问权限配置
    重启Apache 2 WEB服务器
    sudo /etc/init.d/apache2 restart
    3、更改版本库所示的用户、组
    sudo chown -R root:subversion project1
    赋予组成员对所有新加入文件仓库的文件拥有相应的权限
    sudo chmod -R g+rws project1
    4、用户和权限配置
    (1)创建dav_svn.passwd文件并添加用户admin001,执行命令后会提示要输入密码
    sudo htpasswd -c /etc/subversion/dav_svn.passwd admin001
    继续添加新用户,去掉-c,否则会覆盖本文件
    sudo htpasswd /etc/subversion/dav_svn.passwd admin002
    (2)创建授权文件
    vim /etc/subversion/dav_svn.authz
    里面加入project1的权限配置,如
    [groups]
    administrator=admin001,admin002
    [project1:/]
    @administrator=rw
    5、重启SVN服务器
    killall svnserve
    svnserve -d -r /home/svn/
    至此SVN服务器搭建完成,可以在终端执行
    svn checkout http://hostname/svn/project1   project1 --username 用户名 --password 密码 来checkout项目了
     
    svn co svn://hostname/project1  /var/www/html/project1
    sudo chmod -R 777 /var/www/html/XXX/ 
    配置post-commit,实现自动同步svn版本库文件到web目录 
    为了可以在修改完代码提交到SVN服务器后,WEB服务器直接同步.需要配置SVN的钩子,进入hooks目录,
    cd /opt/svndata/repos/hooks
    ls
    可以看到有一个post-commit.tmpl文件,这是一个模板文件,复制一份放在此目录下,命名为post-commit,并将其用户组设为www,并设置为可执行:
    cp post-commit.tmpl post-commit
    chmod +x post-commit
    这样就有了访问www目录的权限。
    里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件.
    文件内容参考以下:
    vi post-commit
     
    #!/bin/sh
    LANG=en_US.UTF-8
    REPOS="$1"
    REV="$2"
    SVN_PATH=/usr/bin/svn
    WEB_PATH=/var/www/html/XXX
    LOG_PATH=/tmp/svn_update.log
    #此行已注释
    #/usr/bin/svn update --username user --password password $WEB_PATH --no-auth-cache
    echo " ##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` '##################' >>$LOG_PATH
    echo `whoami`,$REPOS,$REV >> $LOG_PATH
    #注意将此行user和password改为你具体的user和password
    $SVN_PATH update --username user --password password $WEB_PATH --no-auth-cache >> $LOG_PATH
    #chown -R www:www $WEB_PATH
    关闭:killall svnserve svn
    开启: svnserve -d -r /home/svn/
    里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件。
     
    问题解决: 

    1、阿里云服务器Ubuntu14系统搭建svn服务时候注意配置安全组中的规则

    入站和出站  3690/3690   0.0.0.0/0

    https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.121.1.417f9c6cF8FDFw

    2、阿帕奇配置apache2 配置文件记得添加ServerName  IP

    https://askubuntu.com/questions/329323/problem-with-restarting-apache-2

    3、Sudo问题:修,/etc/hosts 添加/etc/hostname中的字符串

    4、 解决svnserve: Can't bind server socket: Address already in use

    /etc/init.d/svnserve start 

    netstat -antple | grep svn

    killall  svnserve

    解决办法:

    # svnserve -d -r /mnt/westos --listen-port 3691

     
     
  • 相关阅读:
    代替elk的命令
    redis查找bigkeys--密码带特殊字符
    mysql5.7.1.log数据库改名
    kubesphere tomcat 日志 中文 乱码
    split切割大文件 批量查看日志
    文件内容正则批量替换
    font元素批量更换成font元素
    C#(99):资源与本地化 System.Resources
    ASP.NET Web网站本地化
    为WinForm项目添加帮助文档
  • 原文地址:https://www.cnblogs.com/hanlong/p/7295556.html
Copyright © 2011-2022 走看看