Birden çok veritabanı, etki alanı ve içerik dizini için bir WordPress yüklemesi kullanabilir miyiz


10

Benzer görünen bazı sorular gördüm, ancak hepsi çoklu siteyle sonuçlandı . Sürdürülebilirlik, performans ve güvenlik için çoklu siteyi kullanmak istemiyorum. Bu yüzden lütfen bana katlan.

Ben de öyle düşünüyorum:

.
|_____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

Gördüğünüz gibi, her etki alanının kendi veritabanı ve içerik dizini vardır, ancak yalnızca bir WordPress örneği vardır. Artık temalar, eklentiler ve veritabanları daha küçük ve bağımsız hale geliyor. O zaman, bakımı, ölçeklendirmesi çok daha kolay olurdu ...

Ama mümkün mü? Daha önce aynı sorunu yaşadıysanız, lütfen düşüncelerinizi paylaşın! Yardımın için sağol.


1
Multisite neden bir olasılık olarak elimine edildi? Bunu yapmak, çok bölgeden daha az bakım yapılabilir, çok bölgeden daha yavaş performansa ve çok bölgeden daha kötü güvenlik sağlayacak kırılgan bir sistem oluşturmayı içerecektir. WordPress'in en büyük yüklemelerinden bazıları çok siteli yüklemelerdir ve hepsi standart tek bir sitede çalışan kodla aynıdır
Tom J Nowell

500'den fazla alt site içeren biri de dahil olmak üzere birden çok WP çoklu sitesini yönetiyorum. Ayrı VM'lerde ve veritabanlarında 500 örneğiniz yoksa, bir çoklu site veya 500 WP örneği kullansanız da performans aynı olacaktır. Sürdürülebilirlik multisite ile berbat mı? 500 adede kadar tek siteyi korumaya çalışın.
user42826

@TomJNowell Bu kadar büyük bir veritabanı olduğu gibi yükler emin değilim ama bu ve bu video bizi aynı sayfaya getirebilir düşünüyorum . Biz esas olarak CRM için WordPress kullanıyoruz ve kullanıcı gizliliği çok önemlidir.
SarahCoding

@ user42826 Şu anda şirketimde bu kadar site yok. Ayrıca, mevcut siteyi çok siteye dönüştürüp kıyaslayamıyorum. Ve donanım ve diğer şeyler sizden farklı olabilir. Bu yüzden benim durumumda en uygun kurulum mimarisini sormak istiyorum. Bildiğim kadarıyla, çok alanlı alt alanlarla çalışır, ancak farklı alanlarla çalışamaz.
SarahCoding

Multisite farklı alanlarla çalışır. Bir ana etki alanı (* .etkialanı.com) ve birkaç başka etki alanı (www.domain2.com ve www.domain3.com) kullanıyoruz. Çok alan adı elde etmek için WP Domain mapping eklentisini kullanıyoruz, ancak duyduğum kadarıyla WP çekirdeği artık yerel olarak çok alanlı haritalamayı destekliyor.
user42826

Yanıtlar:


10

As @ tom-j-Nowell OP yorumunda belirterek, çoklu bu kolaylaştırabilir.

Performans ve güvenlik gerçekten çok bölgeli bir sorun değildir (en azından normal kurulumlardan daha fazla değildir), ancak çok sitenin bazen bir sorun olabileceğini kabul ediyorum, çünkü çok sayıda eklenti (özel veya 3. taraf) olmayabilir çok sitede düzgün çalışabilir veya belki de farklı web sitelerinin kullanıcılarını tamamen ayrı tutmak isteyebilirsiniz.

Bunu başarmak istediğinizin o kadar da zor olmadığını söyledi.

Kurulum arasında değiştirmeniz gereken şey:

  • eklentiler klasörü
  • temalar klasörü
  • veritabanı ayarları

Bu yapılandırma sabitleriwp-config.php kullanarak yapılabilir tek sorun URL onları dayalı nasıl değiştirilir.

En 'SERVER_NAME'azından web sunucunuz doğru yapılandırılmışsa, sunucu değişkeni sizin için çalışmalıdır.

Örneğin /conf, aynı wp-config.phpdosya ve /WordPressklasör düzeyinde adlandırılmış bir klasör oluşturabilirsiniz .

Bu klasöre bazı dosyalar ekleyebilirsiniz:

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

her birinin içinde şöyle bir şey yapabilirsiniz

$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 );

Bu, her bir yapılandırma dosyasında "dal" a göre değişecektir.

