Podemos usar uma instalação do WordPress para vários bancos de dados, domínios e diretórios de conteúdo

10

Vi algumas perguntas que parecem semelhantes, mas todas acabaram com multisite . Para manutenção, desempenho e segurança, não quero usar multisite. Por favor tenha paciencia comigo.

É nisso que estou pensando:

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

Como você pode ver, cada domínio tem seu próprio banco de dados e diretório de conteúdo, mas apenas uma instância do WordPress. Agora, temas, plugins e bancos de dados se tornam menores e independentes. Então, seria muito mais fácil manter, escalar ...

Mas isso é possível? Se você já enfrentou o mesmo problema antes, compartilhe seus pensamentos! Eu realmente aprecio sua ajuda.

SarahCoding
fonte
11
Por que o multisite foi eliminado como uma possibilidade? Isso envolverá a criação de um sistema frágil que será menos sustentável que o multisite, tenha desempenho mais lento que o multisite e pior segurança que o multisite. Algumas das maiores instalações do WordPress são instalações multisite, e é o mesmo código que é executado em um único site padrão
Tom J Nowell
Gerencio vários sites múltiplos do WP, incluindo um que possui mais de 500 sub-sites. O desempenho será o mesmo, se você usar uma instância multisite ou 500 WP, a menos que você tenha as 500 instâncias em VMs e bancos de dados separados. A manutenção é péssima com multisite? Tente manter o número 500 de sites únicos.
user42826
@TomJNowell Eu não tenho certeza se que as maiores instalações usando apenas um banco de dados como ele é, mas eu acho que este e este vídeo levar-nos a uma mesma página. Estamos usando principalmente o WordPress para CRM e a privacidade do usuário é muito importante.
SarahCoding
@ user42826 Atualmente, minha empresa não tem muitos sites. Também não consigo converter o site atual em um multisite e compará-lo. E hardware e outras coisas podem ser diferentes de você. Então, eu só quero perguntar sobre uma arquitetura de instalação ideal no meu caso. Até onde eu sei, o multisite funciona com subdomínios, mas não pode funcionar para domínios diferentes.
SarahCoding
Multisite funciona com domínios diferentes. Usamos um domínio principal, * .domain.com, e alguns outros domínios, www.domain2.com e www.domain3.com. Usamos o plug-in de mapeamento de domínio do WP para realizar vários domínios, mas pelo que ouvi dizer, o núcleo do WP oferece suporte ao mapeamento de vários domínios agora nativamente.
user42826

Respostas:

10

Como @ tom-j-nowell disse em comentário à OP, o multisite pode facilitar isso.

O desempenho e a segurança não são realmente um problema para multisite (pelo menos, não mais do que para instalações regulares), mas concordo que o multisite às vezes pode ser um problema, porque muitos plugins (personalizados ou de terceiros) podem não funcione corretamente em vários sites ou talvez porque você queira manter os usuários de sites diferentes completamente separados.

Dito isto, o que você deseja alcançar não é tão difícil.

O que você precisa alterar entre a instalação é:

  • pasta de plugins
  • pasta de temas
  • configurações de banco de dados

Essas configurações podem ser feitas usando constantes nowp-config.php seu único problema é como alterná-las com base no URL.

A variável do servidor 'SERVER_NAME'deve funcionar para você, pelo menos se o seu servidor da web estiver configurado corretamente.

Por exemplo, você pode criar uma pasta nomeada /confno mesmo nível de wp-config.phparquivo e /WordPresspasta.

Nessa pasta, você pode adicionar alguns arquivos:

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

dentro de cada um deles você pode fazer algo como

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

Isso será alterado em cada arquivo de configuração, de acordo com o "ramo".

Depois disso, no seu exclusivo, wp-config.phpvocê pode criar algo como:

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

O que aconteceu acima é que, com base no nome do servidor, você carrega um arquivo de configuração diferente (se encontrado) e se o arquivo de configuração não define nenhuma das configurações padrão (ou se o arquivo não for encontrado) é definido por padrão.

O bom é que, para adicionar uma nova ramificação, você só precisa criar a pasta da ramificação e fornecer um .confnome após o novo domínio da ramificação, e pronto, não há nada para mudar no lado do WP.

A linha:

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

é onde eu recebo o nome de domínio. Como primeira opção, estou usando uma variável de ambiente, porque há chances de $_SERVER['SERVER_NAME']que não funcionem em um contexto de linha de comando, como nós ao usar o WP CLI. Nessas situações, você pode definir uma variável de ambiente para forçar o WP a usar configurações de uma ramificação específica.

Observe que, nos arquivos de configuração específicos da ramificação, estou alterando a WP_CONTENT_DIRpasta e que definirá automaticamente a pasta plugins e temas para as subpastas relacionadas /pluginse /themesramificadas.

Um possível problema aqui é se você deseja compartilhar a /uploadspasta (onde os arquivos são enviados).

Por padrão, essa pasta é uma subpasta do diretório de conteúdo, portanto, usando o fluxo de trabalho acima, haverá uma /uploadssubpasta de cada pasta raiz da ramificação.

Se isso não é um problema para você, basta seguir com ele; caso contrário, a solução mais fácil seria tornar /uploadsem cada pasta de ramificação um link simbólico para a pasta de envios real que você deseja compartilhar.

gmazzap
fonte
Obrigado! Eu realmente gosto da sua ideia, mesmo que $_SERVER['SERVER_NAME']não seja confiável . /uploadsdir não é problema. Eu também testei com o WP CLI, se passarmos o --urlparâmetro para cada site, ele funcionará normalmente :) #
SarahCoding
11
@ Dan disse na resposta: "A variável do servidor 'SERVER_NAME' deve funcionar para você, pelo menos se o seu servidor estiver configurado corretamente." Isso significa que você precisa configurar seu servidor corretamente :) De fato, desde que você configure server_nameno nginx ou ServerNameno Apache ou o que for adequado ao seu servidor web, $_SERVER['SERVER_NAME']apenas funcionará. Mesmo que o WP CLI funcione usando o --urlparâmetro, outras ferramentas de linha de comando podem ter problemas se você não usar a variável de ambiente. O WP CLI "zomba" da URL da solicitação em um contexto da CLI; outros comandos provavelmente não o farão.
gmazzap
11
Obviamente, vou garantir que SERVER_NAMEesteja configurado corretamente. Sobre os env vars, usei o phpdotenv para corrigi-lo. Atualmente, tudo parece grande trabalho :)
SarahCoding
0

Isso é possível com um link simbólico e um pouco de planejamento. Pesquisei na net pela mesma coisa. Por fim, monte tudo e faça funcionar.

Eu tenho alguns sites, todos eles compartilham o mesmo tema e pasta de plugins. As mesmas pastas funcionam para sites únicos e com vários sites. Mas você precisa ter cuidado com certos plug-ins, que podem ser apenas no site Multi / Único e são peculiares.

Eu criei um diretório como master-tnp / themes e master-tnp / plugins. Em seguida, faça o link simbólico para o diretório do wordpress usando o comando ln -s.

As armadilhas também estão nas configurações do servidor. Verifique se a diretiva seguir links simbólicos está definida para permitir.

Se você deseja usar uma instalação única do WordPress, reuni um guia detalhado de como o fiz em https://vaish.co/multiple-sites-single-wordpress-directory

Cpyder
fonte