如何在Synology NAS上启动基于Docker的 SVN 服务器?
目的
在本教程中,我们将引导您了解如何基于Docker映像启动 SVN 服务器。我们使用的映像是marvambass/subversion ,这是一个支持 Apache 安全 SSL 访问的 SVN 服务器映像。 1我们还使用iF.SVNAdmin (一个网页 GUI)来管理存储库和用户/群组权限。
注:
- 请在开始之前安装 Apache。
解决方案
设置目录
在启动基于Docker的 SVN Server 之前,请确保已设置目录并已完成以下任务:
- 在Synology NAS上安装Docker套件并启用SSH服务。
- 在计算机上安装 PuTTY 或类似工具,并在计算机与 NAS 之间建立连接以运行SSH。
- 在Synology NAS上设置符合以下 SVN Server 项目结构的目录。
- dav_svn.conf用于替换marvambass/subversion中的原始配置
- 用于构建自己的映像的Dockerfile
- iF.SVNAdmin用于管理新的 SVN 服务器在图像文件中
- start.sh是启动服务器的脚本
- 在此下载iF.SVNAdmin的源代码。
构建目录包含:
上述文件的示例代码:
dav_svn.conf
<Location /svn/>
DAV svn
SVNParentPath /var/local/svn/
SVNListParentPath on
AuthzSVNAccessFile /etc/apache2/dav_svn/dav_svn.authz
Satisfy any
Require valid-user
AuthType Basic
AuthName "Subversion"
AuthUserFile /etc/apache2/dav_svn/dav_svn.passwd
</Location>
Dockerfile
FROM marvambass/subversion
MAINTAINER user
ADD dav_svn.conf /etc/apache2/mods-available/dav_svn.conf
ADD iF.SVNAdmin/ /var/www/html/svnadmin/
RUN chmod 777 /var/www/html/svnadmin/data/
RUN sed -i '/svn-project-creator/c\' /etc/crontab
RUN sed -i '/svn-backuper/c\' /etc/crontab
start.sh
#!/bin/sh
SVN_ROOT_PATH=/volume1/docker/svn
REPO_PATH="$SVN_ROOT_PATH"/repos
DAV_SVN_CONF="$SVN_ROOT_PATH"/dav_svn
mkdir -p "$REPO_PATH" "$DAV_SVN_CONF"
touch "$DAV_SVN_CONF"/dav_svn.authz "$DAV_SVN_CONF"/dav_svn.passwd
chmod 666 "$DAV_SVN_CONF"/dav_svn.authz "$DAV_SVN_CONF"/dav_svn.passwd
docker run \
-d \
-v "$REPO_PATH":/var/local/svn \
-v "$DAV_SVN_CONF":/etc/apache2/dav_svn/ \
-p 40080:80 \
-p 40443:443 \
--name my_svn svn-server
修改Docker映像 marvambass/subversion
如果要修改Docker映像,可以尝试以下方法来修改dav_svn.conf和Dockerfile的框架。
- dav_svn.conf
这是用于 SVN 配置的文件。我们使用 AuthType Basic来验证用户帐户。如果要在原始映像中使用 AuthType Digest,请单击服务器配置以了解更多详细信息。 - Dockerfile
Docker可以通过从Dockerfile读取指令来自动构建 SVN 映像。如果您要自定义配置,请进入GitHub以了解更多详细信息。
基于 marvambass/subversion 构建您自己的Docker映像
修改之后,键入以下脚本来构建您自己的 SVN 映像。
cd build
docker build -t svn-server .
这会构建一个名为svn-server的Docker映像,您可以通过键入dockerimages来查看它。
启动并设置 SVN Server
键入bash start.sh以运行脚本1 。容器开始运行后,您可通过以下 URL 访问iF.SVNAdmin 2 :
http://your_nas_ip:40080/svnadmin/
https://your_nas_ip:40443/svnadmin/
如果您是初次使用 SVN 服务器,则需要设置iF.SVNAdmin 。请根据下图配置设置。 3
注:
- start.sh是一个简单的脚本,用于设置和启动名为my_svn的 SVN 服务器容器。
- iF.SVNAdmin也支持LDAP验证。要了解更多信息,请单击服务器配置。
- 您还可以在路径/var/www/html/svnadmin/data/config.ini中更改容器的设置。要了解更多信息,请进入iF.SVNAdmin 。您还可以通过基于网页的 GUI 添加、删除或列出存储库、用户和权限。
将存储库迁移到基于 Docker 的 SVN 服务器
请按照下列步骤将套件中心的SVN Server存储库移转至基于 Docker 的 SVN Server。 SVN Server中的每个存储库都有自己的密码和验证文件。但是,密码和验证文件不会迁移,因为基于 Docker 的 SVN Server 映像的默认设置具有全局密码和验证文件。
- 进入 NAS 上的SVN Server并找到存储库。例如,在本教程中,repo1 是存储库,在 Tortoise SVN 中有两个 repo1 修订(可通过 SVN 客户端找到修订历史的信息)。
- 通过基于网页的 GUI 添加新的存储库repo1_on_docker 。
- 通过SSH登录到Synology NAS ,并运行以下命令以找到 SVN 服务器的CONTAINER ID :
- 使用以下CONTAINER ID访问容器:
- 将旧版 SVN 服务器上的存储库导出到容器中的文件:
- 将文件导入到新的存储库repo1_on_docker :
- 存储库可通过以下 URL 访问:
docker ps
docker exec -it CONTAINER ID bash
svnrdump dump --username aaa svn://nas_ip/repo1 > /var/tmp/ori.dump
svnadmin load --force-uuid /var/local/svn/repo1_on_docker/ < /var/tmp/ori.dump
http://your_nas_ip:40080/svn/repo1_on_docker/
https://your_nas_ip:40443/svn/repo1_on_docker/
SVN 客户端将在重定位之前自动检查新旧存储库的 UUID。请使用相同的 UUID 并添加–force-uuid以防启动失败。
是 / 否
感谢您的反馈!