it-swarm-vi.com

Bạn có thể đề xuất các cách để quản lý triển khai mã cho máy chủ web dựa trên Linux không?

Tôi đã luôn sử dụng một tập lệnh bash rất đơn giản để triển khai mã. Tôi đang chuyển từ sử dụng Subversion sang Mercurial nhưng tôi thực sự không nghĩ rằng phần mềm kiểm soát sửa đổi là vấn đề cần triển khai.

Một số cách để làm điều này là gì?

#!/bin/sh
date=`date +%Y%m%d_%H%M%S`
tar -zcvf app-dir-$date.tar.gz app/dir 
tar -zcvf app-templates-$date.tar.gz app/templates
tar -zcvf app-media-$date.tar.gz app/media
svn export http://example.com/somepath/trunk hh/ --force
7
citadelgrad

Tôi sử dụng Mercurial để quản lý mọi thứ , bao gồm các trang HTML tĩnh của tôi. Nó làm cho cuộc sống thực sự, thực sự dễ dàng cho tôi.

Lợi ích bao gồm

  • Tất cả các ưu đãi kiểm soát phiên bản đặc quyền (rollback, thẻ mốc, v.v.)
  • Có thể sao chép trang web của bạn vội vàng
  • Bạn luôn có một bản sao lưu/sao chép cục bộ
  • Dễ dàng giữ đồng bộ nếu bạn có xu hướng thay đổi tại chỗ (tại chỗ, trên máy chủ)
  • Hầu hết các máy chủ được chia sẻ (nếu bạn giao dịch với một) không ngại cài đặt nó

Từ chối trách nhiệm, tôi đã viết hướng dẫn. Có, loại VCS bạn sử dụng có vấn đề, ở một mức độ. Chẳng hạn, tôi sẽ không sử dụng thứ gì đó trong kịch bản này khi tôi không thể cam kết cục bộ và thực hiện một lần đẩy/cập nhật lớn. Điều đó chỉ buộc tôi gộp quá nhiều thay đổi có vấn đề vào một cam kết.

Tôi có thể làm điều đó với Subversion và tôi hoàn toàn không gõ SVN. Tôi chỉ nghĩ rằng Mercurial là một công cụ tốt hơn nhiều cho vấn đề bạn đang cố gắng giải quyết.

Theo ý kiến ​​của tôi, bạn không cần phải 'làm việc xung quanh' các công cụ của mình trừ khi bạn không có lựa chọn nào khác. Làm như vậy để đánh bại mục đích có chúng, và bạn có một sự lựa chọn :)

5
Tim Post

Ngoài những gợi ý tuyệt vời trong các câu trả lời khác, bạn có thể muốn xem xét liệu điều đó có quan trọng với bạn để thực hiện cập nhật nguyên tử hay không.

Trên máy chủ FreeBSD của tôi, tôi thực hiện điều này thông qua hai cơ chế:

  • Phiên bản tất cả các tài nguyên tĩnh của tôi. (Ví dụ: http://static.example.com/images/logo.1.png hoặc http://static.example.com/style/main.3.css). Điều này cho phép tôi svn update trang web tĩnh trực tiếp trước khi cập nhật trang web động mà không phải lo lắng về việc người dùng nhìn thấy các tệp mới trong các trang cũ.

  • Phiên bản toàn bộ trang web động. Trong trường hợp của tôi, tôi có gốc tài liệu của tôi trỏ đến một liên kết tượng trưng. Chiến lược của tôi là đưa phiên bản sản xuất mới vào vị trí và sau đó với một lệnh duy nhất Đẩy nó trực tiếp. .g. đại loại như thế này:

    cp -Rp www.site1.com.1 www.site1.com.2 (hoặc svn checkout)

    svn update site1.com.2 (có thể cần svn switch trước)

    ln -sf site1.com.2 www.site1.com (nguyên tắc chuyển các thay đổi sang sản xuất)

Điều này đảm bảo rằng không ai trong số những người dùng của tôi cuối cùng nhìn thấy một trang nửa nướng. Họ sẽ thấy phiên bản cũ nếu nó vẫn còn trong bộ nhớ cache hoặc phiên bản mới.

Chiến lược này chỉ hoạt động tốt nếu bạn không trộn nội dung do người dùng tải lên với trang web động của bạn.

1
JasonBirch

Chúng tôi sử dụng ant tác vụ scp , với bộ chọn đã sửa đổi . Điều đó có nghĩa là bạn chỉ cần cập nhật các tệp đã thay đổi kể từ lần tải lên trước. Thật không may, bộ chọn sửa đổi dường như chỉ được thiết kế để sử dụng cá nhân, không chia sẻ với các thành viên trong nhóm. Tệp cache.properties có tên đường dẫn đến thư mục làm việc của người dùng trong đó. Chúng tôi đã viết một loạt các mục tiêu kiến ​​để xoa bóp tệp cache.properties thành một định dạng có thể được chia sẻ giữa các nhà phát triển và sau đó mát xa trở lại định dạng mà kiến ​​cần. Định dạng cũng khác nhau giữa môi trường Windows và môi trường GNU/Linux.

0
Don Kirkby

Không phải toàn bộ vấn đề sử dụng kiểm soát phiên bản mà bạn không cần quan tâm đến việc sao lưu trang web trước khi đưa ra bản cập nhật?

Nếu nó được thực hiện chính xác, một svn update (hoặc tương đương) là đủ, và nếu đó là một sai lầm thì hãy đưa nó trở lại một cam kết trước đó? Dù sao đó cũng là những gì chúng ta làm. Cam kết tất cả các thay đổi, svn update máy chủ dàn, nếu tất cả đều ổn thì svn update máy chủ trực tiếp.

0
Mark Henderson