Bundan sonra, benzersizinizde şöyle bir wp-config.phpşey yapabilirsiniz:

$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);

Yukarıda belirtilenler, sunucu adına bağlı olarak (bulunursa) farklı bir yapılandırma dosyası yüklediğiniz ve yapılandırma dosyası varsayılan yapılandırmanın herhangi birini tanımlamıyorsa (veya dosya bulunamazsa) yapılandırmanın varsayılan olarak ayarlanmış olmasıdır.

Güzel bir şey, yeni bir şube eklemek için, sadece şube klasörünü oluşturmanız .confve yeni şube alanından sonra bir ad vermeniz gerekir ve işiniz bitti, WP tarafında değişecek bir şey yok.

Çizgi:

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

alan adını nereden alacağım. İlk seçenek olarak, bir ortam değişkeni kullanıyorum, çünkü $_SERVER['SERVER_NAME']WP CLI kullanılırken böyle bir komut satırı bağlamında çalışmaz. Bu gibi durumlarda, WP'yi belirli bir daldaki ayarları kullanmaya zorlamak için bir ortam değişkeni ayarlayabilirsiniz.

Şubeye özgü yapılandırma dosyalarında değişiklik yaptığımı WP_CONTENT_DIRve bunun eklentiler ve temalar klasörünü ilgili /pluginsve /themesşube alt klasörlerine otomatik olarak ayarlayacağını unutmayın .

Burada olası bir sorun, /uploadsklasörü paylaşmak istiyorsanız (dosyaların karşıya yüklendiği yer).

Varsayılan olarak, bu klasör bir içerik dizininin alt klasörüdür, bu nedenle yukarıdaki iş akışını kullanmak /uploadsher dal kök klasörünün bir alt klasörü olacaktır.

Bu sizin için bir sorun değilse, sadece onunla gitmekten başka, en kolay çözüm /uploadsher şube klasöründe paylaşmak istediğiniz gerçek yüklemeler klasörüne bir sembolik bağlantı yapmak olacaktır .


Teşekkür ederim! $_SERVER['SERVER_NAME']Güvenilir olmasa da fikrinizi gerçekten çok seviyorum . /uploadsdir sorun değil. İçinde geçirirseniz Ben de WP CLI ile test ettik --urlher site için bir parametre, normal çalışır :)
SarahCoding

1
@ Cevapta dedim: "En azından web sunucunuz düzgün yapılandırılmışsa, 'SERVER_NAME' sunucu değişkeni sizin için çalışmalıdır." Bu, sunucunuzu düzgün bir şekilde yapılandırmanız gerektiği anlamına gelir :) Aslında, server_namenginx veya ServerNameApache'de veya web sunucunuza uyan her şey kurulduğu sürece $_SERVER['SERVER_NAME']çalışır. WP CLI --urlparametresini kullanarak çalışsa bile , ortam değişkenini kullanmazsanız diğer komut satırı araçlarında sorunlar olabilir. WP CLI, isteğin URL'sini bir CLI bağlamında "alay eder", diğer komutlar muhtemelen bunu yapmaz.
gmazzap

1
Tabii ki, SERVER_NAMEdüzgün yapılandırıldığından emin olacağım . Env vars hakkında, ben düzeltmek için phpdotenv kullandık . Şu anda, her şey harika çalışıyor gibi görünüyor :)
SarahCoding

0

Bu bir sembolik bağlantı ve biraz planlama ile mümkündür. Aynı şey için internette biraz ovma yaptım. Son olarak, tüm şeyleri bir araya getirin ve çalıştırabilirsiniz.

Birkaç web sitesi çalıştırıyorum, hepsi aynı tema ve eklenti klasörünü paylaşıyor. Aynı klasörler çok siteli ve tek siteler için çalışır. Ancak, yalnızca Çoklu / Tek site olabilecek ve ilginç olabilecek bazı eklentilere dikkat etmelisiniz.

Master-tnp / temalar ve master-tnp / eklentileri gibi bir dizin yaptım. Sonra ln -s komutunu kullanarak wordpress dizininize bağlanın.

Tuzaklar sunucu yapılandırmalarında da bulunmaktadır. Takip sembollerinin direktifinin izin verecek şekilde ayarlandığından emin olun.

Tek bir WordPress kurulumu kullanmak istiyorsanız, https://vaish.co/multiple-sites-single-wordpress-directory adresinde nasıl yaptığımla ilgili ayrıntılı bir rehber hazırladım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.