Possiamo usare un'installazione di WordPress per più database, domini e directory dei contenuti


10

Ho visto alcune domande che sembrano simili, ma sono finite tutte con un sito multiplo . Per manutenibilità, prestazioni e sicurezza, non voglio utilizzare il multisito. Quindi, per favore abbiate pazienza con me.

Questo è ciò a cui sto 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

Come puoi vedere, ogni dominio ha il suo database e la sua directory dei contenuti ma solo un'istanza di WordPress. Ora temi, plugin e database diventano più piccoli e indipendenti. Quindi, sarebbe molto più facile da mantenere, ridimensionare ...

Ma è possibile? Se hai già riscontrato lo stesso problema, condividi le tue opinioni! Apprezzo molto il vostro aiuto.


1
Perché il multisito è stato eliminato come possibilità? Ciò comporterà la creazione di un sistema fragile che sarà meno gestibile rispetto al multisito, con prestazioni più lente rispetto al multisito e una sicurezza peggiore rispetto al multisito. Alcune delle più grandi installazioni di WordPress sono installazioni multisito, ed è lo stesso codice che gira su un singolo sito standard
Tom J Nowell

Gestisco più siti WP, incluso uno che ha oltre 500 siti secondari. Le prestazioni saranno le stesse se si utilizzano istanze multisito o 500 WP a meno che non si disponga delle 500 istanze su VM e database separati. La manutenibilità fa schifo con il multisito? Prova a mantenere il numero 500 di singoli siti.
user42826

@TomJNowell Non sono sicuro che quella più grande si installi usando solo un database così com'è ma penso che questo e questo video potrebbero portarci su una stessa pagina. Utilizziamo principalmente WordPress per CRM e la privacy degli utenti è molto importante.
SarahCoding

@ user42826 Attualmente, la mia azienda non ha molti siti. Inoltre, non posso convertire il sito corrente in un sito multiplo e confrontarlo. E l'hardware e altre cose potrebbero essere diverse da te. Quindi voglio solo chiedere un'architettura di installazione ottimale nel mio caso. Per quanto ne so, il multisito funziona con sottodomini ma non può funzionare per domini diversi.
SarahCoding

Multisito funziona con domini diversi. Utilizziamo un dominio principale, * .domain.com e alcuni altri domini, www.domain2.com e www.domain3.com. Usiamo il plugin di mappatura del dominio WP per realizzare multidominio, ma da quello che sento il core di WP supporta la mappatura multidominio ora in modo nativo.
user42826

Risposte:


10

Come ha detto @ tom-j-nowell in commento a OP, il multisito può renderlo più semplice.

Le prestazioni e la sicurezza non sono realmente un problema per il multisito (almeno, non più di quanto lo siano per le installazioni regolari), ma sono d'accordo sul fatto che il multisito può talvolta costituire un problema, poiché molti plug-in (personalizzati o di terze parti) potrebbero non funziona correttamente su più siti o forse perché desideri mantenere completamente separati gli utenti di diversi siti Web.

Detto ciò, ciò che vuoi ottenere non è poi così difficile.

Quello che devi cambiare tra l'installazione è:

  • cartella dei plugin
  • cartella temi
  • impostazioni del database

Quella configurazione può essere fatta usando le costanti nelwp-config.php tuo unico problema è come cambiarle in base all'URL.

La variabile del server 'SERVER_NAME'dovrebbe funzionare per te, almeno se il tuo server web è configurato correttamente.

Ad esempio, è possibile creare una cartella denominata /confallo stesso livello di wp-config.phpfile e /WordPresscartella.

In quella cartella è possibile aggiungere alcuni file:

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

dentro ognuno di essi puoi fare qualcosa del genere

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

Questo cambierà su ogni file di configurazione in base al "ramo".

Dopodiché, nel tuo unico wp-config.phppuoi fare qualcosa del genere:

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

Ciò che accade sopra è che in base al nome del server si carica un file di configurazione diverso (se trovato) e se il file di configurazione non definisce nessuna delle impostazioni di configurazione predefinite (o se il file non viene trovato) sono impostate per impostazione predefinita.

La cosa bella è che per aggiungere un nuovo ramo, devi solo creare la cartella del ramo e fornire un .confnome dopo il nuovo dominio del ramo, e hai finito, non c'è nulla da cambiare sul lato WP.

La linea:

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

è dove ottengo il nome di dominio. Come prima opzione sto usando una variabile d'ambiente, perché ci sono possibilità $_SERVER['SERVER_NAME']che non funzionino in un contesto da riga di comando, come ad esempio quando si usa l'interfaccia della riga di comando di WP. In tali situazioni è possibile impostare una variabile di ambiente per forzare WP a utilizzare le impostazioni da un ramo specifico.

Nota che nei file di configurazione specifici del ramo sto cambiando WP_CONTENT_DIRe che imposterà automaticamente la cartella plugin e temi nelle relative sottocartelle /pluginse /themesrami.

Un possibile problema qui è se si desidera condividere la /uploadscartella (dove vengono caricati i file).

Per impostazione predefinita, quella cartella è una sottocartella della directory del contenuto, quindi utilizzando il flusso di lavoro sopra sarà una /uploadssottocartella di ogni cartella radice del ramo.

Se questo non è un problema per te, basta andare con esso, altrimenti la soluzione più semplice sarebbe quella di rendere /uploadsin ogni cartella del ramo un collegamento simbolico alla cartella dei caricamenti reali che desideri condividere.


Grazie! Mi piace molto la tua idea anche se $_SERVER['SERVER_NAME']non è affidabile . /uploadsdir non è un problema. Ho anche testato con l' --url
interfaccia della riga di comando di

1
@Dan ho risposto nella risposta: "La variabile server 'SERVER_NAME' dovrebbe funzionare per te, almeno se il tuo server web è configurato correttamente." Significa che devi configurare correttamente il tuo server :) Infatti, fintanto che server_nameesegui l' installazione in nginx o ServerNamein Apache o qualunque cosa si adatti al tuo server web, $_SERVER['SERVER_NAME']funzionerà. Anche se l'interfaccia della riga di --urlcomando di WP può funzionare utilizzando il parametro, altri strumenti della riga di comando potrebbero presentare problemi se non si utilizza la variabile di ambiente. La CLI WP "prende in giro" l'URL della richiesta in un contesto CLI, probabilmente altri comandi non lo faranno.
gmazzap

1
Certo, mi assicurerò che SERVER_NAMEsia configurato correttamente. A proposito di env vars, ho usato phpdotenv per risolverlo. Attualmente, tutto sembra funzionare alla grande :)
SarahCoding

0

Questo è possibile con un collegamento simbolico e un po 'di pianificazione. Ho fatto qualche lavaggio in rete per la stessa cosa. Alla fine, metti insieme tutto il materiale e fallo funzionare.

Ho gestito alcuni siti Web, condividono tutti lo stesso tema e cartella plugin. Le stesse cartelle funzionano per siti multipli e singoli. Ma devi stare attento a determinati plug-in che possono essere solo siti multipli / singoli ed essere eccentrici.

Ho creato una directory come master-tnp / themes e master-tnp / plugins. Quindi collega simbolicamente alla tua directory di wordpress usando il comando ln -s.

Le insidie ​​sono anche nelle configurazioni del server. Assicurarsi che la direttiva follow symlink sia impostata per consentire.

Se si desidera utilizzare un'installazione di WordPress singola, ho messo insieme una guida dettagliata su come ho fatto a https://vaish.co/multiple-sites-single-wordpress-directory

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.