Chúng tôi đã từng chạy một trang web xã hội, trên cấu hình LAMP tiêu chuẩn. Chúng tôi đã có một máy chủ Live, máy chủ thử nghiệm và máy chủ Phát triển, cũng như các máy phát triển cục bộ. Tất cả đều được quản lý bằng GIT.
Trên mỗi máy, chúng tôi có các tệp PHP, nhưng cũng có dịch vụ MySQL và một thư mục có Hình ảnh mà người dùng sẽ tải lên. Máy chủ Live phát triển để có một số người dùng định kỳ 100K (!), Đổ khoảng 2GB (!), Thư mục hình ảnh là khoảng 50 GB (!). Khi tôi rời đi, máy chủ của chúng tôi đã đạt đến giới hạn của CPU, Ram và hơn hết là giới hạn kết nối mạng đồng thời (Chúng tôi thậm chí đã biên dịch phiên bản trình điều khiển card mạng của riêng mình để tối đa hóa máy chủ 'lol'). Chúng tôi không thể (bạn cũng không nên giả sử với trang web của mình ) đặt 2GB dữ liệu và 50GB hình ảnh vào GIT.
Để dễ dàng quản lý tất cả điều này trong GIT, chúng tôi sẽ bỏ qua các thư mục nhị phân (các thư mục chứa Hình ảnh) bằng cách chèn các đường dẫn thư mục này vào .gitignore. Chúng tôi cũng có một thư mục có tên SQL bên ngoài đường dẫn tài liệu Apache. Trong thư mục SQL đó, chúng tôi sẽ đặt các tệp SQL của chúng tôi từ các nhà phát triển theo số tăng dần (001.florianm.sql, 001.johns.sql, 002.florianm.sql, v.v.). Các tệp SQL này cũng được quản lý bởi GIT. Tệp sql đầu tiên thực sự sẽ chứa một tập hợp lớn lược đồ DB. Chúng tôi không thêm dữ liệu người dùng vào GIT (ví dụ: các bản ghi của bảng người dùng hoặc bảng nhận xét), nhưng dữ liệu như cấu hình hoặc cấu trúc liên kết hoặc dữ liệu cụ thể của trang web khác, được duy trì trong các tệp sql (và do đó là GIT). Chủ yếu là các nhà phát triển (người biết mã tốt nhất) xác định cái gì và cái gì không được GIT duy trì liên quan đến lược đồ và dữ liệu SQL.
Khi có bản phát hành, quản trị viên đăng nhập vào máy chủ dev, hợp nhất nhánh sống với tất cả các nhà phát triển và các nhánh cần thiết trên máy dev thành nhánh cập nhật và đẩy nó đến máy chủ thử nghiệm. Trên máy chủ thử nghiệm, anh ta kiểm tra xem quy trình cập nhật cho máy chủ Live có còn hợp lệ hay không và liên tiếp nhanh chóng, trỏ tất cả lưu lượng truy cập trong Apache đến một trang giữ chỗ, tạo một bãi chứa DB, trỏ thư mục làm việc từ 'live' sang 'update ', Thực thi tất cả các tệp sql mới vào mysql và đưa lại lưu lượng truy cập trở lại đúng trang web. Khi tất cả các bên liên quan đồng ý sau khi xem xét máy chủ thử nghiệm, Quản trị viên đã làm điều tương tự từ Máy chủ thử nghiệm đến Máy chủ trực tiếp. Sau đó, anh hợp nhất chi nhánh trực tiếp trên máy chủ sản xuất, đến chi nhánh chính trên tất cả các máy chủ và từ chối tất cả các chi nhánh trực tiếp.
Nếu có vấn đề trên máy chủ thử nghiệm, vd. các sự hợp nhất có quá nhiều xung đột, sau đó mã được hoàn nguyên (hướng nhánh làm việc trở lại 'live') và các tệp sql không bao giờ được thực thi. Thời điểm các tệp sql được thực thi, đây được coi là một hành động không thể đảo ngược tại thời điểm đó. Nếu các tệp SQL không hoạt động chính xác, thì DB đã được khôi phục bằng cách sử dụng Dump (và các nhà phát triển đã loại bỏ, để cung cấp các tệp SQL không được kiểm tra).
Ngày nay, chúng tôi duy trì cả thư mục sql-up và sql-down, với tên tệp tương đương, trong đó các nhà phát triển phải kiểm tra rằng cả hai tệp nâng cấp sql, có thể bị hạ cấp như nhau. Điều này cuối cùng có thể được thực hiện với một tập lệnh bash, nhưng đó là một ý tưởng tốt nếu mắt người tiếp tục theo dõi quá trình nâng cấp.
Nó không tuyệt vời, nhưng nó có thể quản lý được. Hy vọng điều này cung cấp một cái nhìn sâu sắc về một trang web thực tế, thực tế, tương đối cao. Có thể là một chút lỗi thời, nhưng vẫn theo sau.