部署SVN服务器

虽然 Git 已经满足代码版本托管, 但是对于美术/策划等工作来说没必要搞什么代码托管或者版本管理, 只需要不断推送就行了.

这里基于 debian 系统安装

1
2
3
4
5
# 安装 subversion 软件
sudo apt install -y subversion

# 之后创建版本库
sudo mkdir /svn && cd /svn

生成版本库

这里多版本库首先定义好子版本库, 以后不断扩展不同版本库:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建子版本库 code 
sudo mkdir -p /svn/code && cd /svn/code

# 生成版本库
sudo svnadmin create /svn/code

# 没问题就含有以下文件目录:
# conf
# db
# format
# hooks
# locks
# README.txt

这里主要修改配置文件 conf:

  • conf/authz: 权限控制
  • conf/passwd: 账号密码文件
  • conf/svnserve.conf: 服务器配置文件

首先修改账号密码文件( conf/passwd ):

1
2
3
[users]
# 账号 = 密码
meteorcat = meteorcat

之后就是追加权限 ( conf/authz ):

1
2
3
4
# 这里以 '/' 为根结点, 可以衍生后续多个目录权限限制
[/]
# meteorcat 对 /code 具有读写权限
meteorcat = rw

最后就是服务文件 ( conf/svnserve.conf ):

1
2
3
4
5
6
# 注意配置前面不要有空格
anon-access = none # 匿名用户不给可读
auth-access = write # 授权用户可写
password-db = passwd # 密码配置文件
authz-db = authz # 权限分组文件
realm = /svn/code # 代码库所在目录

配置编写之后还不要启动服务, 因为还需要做好安全权限配置.

安全配置

这里需要判断下 svn 账户是否存在, 如果没有的话需要创建:

1
2
3
4
5
# 如果没有创建 svn 需要创建账号
sudo useradd -r -s /bin/false svn

# 之后需要将版本库授权给 svn
sudo chown -R svn:svn /svn

最后编写系统启动文件:

1
2
# 编写泛用配置文件
sudo vim /etc/systemd/system/svnserve@.service

svnserve@.service 的配置文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description = Subversion Protocol Daemon: %i
After = network.target

[Service]
User = svn
Group = svn
Type = forking
PIDFile = /run/svnserve/svnserve-%i.pid
EnvironmentFile = /etc/default/svnserve.d/%i
ExecStart = /usr/bin/svnserve $DAEMON_ARGS
KillMode = control-group
Restart = on-failure

[Install]
WantedBy = multi-user.target

生成下以下配置文件:

1
2
3
4
5
# 生成配置目录
sudo mkdir /etc/default/svnserve.d

# 生成加载环境配置文件
sudo vim /etc/default/svnserve.d/code

code 文件内容:

1
2
3
# svnserve options
# 如果想修改端口可以追加 --listen-port=9999 配置
DAEMON_ARGS = "--daemon --pid-file /run/svnserve/svnserve-code.pid --root /svn/code"

最后就是启动服务命令等

1
2
3
4
5
6
7
8
9
# 先创建 pid 目录
sudo mkdir -p /run/svnserve
sudo chown -R svn:svn /run/svnserve

# 启动 code 服务组
sudo systemctl start svnserve@code.service

# 开机默认启动
sudo systemctl enable svnserve@code.service

最后下载小乌龟默认访问下 svn://地址/(默认端口3690):

1
2
# 命令行指令
svn checkout svn://127.0.0.1/ --username xxx --password yyy

客户端下载地址:

Hook脚本

用于提交后自动拉取部署, 主要采用 post-commit 文件拉取最新版本, 注意先 passwd 创建好拉取账号密码;
对应的模板配置文件放置于版本库 xxx/hooks/post-commit.tmpl