Chúng tôi có thể sử dụng một cài đặt WordPress cho nhiều cơ sở dữ liệu, tên miền và thư mục nội dung không


10

Tôi đã thấy một số câu hỏi trông giống nhau, nhưng tất cả chúng đều kết thúc với multisite . Để duy trì, hiệu suất và bảo mật, tôi không muốn sử dụng multisite. Vì vậy, hãy chịu đựng với tôi.

Đây là những gì tôi nghĩ về:

.
|_____branch1 // for branch1.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch2 // for branch2.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch3 // for branch3.domain.com
|  |_____themes
|  |_____plugins
|
|_____index.php
|_____WordPress
|_____wp-config.php

Như bạn có thể thấy, mỗi tên miền có cơ sở dữ liệu và thư mục nội dung riêng nhưng chỉ có một phiên bản WordPress. Bây giờ, chủ đề, plugin và cơ sở dữ liệu trở nên nhỏ hơn và độc lập. Sau đó, sẽ dễ dàng hơn nhiều để duy trì, quy mô ...

Nhưng nó có thể không? Nếu bạn đã trải qua vấn đề tương tự trước đây, xin vui lòng chia sẻ suy nghĩ của bạn! Tôi thực sự đánh giá cao sự giúp đỡ của bạn.


1
Tại sao multisite bị loại như một khả năng? Làm điều này sẽ liên quan đến việc tạo ra một hệ thống mỏng manh sẽ ít bảo trì hơn multisite, có hiệu suất chậm hơn multisite và bảo mật kém hơn multisite. Một số cài đặt lớn nhất của WordPress là cài đặt nhiều trang và tất cả cùng một mã chạy trên một trang web tiêu chuẩn
Tom J Nowell

Tôi quản lý nhiều trang WP bao gồm một trang có hơn 500 trang con. Hiệu suất sẽ giống nhau cho dù bạn sử dụng một phiên bản multisite hay 500 WP trừ khi bạn có 500 thể hiện trên các VM và cơ sở dữ liệu riêng biệt. Bảo trì hút với multisite? Hãy thử duy trì 500 số trang web duy nhất.
dùng42826

@TomJNowell Tôi không chắc liệu cài đặt lớn nhất đó chỉ sử dụng một cơ sở dữ liệu hay không nhưng tôi nghĩ điều nàyvideo này có thể đưa chúng ta đến cùng một trang. Chúng tôi chủ yếu sử dụng WordPress cho CRM và quyền riêng tư của người dùng là rất quan trọng.
MinhTri

@ user42826 Hiện tại, công ty của tôi không có nhiều trang web như vậy. Tôi cũng không thể chuyển đổi trang web hiện tại thành nhiều trang và điểm chuẩn nó. Và phần cứng và những thứ khác có thể khác với bạn. Vì vậy, tôi chỉ muốn hỏi về một kiến ​​trúc cài đặt tối ưu trong trường hợp của tôi. Theo tôi biết, multisite hoạt động với các tên miền phụ nhưng nó không thể hoạt động cho các tên miền khác nhau.
MinhTri

Multisite hoạt động với các lĩnh vực khác nhau. Chúng tôi sử dụng một tên miền chính, * .domain.com và một vài tên miền khác, www.domain2.com và www.domain3.com. Chúng tôi sử dụng plugin ánh xạ tên miền WP để thực hiện đa miền, nhưng từ những gì tôi nghe thấy lõi WP hỗ trợ ánh xạ đa miền hiện nay.
dùng42826

Câu trả lời:


10

Như @ tom-j-nowell đã nói trong bình luận với OP, multisite có thể làm cho việc này dễ dàng hơn.

Hiệu suất và bảo mật không thực sự là vấn đề đối với multisite (ít nhất, không nhiều hơn so với cài đặt thông thường), nhưng tôi đồng ý rằng multisite đôi khi có thể là một vấn đề, bởi vì rất nhiều plugin (tùy chỉnh hoặc bên thứ 3) có thể không hoạt động đúng trên multisite hoặc có thể vì bạn muốn giữ cho người dùng của các trang web khác nhau tách biệt hoàn toàn.

Điều đó nói rằng những gì bạn muốn đạt được không khó.

Những gì bạn cần thay đổi giữa các cài đặt là:

  • thư mục bổ trợ
  • thư mục chủ đề
  • cài đặt cơ sở dữ liệu

Những cấu hình đó có thể được thực hiện bằng cách sử dụng các hằng số trongwp-config.php vấn đề duy nhất của bạn là làm thế nào để chuyển đổi chúng dựa trên URL.

Biến máy chủ 'SERVER_NAME'sẽ hoạt động cho bạn, ít nhất là nếu máy chủ web của bạn được cấu hình đúng.

Ví dụ: bạn có thể tạo một thư mục có tên /confcùng cấp wp-config.phptệp và /WordPressthư mục.

Trong thư mục đó, bạn có thể thêm một số tệp:

  • branch1.domain.com.conf
  • branch2.domain.com.conf
  • branch3.domain.com.conf

bên trong mỗi người bạn có thể làm một cái gì đó như

$branch = 'branch1';
$base_dir = dirname( __DIR__) . "/{$branch}";

defined( 'WP_CONTENT_DIR' ) or define( 'WP_CONTENT_DIR', $base_dir );

// be sure WP understand URLs correctly
defined( 'DB_HOME' ) or define( 'DB_HOME', "{$branch}.example.com" );
defined('WP_SITEURL') or define('WP_SITEURL', "{$branch}.example.com/WordPress");

