Cách chia sẻ thư viện lõi WordPress


7

Chúng tôi có mười blog chạy trên một phiên bản EC2 nhỏ, chúng tôi muốn xem liệu tất cả các blog có thể chia sẻ cùng một mã php wordpress không

  1. Khi tôi cập nhật Wordpress, tất cả các blog đều được cập nhật
  2. Lưu bộ nhớ trong Apache / mod_php dưới dạng không có tập lệnh hoặc mã byte trùng lặp trong bộ đệm (trong trường hợp APC).

Chúng tôi không thể sử dụng MU vì chúng tôi cần tất cả các blog trong một DB riêng biệt, vì vậy sau này khi chúng tôi cần di chuyển chúng, mọi chuyện sẽ dễ dàng hơn nhiều.

Bất cứ ai đã thử điều này trước đây?


1
"trường hợp" hay "trường hợp"?
SickHippie

Câu trả lời:


12

Giả sử tất cả các cài đặt đều trên cùng một ví dụ và do đó có thể có cùng các tệp được chia sẻ giữa chúng, thì điều chính bạn cần làm là để tất cả các nội dung tùy chỉnh nằm bên ngoài các thư mục WordPress chính.

Vì vậy, trước tiên, bạn sẽ muốn có một bản sao mới của WordPress ở đâu đó, không bị ảnh hưởng (và không thể chạm tới, toàn bộ vấn đề là có một bản sao duy nhất, phải không?).

Tiếp theo, bạn sẽ sử dụng liên kết cứng hoặc liên kết tượng trưng để phản chiếu các tệp đó ở nơi khác. Thông thường trong các môi trường giống như unix, bạn sử dụng ln -sđể thực hiện liên kết tượng trưng. Làm thế nào để làm điều này cụ thể là để lại cho người đọc, nhưng về cơ bản nếu bạn có WordPress của bạn trong / example / wp, bạn sẽ làm một cái gì đó tương tự ln -s /example/wp /home/username/public_html/wphoặc một cái gì đó tương tự. Nếu liên kết sym gây ra sự cố, thay vào đó hãy chuyển sang liên kết cứng.

Bây giờ, hai thứ chính nằm trong thư mục WordPress chính, nhưng là tùy chỉnh và không phải là một phần của "lõi" là wp-config.phptệp của bạn và toàn bộ wp-contentthư mục. Vì vậy, chúng ta cần lấy những thứ này bên ngoài thư mục main / wp cho mỗi trang web. Cả hai điều này đều có thể.

Tệp wp-config.php rất dễ, bởi vì mặc định WordPress cũng kiểm tra một thư mục từ chính nó. Nếu thư mục wp của bạn đang ở /home/username/public_html/wp, thì WP sẽ kiểm tra /home/username/public_html/wp/wp-config.php, nhưng không thể tìm thấy nó /home/username/public_html/wp-config.php. Vì vậy, chỉ cần làm cho các tập tin wp-config.php của bạn trong thư mục trên.

Đối với thư mục wp-content, bạn có thể định vị lại nó bên ngoài thư mục wp chính bằng cách thêm mã vào tệp wp-config.php của bạn như sau:

 define( 'WP_CONTENT_DIR', '/home/username/public_html/custom-content' );
 define( 'WP_CONTENT_URL', 'http://example.com/custom-content');

Và sau đó WordPress sẽ mong đợi nội dung và mọi thứ trong đó sẽ sống ở đó. Thư mục wp-content bên trong thư mục / wp sẽ bị bỏ qua hoàn toàn, vì vậy bạn sẽ phải tạo thư mục này và đặt các chủ đề / plugin / tải lên của bạn vào đó.

Bước cuối cùng là sử dụng .htaccess (hoặc một số tệp cấu hình khác nếu bạn không sử dụng Apache) xem thư mục / wp hiển thị từ thư mục gốc, như thể nó ở đó. Điều này không khó, nó chỉ cần một chút suy nghĩ. Xem, các quy tắc .htaccess WordPress bình thường (đối với permalinks không mặc định) về cơ bản yêu cầu Apache chuyển hướng tất cả các yêu cầu đến tệp chính index.php của WordPress nếu yêu cầu không tham chiếu tệp thực sự tồn tại. Điều này cho phép tải lên hình ảnh và như vậy để làm việc trực tiếp, bên ngoài WP.

Dưới đây là một quy tắc ví dụ bạn có thể sử dụng trong /home/username/public_html/.htaccess để bắt chước điều này, nhưng cũng chiếm tài khoản cho thư mục / wp.

Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ wp/index.php [L]

