我爱模板网 > 建站教程 > 其他 >  linux搭建SVN服务器 并且实现项目自动同步正文

linux搭建SVN服务器 并且实现项目自动同步

///////--------------- linux搭建SVN服务器 并且实现项目自动同步 本教程使用的是 阿里云 centerOs 7.1 ---------------/////////////////

0.ssh登录linux服务器
ssh root@你的服务器ip(ps:接着会让你输入密码,密码不显示,直接输完 enter 就行了)

1.安装svn服务器端
yum install subversion

2.进入目录,准备创建svn目录
cd /usr/local/  

3.创建一个svn目录
mkdir svn

4.修改目录权限为777
chmod -R 777 svn

5.创建一个svn版本仓库first(first可以随便起名字)
svnadmin create /usr/local/svn/first

6.进入first版本仓库下的配置文件目录
cd first/conf

7.编辑svnserve.conf配置文件
vim svnserve.conf   (基本常识:vim 编辑文件 进如按E编辑 编辑好后  按esc 后:W 保存 :q退出)

//配置版本库信息和用户文件和用户密码文件的路径、版本库路径
anon-access = none       //默认是只读read
auth-access = write      //认证后有写入权限
password-db = passwd     //帐号密码配置文件
authz-db = authz         //权限配置文件
realm = first            //改成自己的版本库 生效范围

8.编辑authz权限文件
vim authz

//文件,创建svn组和组用户的权限  
[group]  
first = ddl,shl       //创建一个first的组,并制定两个用户ddl和shl
 
[/]                   //制定根目录下的权限
@first = rw           //first组用户权限为读写  
* = r                 //其他用户只有读权限

9.编辑passwd权限文件
vim passwd

//创建或修改用户密码
[users]
 
ddl = 123456    //用户名 = 密码  
shl = 123456    //用户名 = 密码

10.设置SVN服务开机自启动   

    1. 在root目录加入svn.sh
       touch /root/svn.sh

    2. 让后在svn.sh写入内容
       vim /root/svn.sh

         ////----写入的内容----////

         #!/bin/bash
         /usr/bin/svnserve -d -r  /usr/local/svn/cnmiaosu

         ////----写入的内容----////

    3.  svn.sh该脚本添加可执行权限(非常重要)
        chmod +x svn.sh

    4. 加入自动运行
        1.vim  /etc/rc.d/rc.local
            在末尾添加脚本的路径:
            /root/svn.sh (按esc 后:W 保存 :q退出)

        2.最后 给 /etc/rc.d/rc.local 加入执行权限,因为在centos7中,/etc/rc.d/rc.local文件的权限被降低了,开机的时候执行在自己的脚本是不能起动一些服务的,执行下面的命令可以文件标记为可执行的文件
           chmod +x /etc/rc.d/rc.local (非常重要)


11.使用post-commit实现自动部署,实现本地提交svn后,自动同步服务器中项目

    1.打开hooks文件夹
      cd /usr/local/svn/hooks

    2.复制post-commit.tmpl 文件为 post-commit
      cp post-commit.tmpl post-commit

    3.打开post-commit文件
      vim post-commit

    4.文件内容清空内容,修改为以下代码:

        #!/bin/sh
        export LANG=en_US.UTF-8
        /usr/bin/svn update --username ddl --password 123456 /www/web/myweb

        注意: /usr/bin/svn                             是svn的路径,不是项目路径,应该都是一样的;
              --username ddl --password 123456         svn账户和密码
              /www/web/myweb                           项目路径(需要实时同步的项目)

    5.修改post-commit的可执行权限
       chmod 755 post-commit

    6.在上面我见了一个svn版本库为first,但是这只是版本库,并没有项目,那么我们需要在版本库里面新建项目(也就是建立一个文件夹)

          这里推荐使用 windows 下面的 TortoiseSVN 客户端,打开版本库后右键 建立一个 《myweb》 项目文件夹,然后把所有的项目文件 拖入到 该文件夹内 上传svn服务器;
          注意:为什么不推荐用linux方式上传项目到svn服务器中,因为linux上传一个个文件上传很麻烦,所以推荐 TortoiseSVN 客户端 上传

    7.在服务器进入项目目录/www/web/myweb checkout 整个项目。

        注意此处不要checkout文件夹,正确代码应该是这样:
        svn checkout svn://{您的服务器地址}:{端口号}/myweb .   //注意目录后面还有一个点


