不少团队的代码、设计稿和文档还在用SVN管理,老项目和游戏美术资源尤其如此。迁到阿里云ECS上以后,通常要解决三件事:SVN服务怎么跑起来,权限怎么分,数据怎么保得住。下面用一个小团队的做法,讲清楚阿里云ECS上搭建SVN仓库的具体步骤。

阿里云没有现成的SVN托管
先说清楚这一点。阿里云的代码管理产品云效Codeup以Git为主,SVN不是它的核心能力。要在阿里云上用SVN,一般有三条路:
- ECS自建:在云服务器上安装Subversion,用svnserve,或者Apache加mod_dav_svn对外提供服务。灵活度最高,运维也全靠自己。
- 应用镜像:到云市场找现成的SVN服务镜像,省掉部署时间。使用前要看镜像的更新记录和安全补丁情况,别只看上架时间。
- 迁移到Git:如果团队的工作流并不离不开SVN,迁到Codeup或其他Git平台,之后的维护成本会低很多。
短期内还要继续用SVN,就走ECS自建。能迁的话,长期看迁到Git更省事。
一个五人设计团队的例子
下面用一个五人UI设计小组来说明。他们的情况在老项目团队里很常见:用了十年本地SVN服务器,设计稿体积大,二进制文件多。老机器的硬盘坏过一次,差点丢数据,于是决定迁到阿里云ECS上。需求也很具体:能远程访问,每人一个独立账号,定期备份,并且不直接暴露在公网。
他们选了2核4G的ECS,系统用Ubuntu,仓库数据放在单独挂载的云盘上。云盘后续扩容和做快照都方便。对五个人的团队来说,这个配置够用。
操作步骤
第一步:安装Subversion并创建仓库
登录ECS后先安装Subversion,再创建仓库目录:
sudo apt update
sudo apt install -y subversion
sudo mkdir -p /data/svn
sudo svnadmin create /data/svn/design
sudo chown -R svnuser:svnuser /data/svn
svnuser需要提前创建。不建议用root运行SVN服务,一旦出问题,影响范围会大得多。
第二步:配置账号和权限
编辑仓库下的conf/svnserve.conf,关闭匿名访问,开启密码认证:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = Design Repo
passwd文件保存用户名和密码,authz文件按目录分配读写权限。比如设计稿目录给设计师写权限,发布目录只给前端读权限。密码要有一定复杂度,也不要和其他系统共用。
第三步:收紧安全组,设置开机自启
svnserve默认监听3690端口。在阿里云控制台的安全组里,只放行团队办公网络或固定出口IP,不要对0.0.0.0/0开放。接着用systemd把服务设为开机自启,服务器重启后仓库能自动恢复可用。
提醒一句:只要SVN服务对公网可达,认证和IP限制就是必做项,否则任何人都能尝试连接仓库。团队规模变大后,可以改用Apache加HTTPS,证书加密传输,安全性会更好。
第四步:客户端连接与验证
设计师在本地用TortoiseSVN或命令行检出代码:
svn checkout svn://你的ECS公网IP/design ./design --username zhangsan
第一次连接后,每个人都做一次提交和更新,确认权限和网络没问题,再开始正式协作。这一步能避免项目做到一半才发现某个人没有写权限。
备份和运维要注意的几点
- 定期备份:用svnadmin dump导出仓库,同时对云盘做定时快照。只靠一种备份,风险还是太集中。
- 磁盘告警:仓库会随提交持续增长,设计稿增长得尤其快。在云监控里提前设置磁盘使用率告警,别等写不进去才发现。
- 离职清理:人员离开后,删除对应账号,同时清理authz里的相关条目,避免残留权限。
- 系统补丁:Subversion和操作系统都会发安全更新,定期打补丁,不要长期停在老版本。
前面那个五人团队,上线两个月后又加了每周一次的自动dump,备份文件同步到另一个地域的对象存储。后来有一次误删目录,他们二十分钟就恢复了。这个动作看起来多余,真出事时才知道值不值。
最后
在阿里云上跑SVN,关键是三件事:网络边界收紧,账号权限分清,数据备份可靠。做到这三点,SVN足以支撑中小团队的日常协作。如果项目还在早期,也可以顺手评估一下迁到Git,给以后留出余地。