// adjust DB settings  as needed
defined( 'DB_NAME' ) or define( 'DB_NAME', $branch );
defined( 'DB_USER' ) or define( 'DB_USER', $branch );
defined( 'DB_PASSWORD' ) or define( 'DB_PASSWORD', '********' );

unset( $base_dir, $branch );

Điều này sẽ thay đổi trên mỗi tệp cấu hình theo "nhánh".

Sau đó, trong sự độc đáo của wp-config.phpbạn, bạn có thể có một cái gì đó như:

$defaults_conf = [
  'WP_CONTENT_DIR' => __DIR__ . '/branch1',
  'DB_HOST'        => 'localhost',
  'DB_NAME'        => 'branch1',
  'DB_USER'        => 'branch1',
  'DB_PASSWORD'    => '********',
];

$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];

if ($host && file_exists(__DIR__."/conf/{$host}.conf")) {
  require __DIR__."/conf/{$host}.conf";
}

array_walk($defaults_conf, function($value, $name) {
   defined($name) or define($name, $value);
});

unset($defaults_conf, $host);

Điều xảy ra ở trên là dựa trên tên máy chủ mà bạn tải một tệp cấu hình khác (nếu tìm thấy) và nếu tệp cấu hình không xác định bất kỳ cấu hình mặc định nào (hoặc nếu không tìm thấy tệp) thì cấu hình được đặt theo mặc định.

Điều thú vị là để thêm một nhánh mới, bạn chỉ cần tạo thư mục nhánh và cung cấp một .conftên theo tên miền nhánh mới, và bạn đã hoàn thành, không có gì phải thay đổi ở phía WP.

Dòng:

 $host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];

là nơi tôi có được tên miền. Như tùy chọn đầu tiên tôi đang sử dụng biến môi trường, vì có thể $_SERVER['SERVER_NAME']sẽ không hoạt động trên ngữ cảnh dòng lệnh, như chúng tôi khi sử dụng WP CLI. Trong những tình huống đó, bạn có thể đặt biến môi trường để buộc WP sử dụng cài đặt từ một nhánh cụ thể.

Lưu ý rằng trong các tệp cấu hình dành riêng cho chi nhánh, tôi sẽ thay đổi WP_CONTENT_DIRvà sẽ tự động đặt các thư mục bổ trợ và chủ đề cho các thư mục con liên quan /plugins/themeschi nhánh.

Một vấn đề có thể xảy ra ở đây là nếu bạn muốn chia sẻ /uploadsthư mục (nơi các tệp được tải lên).

Theo mặc định, thư mục đó là thư mục con của thư mục nội dung, vì vậy sử dụng dòng công việc ở trên nó sẽ là /uploadsthư mục con của mỗi thư mục gốc chi nhánh.

Nếu đó không phải là vấn đề với bạn, hơn là chỉ đi với nó, nếu không, giải pháp đơn giản nhất là tạo cho /uploadsmỗi thư mục nhánh một liên kết tượng trưng đến thư mục tải lên thực mà bạn muốn chia sẻ.


Cảm ơn bạn! Tôi thực sự thích ý tưởng của bạn mặc dù $_SERVER['SERVER_NAME']không đáng tin cậy . /uploadsdir không phải là vấn đề. Tôi cũng đã thử nghiệm với WP CLI, nếu chúng tôi truyền --urltham số cho từng trang web, nó sẽ hoạt động bình thường :)
MinhTri

1
@Dan Tôi đã nói trong câu trả lời: "Biến máy chủ 'SERVER_NAME' sẽ hoạt động cho bạn, ít nhất là nếu máy chủ web của bạn được định cấu hình đúng." Điều đó có nghĩa là bạn cần định cấu hình máy chủ của mình đúng cách :) Trên thực tế, miễn là bạn thiết lập server_namebằng nginx hoặc ServerNametrong Apache hoặc bất cứ thứ gì phù hợp với máy chủ web của bạn, $_SERVER['SERVER_NAME']sẽ chỉ hoạt động. Ngay cả khi WP CLI có thể hoạt động bằng --urltham số, các công cụ dòng lệnh khác có thể gặp sự cố nếu bạn không sử dụng biến môi trường. WP CLI "chế nhạo" URL của yêu cầu trong ngữ cảnh CLI, các lệnh khác có thể sẽ không thực hiện được.
gmazzap

1
Tất nhiên, tôi sẽ đảm bảo rằng nó SERVER_NAMEđược cấu hình đúng. Về env vars, tôi đã sử dụng phpdotenv để sửa nó. Hiện tại, mọi thứ dường như hoạt động rất tốt :)
MinhTri

0

Điều này là có thể với một liên kết tượng trưng và một chút lập kế hoạch. Tôi đã làm một số việc trên mạng cho cùng một điều. Cuối cùng, tập hợp tất cả các công cụ và làm cho nó hoạt động.

Tôi đã chạy một vài trang web, tất cả chúng đều có chung chủ đề và thư mục plugin. Các thư mục tương tự làm việc cho các trang web multisite và duy nhất. Nhưng bạn phải cẩn thận về một số plugin nhất định chỉ có thể là trang Multi / Single và kỳ quặc.

Tôi đã tạo một thư mục như master-tnp / Themes và master-tnp / plugin. Sau đó symlink đến thư mục wordpress của bạn bằng lệnh ln -s.

Cạm bẫy là trong cấu hình máy chủ là tốt. Đảm bảo theo chỉ thị symlink được đặt thành cho phép.

Nếu bạn muốn sử dụng một cài đặt WordPress đơn lẻ, tôi đã tập hợp một hướng dẫn chi tiết về cách tôi đã làm tại https://vaish.co/multipl-sites-single-wordpress-directory

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.