12.常见错误,我遇到的

    1.255错误:post-commit没有给执行权限 或者 头部没有执行用sh执行,就是没有#!/bin/sh
    2.提示跳过目录:服务器目录没有checkout代码,记得一定要先checkout一次,才能同步(!,每次新建项目都需要)
    3.什么提示也没有:这种情况出现在用工具commit的时候,成功了,但是就是没有同步,建议你到linux下,使用./post-commit手动执行看报什么错误。如果乱码,请将文件内编码格式修改为GBK
    4.提示**** is a direcitory:/usr/bin/svn你把这个搞错了,他不是一个目录,是svn的路径
 


12.需要注意的问题;

    1.SVN版本库起动方式,现在svn下面有 first、test 两个版本库  
        1:单版本库起动    svnserve -d -r /usr/local/svnRepo/first
        2:多版本库起动    svnserve -d -r /usr/local/svnRepo

    2.如果使用的是阿里云服务器需要在《安全策略》中加入  3690 端口

    3.如果使用的是wdcp面板,需要在防火墙中加入  3690 端口



///////--------------- 常用:svn命令 ---------------/////////////////

lsof -i :3690                           查看svn是否启动
 
ps aux |grep 'svn'                      查找所有svn启动的进程
 
kill -9 2505                            杀死2505这个查找到的svn进程
 
svnserve -d -r /usr/local/svn/first     启动svn

netstat -anp|grep svnserve                查看一下SVN信息

svnserve --version                      查看一下SVN版本

svn checkout svn://120.55.59.185/cmf_cnmiaosu_com .   检出数据



///////--------------- Mac下使用iTerm2让SSH记录远程服务器账号和密码 ---------------/////////////////

第一步:打开Finder,在菜单栏找到『前往』→ 『前往文件夹...』,输入:~/.ssh/ 然后回车

第二步:新建一个文件,命名为example吧,里面写入内容:

[code]

set user 服务器账号
set host 服务器IP
set password 服务器密码

spawn ssh $user@$host
expect "*assword:*"
send "$password\r"
interact
expect eof

[/code]

第三步:到官方http://www.iterm2.com/下载并打开iTerm2,菜单栏找到『Profiles』→『Open Profiles...』,打开面板上,点击右下角『Edit Profiles...』

第四步:在打开面板,左边应该是选中默认default,右边找到Command,默认应该是Login shell,选中Command,里面输入:expect ~/.ssh/example

第五步,下次打开iTerm2,是不是默认就登录上服务器了?极大提升效率。



///////--------------- Nginx下使Thinkphp URL模式支持PATHINFO和REWRITE ---------------/////////////////

第一步:找到location ~ \.php {   ,把$去掉,并在里面加上这两句

  fastcgi_split_path_info ^(.+\.php)(.*)$;       #增加
  fastcgi_param PATH_INFO $fastcgi_path_info;    #增加

  即:
  location ~ \.php { #去掉$
      root       html
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include        fastcgi_params;
      fastcgi_split_path_info ^(.+\.php)(.*)$;     #添加
      fastcgi_param PATH_INFO $fastcgi_path_info;    #添加
  }


第二步:支持REWRITE去掉index.php

   找到location / {  在里面加上

    if (!-e $request_filename) {
       rewrite  ^/(.*)$ /index.php?s=$1  last;
       break;
    }

   即:
   location / {
        root       html
        index  index.html index.htm index.php;

        if (!-e $request_filename) {                 #添加
               rewrite  ^/(.*)$ /index.php?s=$1  last; #添加
               break;                                 #添加
        }                                             #添加
    }


第三步:如果thinkphp不是部署在网站根目录下,即需要把

  rewrite  ^/(.*)$ /index.php?s=$1  last;
  改成
  rewrite  ^/子目录/(.*)$ /子目录/index.php?s=$1  last;

第四步:如果根目录下有多个项目的话,可以写多个rewrite:

   if (!-e $request_filename) {
      rewrite  ^/项目1/(.*)$ /项目1/index.php?s=$1  last;
      rewrite  ^/项目2/(.*)$ /项目2/index.php?s=$1  last;
      rewrite  ^/项目3/(.*)$ /项目3/index.php?s=$1  last;
      break;
 }

部分素材资源来源网站,本站提供免费下载,如有侵权请联系站长马上删除!
上一篇:iphone6开机一直卡在开机画面 下一篇:SVN被锁定,svn is already locked解决方法
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
选择头像:
最新评论

猜你喜欢