Subversion (SVN) は、分岐管理システムを介して時間の経過に伴うデータの変化を効率的に管理するオープンソースのバージョン管理システムです。 このトピックでは、ECSにSVNをデプロイして使用する方法について説明します。
準備
SVNをデプロイするためのECSインスタンスを作成します。 詳細については、「カスタム購入インスタンス」をご参照ください。
インスタンスは次の要件を満たす必要があります。
インスタンスには、静的パブリックIPアドレスが割り当てられているか、Elastic IPアドレス (EIP) に関連付けられています。 パブリックアクセスを有効にする方法がわからない場合は、「パブリックアクセスの有効化」をご参照ください。
オペレーティングシステム: Alibaba Cloud Linux 3、Alibaba Cloud Linux 2、またはCentOS 7.x。
インスタンスタイプ: SVNサービスのデプロイに必要なインスタンスタイプは、プロジェクトの仕様とチームサイズによって異なります。 4 vCPUと4 GiB以上のインスタンスタイプを使用することをお勧めします。
インバウンドルールがインスタンスのセキュリティグループに追加され、ポート22、80、および443のトラフィックが許可されます。 詳細については、「セキュリティグループルールの追加」をご参照ください。
説明svnserveを使用してSVNにアクセスする場合は、インバウンドセキュリティグループルールを追加してポート3690を開きます。
SVNのデプロイ
SVNは、HTTPとsvnserveの2つのアクセスモードをサポートします。 これら2つのモードの主な違いは次のとおりです。 ビジネスニーズに基づいて、次のいずれかの展開方法を選択します。
特徴 | HTTPモード | svnserveモード |
プロトコル | 通信用のHTTP。 | 通信用のカスタムSVNプロトコル。 |
アクセス方法 | Webブラウザまたはクライアント。 | クライアントのみ。 |
ポート | 通信用ポート80。 | 通信用のポート3690。 |
セキュリティ | 暗号化通信のHTTPS。 | デフォルトでは、平文通信。 暗号化設定は、安全な通信に適用できます。 |
設定 | webサーバー上の設定。 | SVNサーバー上の設定。 |
サポートされる機能 | アクセス制御やログクエリなどのその他の機能。 | より少なく、より簡単な機能。 |
HTTP経由でSVNをデプロイする
ステップ1: SVNのインストール
SVNをインストールするLinuxインスタンスに接続します。
詳細については、「WorkbenchでSSHを使用したLinuxインスタンスへのログイン」をご参照ください。
次のコマンドを実行してSVNをインストールします。
sudo yum install -y subversion
次のコマンドを実行して、SVNのバージョンを確認します。
svnserve --version
出力はSVNがインストールされていることを確認します。
ステップ2: Apacheのインストール
次のコマンドを実行して、Apache HTTP Server (httpd) をインストールします。
sudo yum install httpd -y
次のコマンドを実行して、httpdのバージョンを確認します。
httpd -version
出力はhttpdがインストールされていることを確認します。
ステップ3: mod_dav_svnのインストール
mod_dav_svnは、SVNリポジトリへのwebアクセスを可能にするApache HTTP Serverモジュールです。
次のコマンドを実行してmod_dav_svnをインストールします。
sudo yum install mod_dav_svn -y
ステップ4: SVNの設定
次のコマンドを順番に実行して、SVNリポジトリを作成します。
sudo mkdir /var/svn cd /var/svn sudo svnadmin create /var/svn/svnrepos
次のコマンドを実行して、SVNリポジトリの所有権をapacheユーザーに変更します。
sudo chown -R apache:apache /var/svn/svnrepos
次のコマンドを順番に実行して、SVNリポジトリに自動的に生成されたファイルを確認します。
cd svnrepos ls
次の表に、SVNリポジトリ内のディレクトリとファイルを示します。
フォルダ
説明
db
すべてのバージョン管理データファイルを格納します。
フック
フックスクリプトを格納します。
locks
SVNリポジトリロックファイルを格納し、リポジトリへのアクセスを追跡するために使用できるディレクトリ。
フォーマット
単一の整数値を含むテキストファイル。 値は、現在のSVNリポジトリのバージョン番号を示します。
conf
リポジトリのユーザー名とアクセス権限を格納するSVNリポジトリ構成ファイル。
次のコマンドを実行して、SVNリポジトリのユーザー名とパスワードを設定します。
SVNパスワードはプレーンテキストで保存されます。 HTTPはプレーンテキストパスワードをサポートしていないため、passwdという名前の別のファイルを作成します。 この例では、パスワード
passWDTest
でuserTest
という名前のユーザーを追加します。 状況に応じて、次のいずれかのコマンドを使用します。最初のユーザーをSVNリポジトリに追加するには、
-c
パラメーターを使用してファイルを作成します。sudo htpasswd -c /var/svn/svnrepos/conf/passwd userTest
ユーザーを追加するには、次のコマンドを使用します。
sudo htpasswd /var/svn/svnrepos/conf/passwd userTest
プロンプトが表示されたら、ユーザーのパスワードを入力します。
SVNリポジトリのconfディレクトリに移動します。
cd /var/svn/svnrepos/conf/
ユーザーの読み取りおよび書き込み権限を設定します。
次のコマンドでアクセス制御ファイルを開きます。
sudo vim authz
i
を押して編集モードに入ります。ファイルの最後に、次の行を追加して、ユーザー (userTest) に読み取り (r) および書き込み (w) 権限を付与します。
[/] userTest=rw
[Esc]
を押して:wq
と入力し、保存して終了します。
SVN設定ファイルを変更します。
次のコマンドでSVN設定ファイルを開きます。
sudo vim svnserve.conf
i
を押して編集モードに入ります。次の行の先頭から数字記号 (#) とスペースを削除します。
説明行の前にスペースがないこと、および等号 (=) の前後にスペースがあることを確認します。
anon-access = read auth-access = write password-db = passwd authz-db = authz realm = /var/svn/svnrepos
[Esc]
を押して:wq
と入力し、保存して終了します。
SVNリポジトリへの絶対パスを指定して、次のコマンドでSVNサービスを起動します。
次のコマンド例では、SVNリポジトリへの絶対パスを指定します。
sudo svnserve -d -r /var/svn/svnrepos/
説明SVNサービスを停止するには、
killall svnserve
コマンドを実行します。SVNサービスが次のコマンドで開始されたことを確認します。
ps -ef |grep svn
次に示す出力は、SVNサービスが実行中であることを示します。
ステップ5: Apacheの設定
次のコマンドでApache設定ファイルを追加および編集します。
sudo vim /etc/httpd/conf.d/subversion.conf
i
を押して編集モードに入ります。subversion.conf
ファイルに次の構成情報を入力します。<Location /svn> DAV svn SVNParentPath /var/svn AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /var/svn/svnrepos/conf/authz AuthUserFile /var/svn/svnrepos/conf/passwd Require valid-user </Location>
[Esc]
を押して:wq
と入力し、保存して終了します。次のコマンドでApacheサービスを起動します。
sudo systemctl start httpd.service
SVNへのsvnserveアクセスのデプロイ
ステップ1: SVNのインストール
SVNをインストールするLinuxインスタンスに接続します。
詳細については、「WorkbenchでSSHを使用したLinuxインスタンスへのログイン」をご参照ください。
次のコマンドを実行してSVNをインストールします。
sudo yum install -y subversion
次のコマンドを実行して、SVNのバージョンを確認します。
svnserve --version
出力はSVNがインストールされていることを確認します。
ステップ2: SVNの設定
次のコマンドを順番に実行して、SVNリポジトリを作成します。
sudo mkdir /var/svn cd /var/svn sudo svnadmin create /var/svn/svnrepos
次のコマンドを順番に実行して、SVNリポジトリに自動的に生成されたファイルを確認します。
cd svnrepos ls
次の表に、SVNリポジトリ内のディレクトリとファイルを示します。
フォルダ
説明
db
すべてのバージョン管理データファイルを格納します。
フック
フックスクリプトを格納します。
locks
SVNリポジトリロックファイルを格納し、リポジトリへのアクセスを追跡するために使用できるディレクトリ。
フォーマット
単一の整数値を含むテキストファイル。 値は、現在のSVNリポジトリのバージョン番号を示します。
conf
リポジトリのユーザー名とアクセス権限を格納するSVNリポジトリ構成ファイル。
SVNリポジトリのユーザー名とパスワードを設定します。
次のコマンドでユーザー設定ファイルを開きます。
cd conf/ sudo vim passwd
i
を押して編集モードに入ります。[users] で、次の形式でユーザー名とパスワードを追加します。username = password. たとえば、
userTest = passWDTest
です。説明等号 (=) の前後にスペースを追加します。
[Esc]
を押して:wq
と入力し、保存して終了します。
ユーザーの読み取りおよび書き込み権限を設定します。
次のコマンドでアクセス制御ファイルを開きます。
sudo vim authz
i
を押して編集モードに入ります。ファイルの最後に、次の行を追加して、ユーザー (userTest) に読み取り (r) および書き込み (w) 権限を付与します。
[/] userTest=rw
[Esc]
を押して:wq
と入力し、保存して終了します。
SVN設定ファイルを変更します。
次のコマンドでSVN設定ファイルを開きます。
sudo vim svnserve.conf
i
を押して編集モードに入ります。次の行の先頭から数字記号 (#) とスペースを削除します。
説明行の前にスペースがないこと、および等号 (=) の前後にスペースがあることを確認します。
anon-access = read auth-access = write password-db = passwd authz-db = authz realm = /var/svn/svnrepos
[Esc]
を押して:wq
と入力し、保存して終了します。
SVNリポジトリへの絶対パスを指定して、次のコマンドでSVNサービスを起動します。
次のコマンド例では、SVNリポジトリへの絶対パスを指定します。
sudo svnserve -d -r /var/svn/svnrepos/
説明SVNサービスを停止するには、
killall svnserve
コマンドを実行します。SVNサービスが次のコマンドで開始されたことを確認します。
ps -ef |grep svn
次に示す出力は、SVNサービスが実行中であることを示します。
SVNの使用
このセクションでは、SVNでコードを管理する手順について説明します。
チェックアウト: SVNリポジトリからチェックアウトして、ローカルデバイスにソースコードの作業コピーを作成します。
他のユーザは、リポジトリ内のソースコードに対する変更を修正し、コミットすることができる。
更新: リポジトリからローカル作業コピーにソースコードの最新バージョンを取得します。
ローカル作業コピーのソースコードを変更してデバッグします。
コミット: 他のユーザーが更新されたコードにアクセスできるように、変更をリポジトリに送信します。
ローカルディレクトリへのソースコードのチェックアウト (Checkout)
ローカルのWindowsマシンにTortoiseSVNクライアントをダウンロードしてインストールできます。
ローカルプロジェクトフォルダーを右クリックし、SVN Checkoutを選択します。
たとえば、プロジェクトフォルダーは
C:\Test
です。ポップアップメニューで、[SVN Checkout...] を選択します。
リポジトリURLとチェックアウトディレクトリを入力し、[OK] をクリックします。
リポジトリのURL: ソースコードが格納されているURL。
HTTPアクセスモード: URL経由でアクセスするには、
http://<ECSインスタンスパブリックIP>/svn/<SVNリポジトリ名>
の形式を使用します。svnserveアクセスモードの場合、URL形式は
svn:///
です。説明SVNがSVNリポジトリの上のディレクトリで起動されている場合は、チェックアウトURLにリポジトリ名を含めます。
チェックアウトディレクトリ: ソースコードがチェックアウトされるディレクトリ。 この例では、ディレクトリは
C:\Test
です。
説明最初のログインで、passwdファイルに設定したユーザー名とパスワードを入力します。
以下は、チェックアウト操作を実行した後の結果の図です。
更新の取得 (更新)
SVNリポジトリ内のプロジェクトを更新したら、ローカルプロジェクトフォルダーを右クリックし、SVN Updateを選択して最新のプロジェクトファイルをダウンロードします。 更新が表示されます。
SVN Updateを選択すると、プロジェクトフォルダ内のすべてのファイルが上書きされます。 データの損失を防ぐため、更新前にプロジェクトをバックアップすることをお勧めします。
Commit changes (コミット)
ローカルの変更をリポジトリにコミットするには、次の手順に従います。
プロジェクトフォルダーを右クリックし、SVN Commit... を選択します。
変更のコメントを入力し、コミットするファイルを選択して、[OK] をクリックします。
ローカルの変更がSVNリポジトリにコミットされ、プロジェクトに反映されます。
説明リポジトリに新しいバージョンのファイルが存在するために競合が発生した場合、コミットは失敗します。 これを解決するには、ローカルプロジェクトをバックアップし、SVNリポジトリから最新のファイルをチェックアウトし、ローカルで変更を加えてから、リポジトリにコミットします。
コミットしているプロジェクトからファイルを削除すると、次のメッセージが表示されます。
ファイルの復元
SVNで削除されたファイルを復元するには、次の手順に従います。
ローカルプロジェクトフォルダーを開き、右クリックして [SVN Checkout...] を選択し、データをチェックアウトします。
作業コピーからファイルを削除します。
削除操作をSVNリポジトリにコミットしたかどうかに応じて、次のいずれかの方法で削除されたファイルを復元します。
削除操作がコミットされていない場合は、右クリックして
を選択します。削除操作がコミットされると、ファイルはリポジトリから削除されます。 復元するには、次の手順を実行します。
右クリックし、
を選択して操作ログを表示します。ログで、ファイルの削除エントリを見つけてクリックし、詳細を確認します。
削除したファイルを右クリックし、[Save Revision To...] を選択します。
保存ダイアログボックスでファイル名を入力し、[保存 (S)] をクリックして、削除したファイルを元の場所に復元します。
元のフォルダーに戻り、SVN Commit... を選択して、復元されたファイルをリポジトリと同期します。
よくある質問
TortoiseSVNを使用してSVNサーバにアクセスするときに、ホストが応答しないことを示すエラーメッセージが表示されるのはなぜですか。
ホストが応答しないことを示すエラーメッセージは、次の原因があります。
SVNサーバが起動していません。
SVNサーバーに必要なポートが、関連付けられたセキュリティグループで開いていません。
firewalldサービスはECSインスタンスでアクティブですが、SVNサーバーが必要とするポートでのトラフィックを許可しません。
問題をトラブルシューティングするには、次の手順を実行します。
SVNサービスのステータスを確認します。
ps -ef |grep svn
SVNサービスが起動している場合、次の画像のような出力が表示されます。 そうでない場合は、
sudo svnserve -d -r /var /SVN /svnrepos/
コマンドを使用してsvnサービスを開始します。ECSインスタンスのセキュリティグループルールがSVNサーバーの必要なポートを許可しているかどうかを確認します。
HTTPモードの場合: ポート22、80、および443が開いていることを確認します。
svnserveモードの場合: ポート22、80、443、および3690が開いていることを確認します。
firewalldサービスのステータスを確認してください。
firewalldサービスがアクティブかどうかを確認します。
sudo firewall-cmd --state
コマンド出力が
実行中
でないと表示される場合、firewalldサービスは非アクティブであり、SVNサーバーに影響を与えません。コマンド出力が
実行中
と表示される場合、firewalldサービスが開始され、次のステップに進むことができます。
SVNのfirewalldルールで必要なポート (ポート3690など) を開きます。
sudo firewall-cmd --add-port=3690/tcp --per
新しい設定を適用するには、
firewalld
サービス設定をリロードします。sudo systemctl reload firewalld