Trong một môi trường có nhiều quản trị viên hệ thống, tôi thấy một vài lợi thế khi thêm các tệp cấu hình máy chủ vào hệ thống kiểm soát sửa đổi. Đáng chú ý nhất là khả năng theo dõi các thay đổi, những người đã thực hiện chúng, và tất nhiên có thể quay trở lại các cấu hình làm việc đã biết.
Tôi chủ yếu quan tâm đến các giải pháp Unix/Linux, nhưng cũng sẽ tò mò về việc triển khai Windows.
Tôi đã thử nghiệm điều này ở nhà (~ 3 máy chủ) một thời gian rồi, thử các scms khác nhau (RCS, Subversion, git). Thiết lập hoạt động hoàn hảo với tôi ngay bây giờ là git với hook setgitperms
.
Những điều bạn cần phải xem xét:
Xử lý quyền và quyền sở hữu tệp
svn
để làm điều nàysetgitperms
xử lý trong suốt này (tuy nhiên cần một phiên bản git khá gần đây có hỗ trợ cho các móc post-checkout
)Ngoài ra, nếu bạn không muốn tất cả /etc
Dưới sự kiểm soát phiên bản, nhưng chỉ những tệp bạn thực sự sửa đổi (như tôi), bạn sẽ cần một scm hỗ trợ loại sử dụng này.
*
" vào tệp .gitignore
cấp cao nhất và chỉ thêm những tệp bạn muốn sử dụng git add --force
Cuối cùng, có một số thư mục có vấn đề trong /etc
Trong đó các gói có thể bỏ các đoạn cấu hình mà sau đó được đọc bởi một số chương trình hoặc trình nền (/etc/cron.d
, /etc/modprobe.d
, V.v.). Một số chương trình này đủ thông minh để bỏ qua các tệp RCS (ví dụ: cron), một số thì không (ví dụ: modprobe). Điều tương tự với các thư mục .svn
. Lại một điểm cộng lớn cho git (chỉ tạo một thư mục .git
Cấp cao nhất).
Tôi đã thực hiện nó một cách không chính thức với git, nhưng cũng có dự án etckeeper là một triển khai chi tiết và đầy đủ hơn.
Một tùy chọn khác là sử dụng một công cụ cấu hình máy chủ tự động như Puppet hoặc Cfengine để kịch bản cấu hình máy chủ của bạn bằng ngôn ngữ khai báo.
Đó là công việc bổ sung ở mặt trước, nhưng sử dụng tiện ích như Puppet cho phép bạn tự động xây dựng lại và định cấu hình máy chủ với rất ít sự can thiệp của con người.
Tôi đã thử nghiệm với etckeeper có vẻ hoạt động khá tốt. Tôi không yêu cầu một máy chủ tập trung, có thể quan trọng trong một số tình huống. Bạn có thể sử dụng một số phụ trợ DVCS khác nhau, vì vậy bạn có thể chọn một phụ kiện quen thuộc nhất. Nó dường như hoạt động rất tốt đối với tôi, nhưng tôi chưa thử sử dụng các công nghệ khác nơi tôi làm việc để bắt đầu sử dụng nó.
Tôi đã xem xét Đầu bếp gần đây. Nó không chỉ giữ cấu hình templitable (.erb) trong kiểm soát phiên bản, mà còn cho phép bạn thực hiện các hành động (như khởi động lại dịch vụ sau khi bạn tải cấu hình lên nút). Đầu bếp giúp quản lý gói để bạn có thể xác minh phụ thuộc với bất kỳ nút nào bạn giao diện (nghĩa là phải cài đặt gói Sudo). Đầu bếp dường như có thể dễ dàng mở rộng trong Ruby, vì vậy nếu bạn có bất kỳ quy trình tùy chỉnh nào, bạn có thể chỉ cần viết kịch bản ra trong khuôn khổ được cung cấp.
Nhưng vẫn chưa thử và bạn phải cài đặt Ruby trên máy khách và máy chủ với các loại đá quý phù hợp (điều này thực sự không khó lắm). Nhìn chung, thực sự dễ dàng để quản lý nhiều máy chủ tại Một lần.
Tôi đang trong quá trình triển khai Puppet trên cơ sở hạ tầng của chúng tôi và việc giữ dữ liệu của nó trong kiểm soát phiên bản là rất thuận lợi.
Tôi thích Mercurial vì nó chỉ là một tập hợp các tệp với một số siêu dữ liệu được lưu trữ trong các thư mục ẩn (dễ quản lý, dễ hiểu, dễ sử dụng).
Các tập tin rối của tôi nằm ở/usr/local/etc/Puppet/(FreeBSD 7.1). Tất cả chỉ cần thêm Mercurial vào nó:
> cd /usr/local/etc/puppet
> hg init
Tất cả các thay đổi được cam kết với một "cam kết hg" đơn giản. Nếu một thay đổi làm hỏng một cái gì đó, tôi có thể khôi phục mọi máy chủ đơn lẻ vào một phiên bản nhất định của tệp (giả sử, sudoers) bằng một lệnh duy nhất.
Tôi đã sử dụng Subversion trên các máy chủ mà tôi quản lý. Hoạt động tốt. Tôi cũng đã thiết lập một ví dụ Trac , vì vậy chúng tôi có chế độ xem dòng thời gian, hệ thống bán vé, duyệt, v.v.
Sử dụng symlink, cron và Subversion Tôi cũng đã thiết lập phân phối cấu hình tự động dựa trên kho Subversion, nơi mọi máy chủ Linux cập nhật một kho lưu trữ bằng cách sử dụng svn update
với tập lệnh (ví dụ: tập lệnh tường lửa).
Đây là trường hợp sử dụng ngoài đời thực: Subversion được sử dụng để quản lý các tệp cấu hình trên 4 máy chủ khác nhau. Tôi khuyên bạn nên sử dụng kiểm soát phiên bản cho các tệp cấu hình với cùng lý do bạn sẽ sử dụng chúng với mã - đó là bản sao lưu và nút hoàn tác tất cả trong một. Nếu tôi đang quản lý một lượng lớn máy chủ hơn và chúng gần gũi hơn nhiều về cấu hình, tôi sẽ sử dụng một cái gì đó như Puppet như chi tiết trong câu trả lời của berberich.
Ý tưởng là bạn có thể có một kho lưu trữ mà bạn có thể kiểm tra các thư mục cụ thể trên các máy chủ (ví dụ:/var/tên /) để tôi có lịch sử và sao lưu các tệp cấu hình (bản sao lưu là phần thưởng nếu bạn mắc lỗi về việc sử dụng ứng dụng cấu hình GUI để xóa các bổ sung đã chỉnh sửa của bạn ho Quản trị viên máy chủ trong Mac OS X Server ho). Sau đó, thật dễ dàng để kiểm tra nó trên máy chủ thử nghiệm và sau đó cập nhật máy chủ sản xuất với các tệp hoạt động mà không cần sao chép tệp thủ công.
Tôi đã tạo một dự án vài năm trước để thực hiện chính xác điều này: Savon
Nó sử dụng Subversion để lưu trữ các tệp và có một số tính năng bổ sung, như theo dõi quyền sở hữu, quyền và bối cảnh SELinux. Nó cũng cho phép bạn phân chia một cách hợp lý các thay đổi hệ thống tệp của bạn theo từng lớp, do đó, ví dụ bạn có thể theo dõi các thay đổi sẽ đi đến tất cả các máy chủ web của mình.
Subversion rất dễ cài đặt và sử dụng và có rất nhiều tài nguyên:
Hầu hết các thay đổi của chúng tôi được quản lý với hệ thống Bàn trợ giúp của chúng tôi, ngay cả đối với các công cụ loại bảo trì định kỳ. Chúng tôi đã dần dần chuyển tài liệu của mình vào wiki để sử dụng riêng và những gì chúng tôi xuất bản cho người dùng cuối. Đăng các thay đổi cấu hình và thảo luận đằng sau nó, thật tuyệt khi được mở trên mạng nội bộ của chúng tôi.
Trong nhiều năm, tôi đã sử dụng rcs cho các tệp mà tôi đã bắt đầu sửa đổi, nhưng một vài năm trước tôi đã bắt đầu đặt toàn bộ/etc dưới sự kiểm soát của git. Nó đòi hỏi một số công việc để kiểm tra các tệp trong các khối lớn (đôi khi tôi dùng đến một bản kiểm tra "cập nhật khác nhau" lớn) và tôi đã viết một số tập lệnh để trợ giúp việc này, nhưng v.v.