凌峰创科服务平台

centos svn 服务器搭建

环境准备

  • 操作系统: CentOS 7 / CentOS 8 / CentOS Stream 9 (本教程以 CentOS 7 为例,其他版本命令基本相同)
  • 目标: 创建一个名为 myproject 的版本库,并设置两个用户:dev1dev2
  • 服务器IP: 假设为 168.1.100

第一步:安装 SVN 服务器

CentOS 7 的官方软件源中包含了 subversion 包,我们可以直接使用 yum 进行安装。

centos svn 服务器搭建-图1
(图片来源网络,侵删)
  1. 更新系统软件包

    sudo yum update -y
  2. 安装 SVN 服务器

    sudo yum install subversion -y
  3. 验证安装 安装完成后,检查 svnserve 是否已安装并可用。

    svnserve --version

    如果看到版本信息,则表示安装成功。

    centos svn 服务器搭建-图2
    (图片来源网络,侵删)

第二步:创建 SVN 版本库

版本库是存储所有文件和版本历史的地方,我们通常会选择一个专门的目录来存放所有版本库。

  1. 创建版本库根目录

    sudo mkdir -p /var/svn
    sudo chown -R apache:apache /var/svn  # 如果通过Apache访问,需要这个权限
  2. 创建新的版本库 这里我们创建一个名为 myproject 的项目。

    sudo svnadmin create /var/svn/myproject
  3. 查看版本库结构 创建完成后,进入 myproject 目录,你会看到以下结构:

    centos svn 服务器搭建-图3
    (图片来源网络,侵删)
    cd /var/svn/myproject
    ls -l

    你会看到:

    • conf/: 存放配置文件的目录。
    • db/: 存储版本数据的核心目录。
    • hooks/: 存放钩子脚本的目录。
    • locks/: 用于锁定,防止冲突。
    • format: 一个文本文件,包含版本库的格式版本。

第三步:配置 SVN 访问权限

这是最关键的一步,我们需要在 conf 目录下修改三个配置文件。

  1. 进入配置目录

    cd /var/svn/myproject/conf
  2. 配置用户密码 (passwd 文件) 这个文件用于定义哪些用户可以访问 SVN 服务器。 编辑 passwd 文件:

    sudo vim passwd

    在文件末尾添加用户和密码,格式为 用户名 = 密码

    [users]
    # harry = harryssecret
    # sally = sallyssecret
    dev1 = password_for_dev1
    dev2 = password_for_dev2
  3. 配置权限 (authz 文件) 这个文件用于定义用户或用户组对不同版本库或目录的读写权限。 编辑 authz 文件:

    sudo vim authz

    清空文件内容,然后按以下方式配置:

    • [groups] 定义用户组。
    • [/] 表示对整个版本库的权限。
    • r 表示只读,w 表示读写。
    [groups]
    # 定义一个开发组,包含 dev1 和 dev2
    developers = dev1, dev2
    [/]
    # 管理员,拥有读写权限
    admin = rw
    # 给 developers 组授予读写权限
    @developers = rw
    # 可以单独给用户赋予权限,会覆盖组权限
    # dev1 = rw
    # dev2 = r
  4. 配置服务器核心参数 (svnserve.conf 文件) 这个文件是 svnserve 的主配置文件,它告诉 SVN 服务器去哪里找用户和权限配置。 注意: svnserve.conf 中的注释是以 开头的,并且键值对格式为 键 = 值两边不能有空格

    编辑 svnserve.conf 文件:

    sudo vim svnserve.conf

    修改或取消注释以下几行:

    [general]
    # 使用我们上面配置的 passwd 文件
    password-db = passwd
    # 使用我们上面配置的 authz 文件
    authz-db = authz
    # 指定匿名用户的权限,默认是 'r',我们设为 'none' 表示禁止匿名访问
    anon-access = none
    # 指定认证用户的权限,默认是 'rw',我们保持 'rw'
    auth-access = write
    # realm 是一个认证域,在客户端连接时会显示,可以自定义,但要和库名一致
    realm = My First Project Repository

**第四步:启动 SVN 服务并设置开机自启

  1. 启动 SVN 服务 我们使用 -d 选项让 svnserve 在后台运行(守护进程模式),-r 选项指定版本库的根目录。

    sudo svnserve -d -r /var/svn
    • -d: daemon mode (后台运行)
    • -r /var/svn: 指定版本库的根目录,这样用户就可以通过 svn://192.168.1.100/myproject 访问到 myproject 版本库。
  2. 检查 SVN 服务状态

    ps aux | grep svnserve
    # 或者使用 netstat 查看端口
    netstat -tulnp | grep svnserve

    你应该能看到 svnserve 进程正在运行,并且监听在默认的 3690 端口。

  3. 设置开机自启 为了让服务器重启后 SVN 服务能自动启动,我们可以创建一个 systemd 服务文件。 创建文件:

    sudo vim /etc/systemd/system/svnserve.service
    [Unit]
    Description=Subversion protocol daemon
    After=network.target
    [Service]
    Type=forking
    ExecStart=/usr/bin/svnserve -d -r /var/svn
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target

    然后重新加载 systemd 并启用服务:

    sudo systemctl daemon-reload
    sudo systemctl enable svnserve.service
    sudo systemctl start svnserve.service

第五步:客户端连接测试

我们可以从另一台机器(或者在服务器本地)使用 SVN 客户端来测试连接了。

  1. 检出项目 使用 svn checkout (或 svn co) 命令,将版本库中的代码检出到本地。

    # 格式: svn://服务器IP/版本库名
    svn checkout svn://192.168.1.100/myproject /tmp/myproject_test

    系统会提示你输入用户名和密码。

    Authentication realm: <svn://192.168.1.100:3690> My First Project Repository
    Username: dev1
    Password: <输入 dev1 的密码>

    输入正确后,项目就会被检出到 /tmp/myproject_test 目录。

  2. 测试提交 进入检出的目录,添加一个新文件并尝试提交,以验证写权限。

    cd /tmp/myproject_test
    echo "This is a test file." > test.txt
    svn add test.txt
    svn commit -m "Add test.txt from dev1"

    再次输入用户名 dev1 和密码,如果提交成功,说明配置完全正确!


常见问题与扩展

防火墙配置

如果你的服务器开启了防火墙,需要开放 svnserve 默认的 3690 端口。

# 永久开放 3690 端口
sudo firewall-cmd --permanent --add-port=3690/tcp
sudo firewall-cmd --reload
# 或者直接关闭防火墙(仅限测试环境)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

通过 Web (Apache) 访问 SVN

svnserve 是一个轻量级的独立服务器,如果你希望通过 HTTP/S 协议访问(http://192.168.1.100/svn/myproject),并利用 Apache 的更多功能(如 SSL 加密),你需要安装 mod_dav_svn 模块,这比 svnserve 的配置更复杂,但功能更强大,更适合企业级应用。

使用 SSH 访问 SVN

对于小团队,通过 SSH 访问 SVN 也是一个非常安全和方便的选择,它不需要额外的密码,直接使用系统用户的 SSH 密钥进行认证,配置方法与 svnserve 不同,需要设置 svn+ssh:// 协议。

至此,您已经成功在 CentOS 服务器上搭建并配置好了一个功能完整的 SVN 服务器。

分享:
扫描分享到社交APP
上一篇
下一篇