Các bạn làm lập trình hẳn đều biết tầm quan trọng của việc quản lý các phiên bản của mã nguồn. Và hầu như mọi người đều đã được tiếp xúc qua với 1 chương trình quản lý phiên bản như CVS, Subversion (SVN), Visual Source Safe, Git, Mecurial... Ở đây, tôi sẽ giới thiệu về cách thức cài đặt chương trình quản lý phiên bản rất phổ biến là Subversion, kết hợp với các công cụ khác như apache (cung cấp cơ chế xác thực, sử dụng giao thức http/https), SVN access manager (Giao diện web quản lý phân quyền và mật khẩu người dùng), WebSVN (Đóng vai trò như 1 giao diện web của SVN client. Tuy nhiên chỉ dùng để xem). Để cài đặt được SVN access manager và WebSVN, chúng ta cần cài đặt thêm MySQL và PHP.
II. Thực hiện
1. Môi trường
Hệ điều hành:
- Opensuse 11.2 (VMWare)
- Ubuntu 11.04
- CentOS (VMWare) (Sẽ cập nhập bổ sung phần cài đặt sau)
Để quá trình test được nhanh, tôi sử dụng các file ảnh VMWare tại địa chỉ: http://www.thoughtpolice.co.uk/. Để đơn giản, quá trình cài đặt sẽ sử dụng user root và cài đặt qua các repository.
2. Cài đặt
a) Opensuse
- Cài đặt Mysql
# yast -i mysql
Sau khi cài đặt cần thiết lập để mysql được an toàn hơn
# /usr/bin/mysql_secure_installation
Các bước như sau:
+ Thiết lập mật khẩu root: mysql_root_pass
+ Gỡ bỏ người dùng nặc danh
+ Không cho phép truy cập tài khoản root từ xa
+ Gỡ bỏ cơ sở dữ liệu test
Bạn nào quan tâm đến chi tiết tại sao cần thực hiện vậy có thể tham khảo tại đây: http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html
Sau khi thực hiện xong đăng nhập vào mysql để người dùng/cơ sở dữ liệu cho SVN access manager sử dụng:
# mysql -u root -p
CREATE DATABASE svnadmin; CREATE USER svnadmin@localhost IDENTIFIED BY 'mysql_svnadmin_pass'; GRANT USAGE ON *.* TO svnadmin@localhost IDENTIFIED BY 'mysql_svnadmin_pass' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON svnadmin.* TO svnadmin@localhost;
exit
- Cài đặt apache, php, subversion
# yast -i apache2 apache2-mod_php5 php5 php5-mysql php5-gettext
# yast -i subversion subversion-server
- Tạo cấu trúc thư mục cài đặt
# cd /srv
# mkdir svn
# cd svn
# mkdir conf repos
- Tải các file cài đặt SVN access manager & WebSVN vào thư mục svn đã cài ở trên (Địa chỉ http://www.svn-access-manager.org/ & http://www.websvn.info/)
Giải nén và đổi tên các thư mục tương ứng.
# tar -xvfz svn_access_manager-0.5.0.3.tar.gz websvn-2.3.3.tar.gz
# mv svn_access_manager-0.5.0.3 svn_access_manager
# mv websvn-2.3.3 websvn
- Cấu hình nối apache và Subversion
# vi /etc/sysconfig/apache2
Bổ sung cấu hình APACHE_MODULES thêm các module: dav dav_svn authz_svn (APACHE_MODULES="...php5 dav dav_svn authz_svn")
Cấu hình xác thực SVN
# vi /etc/apache2/conf.d/subversion.conf
Bổ sung thêm:
<Location /svn>
DAV svn
SVNParentPath /srv/svn/repos
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /srv/svn/conf/password
AuthzSVNAccessFile /srv/svn/conf/authz
Require valid-user
</Location>
Thêm cấu hình subversion vào httpd.conf
# vi /etc/apache2/httpd.conf
Bổ sung thêm dòng
Include /etc/apache2/conf.d/subversion.conf
- Cấu hình website SVN access manager & WebSVN
# vi /etc/apache2/httpd.conf
Bổ sung thêm các dòng
# SVN access manager
Alias /svnacm /srv/svn/svn_access_manager
<Directory "/srv/svn/svn_access_manager">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# websvn
Alias /websvn /srv/svn/websvn
<Directory "/srv/svn/websvn">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Location /websvn/>
AuthType Basic
AuthName "Websvn"
AuthUserFile "/srv/svn/conf/password"
Require valid-user
</Location>
- Cấu hình websvn
# cd /srv/svn/websvn/include
# cp distconfig.php config.php
# vi config.php
Sửa các dòng:
$config->parentPath('/srv/svn/repos');
$config->useAuthenticationFile('/srv/svn/conf/authz');
Cấu hình SVN access manager
# mkdir /etc/svn-access-manager
# chown -R wwwrun:www /srv/svn
# chown wwwrun:www svn-access-manager
# chmod -R 740 /srv/svn
# chmod 740 /etc/svn-access-manager
Chú ý SVN access manager sử dụng thư mục /etc/svn-access-manager để quản lý cấu hình. Do đó, chúng ta cần tạo thư mục thư mục này trước. Tất cả các quá trình quản lý svn, chúng ta dự định qua web, do đó ta sẽ phân quyền sở hữu các thư mục cài đặt cho user wwwrun (là user được tạo ra khi cài đặt apache)
Kiểm tra file php.ini để đảm bảo svn access manager chạy chuẩn
# vi /etc/php5/apache2/php.ini
mysql.allow_persistent = On
date.timezone = Asia/Saigon
Khởi động apache để cấu hình SVN qua giao diện web:
# rcapache2 start
Đăng nhập http://[your host]/svnacm/install/install.php
Các bước cấu hình theo thứ tự bên dưới:
Bước 1: Lựa chọn cơ sở dữ liệu Mysql như hình dưới
Bước 2: Cung cấp cấu hình user, password của mysql (Đã tạo ở bước trên)
Bước 3: Thiết lập tập kí tự sử dụng trong website
Bước 4: Cung cấp thông tin về người dùng quản trị
Bước 5: Cấu hình các file chứa thông tin người dùng và file phân quyền svn
Bước 6: Hoàn thành cài đặt. Điều chỉnh lại độ dài tối thiểu mật khẩu người dùng nếu cần thiết.
Sau khi cài đặt xong, dùng user quản trị vừa tạo để đăng nhập vào địa chỉ: http://[your host]/svnacm và cấu hình user, phân quyền truy cập svn. Chi tiết cách thức sử dụng SVN access manager các bạn xem tại trang chủ của SVN access manager.
- Đăng nhập vào các địa chỉ http://[your host]/svn & http://[your host]/websvn để kiểm tra cấu hình đã đúng chưa.
- Sau khi cài đặt thành công, cần gỡ bỏ thư mục install của SVN access manager hoặc dùng file .httpaccess để chặn người dùng truy cập vào.
b) Ubuntu & CentOS
Để tránh phải viết lại 1 số bước không cần thiết, các bạn có thể tải file tóm tắt các bước cài đặt theo các địa chỉ sau:
https://sites.google.com/site/tranquangbk/archives/blog_quangtt/260911_subversion/svn_opensue.txt
https://sites.google.com/site/tranquangbk/archives/blog_quangtt/260911_subversion/svn_ubuntu.txt
(Phiên bản CentOS tạm thời nợ :D)
3. Các vấn đề cần chú ý
- Tại sao sử dụng SVN access manager?
SVN access manager cung cấp 1 giao diện web để người quản trị thông thường có thể không cần hiểu nhiều về SVN có thể phân quyền khá dễ dàng. Cá nhân tôi thích chỉnh sửa trực tiếp file authz hơn (Để an toàn, có thể cung cấp 1 hình thức như ftp server hoặc phân quyền 1 truy cập phù hợp để người quản trị có thể sửa file authz). Tuy nhiên tôi không phải là người quản trị SVN nên tôi quyết định sử dụng SVN access manager để giao việc cho người khác dễ dàng hơn.
- Quá trình cài đặt như thế đã đủ chưa?
Chưa đủ. Bạn cần phải quan tâm đến backup SVN. Mở rộng hơn nữa là cấu hình dùng LDAP để cung cấp cơ chế xác thực cho SVN; và quan trọng nhất là phải xây dựng chính sách sử dụng (policy) SVN thích hợp với điều kiện của công ty.
- Subversion quản lý được những gì?
Tất tần tật tài liệu và mã nguồn. Mặc dù vấn đề ban đầu chúng ta đề cập đến liên quan đến quản lý mã nguồn nhưng chúng ta hoàn toàn có thể sử dụng và nên svn để quản lý các tài liệu sử dụng trong công ty.
III. Tham khảo
1. http://en.wikipedia.org/wiki/Revision_control
2. http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
3. http://subversion.apache.org/
4. http://tortoisesvn.tigris.org/
5. http://www.svn-access-manager.org/
6. http://www.websvn.info/
7. http://www.thoughtpolice.co.uk/
8. http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html
# vi /etc/apache2/httpd.conf
Bổ sung thêm dòng
Include /etc/apache2/conf.d/subversion.conf
- Cấu hình website SVN access manager & WebSVN
# vi /etc/apache2/httpd.conf
Bổ sung thêm các dòng
# SVN access manager
Alias /svnacm /srv/svn/svn_access_manager
<Directory "/srv/svn/svn_access_manager">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# websvn
Alias /websvn /srv/svn/websvn
<Directory "/srv/svn/websvn">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Location /websvn/>
AuthType Basic
AuthName "Websvn"
AuthUserFile "/srv/svn/conf/password"
Require valid-user
</Location>
- Cấu hình websvn
# cd /srv/svn/websvn/include
# cp distconfig.php config.php
# vi config.php
Sửa các dòng:
$config->parentPath('/srv/svn/repos');
$config->useAuthenticationFile('/srv/svn/conf/authz');
Cấu hình SVN access manager
# mkdir /etc/svn-access-manager
# chown -R wwwrun:www /srv/svn
# chown wwwrun:www svn-access-manager
# chmod -R 740 /srv/svn
# chmod 740 /etc/svn-access-manager
Chú ý SVN access manager sử dụng thư mục /etc/svn-access-manager để quản lý cấu hình. Do đó, chúng ta cần tạo thư mục thư mục này trước. Tất cả các quá trình quản lý svn, chúng ta dự định qua web, do đó ta sẽ phân quyền sở hữu các thư mục cài đặt cho user wwwrun (là user được tạo ra khi cài đặt apache)
Kiểm tra file php.ini để đảm bảo svn access manager chạy chuẩn
# vi /etc/php5/apache2/php.ini
mysql.allow_persistent = On
date.timezone = Asia/Saigon
Khởi động apache để cấu hình SVN qua giao diện web:
# rcapache2 start
Đăng nhập http://[your host]/svnacm/install/install.php
Các bước cấu hình theo thứ tự bên dưới:
Bước 1: Lựa chọn cơ sở dữ liệu Mysql như hình dưới
Bước 2: Cung cấp cấu hình user, password của mysql (Đã tạo ở bước trên)
Bước 3: Thiết lập tập kí tự sử dụng trong website
Bước 4: Cung cấp thông tin về người dùng quản trị
Bước 5: Cấu hình các file chứa thông tin người dùng và file phân quyền svn
Bước 6: Hoàn thành cài đặt. Điều chỉnh lại độ dài tối thiểu mật khẩu người dùng nếu cần thiết.
Sau khi cài đặt xong, dùng user quản trị vừa tạo để đăng nhập vào địa chỉ: http://[your host]/svnacm và cấu hình user, phân quyền truy cập svn. Chi tiết cách thức sử dụng SVN access manager các bạn xem tại trang chủ của SVN access manager.
- Đăng nhập vào các địa chỉ http://[your host]/svn & http://[your host]/websvn để kiểm tra cấu hình đã đúng chưa.
- Sau khi cài đặt thành công, cần gỡ bỏ thư mục install của SVN access manager hoặc dùng file .httpaccess để chặn người dùng truy cập vào.
b) Ubuntu & CentOS
Để tránh phải viết lại 1 số bước không cần thiết, các bạn có thể tải file tóm tắt các bước cài đặt theo các địa chỉ sau:
https://sites.google.com/site/tranquangbk/archives/blog_quangtt/260911_subversion/svn_opensue.txt
https://sites.google.com/site/tranquangbk/archives/blog_quangtt/260911_subversion/svn_ubuntu.txt
(Phiên bản CentOS tạm thời nợ :D)
3. Các vấn đề cần chú ý
- Tại sao sử dụng SVN access manager?
SVN access manager cung cấp 1 giao diện web để người quản trị thông thường có thể không cần hiểu nhiều về SVN có thể phân quyền khá dễ dàng. Cá nhân tôi thích chỉnh sửa trực tiếp file authz hơn (Để an toàn, có thể cung cấp 1 hình thức như ftp server hoặc phân quyền 1 truy cập phù hợp để người quản trị có thể sửa file authz). Tuy nhiên tôi không phải là người quản trị SVN nên tôi quyết định sử dụng SVN access manager để giao việc cho người khác dễ dàng hơn.
- Quá trình cài đặt như thế đã đủ chưa?
Chưa đủ. Bạn cần phải quan tâm đến backup SVN. Mở rộng hơn nữa là cấu hình dùng LDAP để cung cấp cơ chế xác thực cho SVN; và quan trọng nhất là phải xây dựng chính sách sử dụng (policy) SVN thích hợp với điều kiện của công ty.
- Subversion quản lý được những gì?
Tất tần tật tài liệu và mã nguồn. Mặc dù vấn đề ban đầu chúng ta đề cập đến liên quan đến quản lý mã nguồn nhưng chúng ta hoàn toàn có thể sử dụng và nên svn để quản lý các tài liệu sử dụng trong công ty.
III. Tham khảo
1. http://en.wikipedia.org/wiki/Revision_control
2. http://en.wikipedia.org/wiki/Comparison_of_revision_control_software
3. http://subversion.apache.org/
4. http://tortoisesvn.tigris.org/
5. http://www.svn-access-manager.org/
6. http://www.websvn.info/
7. http://www.thoughtpolice.co.uk/
8. http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html






Chào anh, anh co file cấu hình dành cho CentOS không anh, vì em đang thực hành trên CentOS nên thư mục cấu trúc khác. Thanks anh rất nhiều
Trả lờiXóa