Về cơ bản, các quy tắc này nói hai điều.

Đầu tiên: Nếu URL được yêu cầu không có / wp / trong đó đó không phải là tệp hoặc thư mục hiện có, thì hãy thay đổi URL bằng cách viết lại nội bộ thành có / wp / trước nó. Điều này có tác dụng ánh xạ lại tất cả các URL từ http://example.com/whthing đến http://example.com/wp/whthing . Về cơ bản, nó làm cho nó hoạt động như thể / wp / thực sự nằm trong thư mục gốc của trang web.

Quy tắc thứ hai thay đổi các yêu cầu cho url gốc (chỉ /) thành tệp /wp/index.php. Điều này có thể không thực sự cần thiết, nhưng nó hoạt động với tôi.

Điều này cho phép thư mục / wp vẫn "thuần", như vậy, và do đó bạn có thể sử dụng các liên kết tượng trưng hoặc liên kết cứng để giữ cài đặt một-true-WP ở một nơi khác, không bị ảnh hưởng bởi các công cụ cụ thể của trang web.

Lưu ý rằng nhiều plugin được viết xấu (và thậm chí một vài chủ đề) có thể đưa ra giả định rằng chúng nằm trong thư mục wp-content chính. Bất cứ điều gì làm một cái gì đó ngu ngốc như include '../../../wp-load.php';hoặc tương tự sẽ bị phá vỡ bởi phương pháp này. Lỗi này là một phần của plugin / theme. Không có plugin / theme nào bao gồm wp-load .


tò mò nếu bất cứ ai có các quy tắc cần thiết để làm điều này với nginx và nếu vậy, họ có thể chia sẻ chúng, hoặc chỉ vào một bài viết. Tôi muốn làm điều này vì tôi đang sử dụng apc, fastcgi, memcache và rất thích lưu ram cho tất cả các tệp tôi phải lưu vào bộ đệm. Chính sách về không phải là một lựa chọn vì họ là các trang web của khách hàng tháng chín trên cùng một máy chủ với những người dùng khác
shawn

0

Có một vài điều không có ý nghĩa trong tiền đề cơ bản của bạn. Trước hết, nếu bạn có mười blog trong các trường hợp riêng biệt, thì chúng không thể chia sẻ cùng một cơ sở mã - mười trường hợp EC2 = mười máy chủ, do đó mười bộ tệp cần thiết. Thứ hai, bạn chắc chắn sẽ có các kịch bản trùng lặp với cùng một lý do. Bạn có thể nói chuyện chéo giữa các trường hợp? Tôi không nghĩ vậy, nhưng ngay cả khi bạn có hai trang web đang cố chạy từ cùng một cơ sở mã, thì sẽ có wp-config.phpxung đột với cài đặt cơ sở dữ liệu ở mức tối thiểu.

Tôi không thực sự chắc chắn rằng multisite không phải là cách để đi đến đây. Mặc dù tất cả các blog tồn tại trong cùng một DB, tất cả chúng đều có tiền tố bảng dành riêng cho blog, giúp sao lưu DB dễ dàng hơn (một DB so với mười) và vẫn cho phép tính di động (xem tại đây để biết thêm thông tin). Thật là một chút tẻ nhạt khi di chuyển một blog ra khỏi nhiều trang, không có gì tẻ nhạt hơn là chuyển một trang web sang một tên miền khác.

Nghe có vẻ như những gì bạn muốn là có mười môi trường WP khác nhau nhưng chỉ có cơ sở mã hoàn chỉnh cho một trong số chúng, và đó là trái tim của WPMS - một cơ sở mã, một số trang web. Vì vậy, yêu cầu của bạn về 'cùng một codebase nhưng không phải là multisite' là loại trừ lẫn nhau, đó là lý do tại sao đã 4 ngày và không ai trả lời điều này. Có vẻ như bạn cần suy nghĩ lại về yêu cầu của bạn một chút.

Bây giờ, thay vào đó, nếu bạn chỉ muốn đảm bảo WP được cập nhật trên toàn cầu, có thể xem xét việc cài đặt các cài đặt WordPress cốt lõi của bạn vào SVN . Bạn có thể làm tương tự cho các plugin riêng lẻ, miễn là chúng có trong kho lưu trữ. Bằng cách này, bạn có thể chỉ cần chạy một tập lệnh shell để đánh các thể hiện và svn uptrên tất cả mười tập lệnh cùng một lúc. Tuy nhiên, điều này có vẻ như rất nhiều công việc chỉ để tránh cài đặt nhiều trang.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.