Come spostare facilmente un'installazione WordPress dall'ambiente di sviluppo a quello di produzione?
Faccio lo sviluppo su un server e uso un secondo server per la produzione. Al momento mi limito a esportare il database e poi faccio un trova e sostituisci per i cambiamenti degli URL; quindi copio i file e importo il nuovo SQL.
Ci sono modi migliori per fare questo?

@Insanity5902: Il deployment di un sito WordPress da un server a un altro è stato un incubo fin dal primo giorno in cui ho iniziato a lavorare con WordPress. (A dire il vero, era un incubo anche con Drupal per 2 anni prima di iniziare con WordPress, quindi il problema non è certo esclusivo di WordPress.)
Mi dava fastidio che ogni volta che dovevo spostare un sito, dovevo spendere così tanto sforzo spesso duplicato, e questo mi impediva di fare deploy in ambiente di test con la frequenza che avrei preferito. Quindi circa 4-6 mesi fa ho iniziato a lavorare su un plugin per risolvere il problema della migrazione tra webhost e ho menzionato le mie idee sul forum di WP Tavern.
Beh, tornando a oggi, ho praticamente fatto funzionare tutto e l'ho comodamente chiamato "WP Migrate Webhosts". Anche se il plugin è ancora molto in beta (probabilmente anche in alpha), vista la tua domanda, penso di essere pronto a far sì che la gente inizi a testarlo.
Lo scenario d'uso previsto è il seguente:
- prima lo sviluppatore carica tutti i file modificati di temi e plugin via FTP,
- poi carica l'intero database MySQL di sviluppo sul server di test e infine
- quindi esegue il plugin per migrare tutti i riferimenti dal dominio precedente a quello nuovo. (Il mio plugin non tenta di risolvere il merge di nuovi campi o tabelle del database con i dati live; QUESTO è un problema molto più grande che non sono sicuro di come risolvere.)
Puoi scaricare il plugin dal mio sito web e decomprimerlo nella directory dei plugin (se non sai come fare, questo plugin non fa per te perché richiede qualcuno che sappia cosa sta facendo per usarlo.) Terrò questo plugin online fino a quando non lo rilascerò su WordPress.org, dopodiché dovresti cercarlo lì.
Per usarlo, devi adottare un approccio diverso nel tuo wp-config.php
rispetto al solito, commentando i quattro (4) define DB_NAME
, DB_USER
, DB_PASSWORD
e DB_HOST
e invece registrando i valori predefiniti per i webhost e poi registrando le informazioni su ogni webhost stesso. Ecco come potrebbe apparire quel segmento di wp-config.php
(nota che la prima sezione è il codice non necessario commentato e nota anche che ho configurato il mio file hosts sulla mia macchina locale con domini di primo livello .dev
non instradabili per rendere lo sviluppo quotidiano più semplice. Su Mac VirtualHostX rende tutto molto semplice):
// ** Impostazioni MySQL - Puoi ottenere queste informazioni dal tuo web host ** //
/** Il nome del database per WordPress */
//define('DB_NAME', 'wp30');
/** Nome utente del database MySQL */
//define('DB_USER', 'wp30_anon');
/** Password del database MySQL */
//define('DB_PASSWORD', '12345');
/** Hostname del database MySQL */
//define('DB_HOST', '127.0.0.1:3306');
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/wp-webhosts.php');
register_webhost_defaults(array(
'database' => 'example_db',
'user' => 'example_user',
'password' => '12345',
'host' => 'localhost',
'sitepath' => '', // '' se WordPress è installato nella root
));
register_webhost('dev',array(
'name' => 'Example Local Development',
'host' => '127.0.0.1:3306',
'domain' => 'example.dev',
'rootdir' => '/Users/mikeschinkel/Sites/example/trunk',
));
register_webhost('test',array(
'name' => 'Example Test Server',
'rootdir' => '/home/example/public_html/test',
'domain' => 'test.example.com',
));
register_webhost('stage',array(
'name' => 'Example Staging Server',
'rootdir' => '/home/example/public_html/stage',
'domain' => 'stage.example.com',
));
register_webhost('live',array(
'name' => 'Example Live Site',
'rootdir' => '/home/example/public_html/',
'password' => '%asd59kar12*fr',
'domain' => 'www.example.com',
));
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/set-webhost.php');
Spero che sia (per lo più) autoesplicativo. Ho cercato di rendere il codice il più pulito possibile, ma purtroppo richiede quelle due linee criptiche require_once()
prima e dopo il blocco di codice di registrazione dei webhost, poiché non c'era modo per me di "agganciare" WordPress prima che wp-config.php
fosse chiamato.
Una volta aggiornato il tuo wp-config.php
, puoi semplicemente usare l'URL shortcut wp-migrate-webhosts
per andare alla schermata di amministrazione in questo modo:
Il precedente ti porterà a una schermata di amministrazione come la seguente, che ha un bel po' di testo descrittivo e ti permette di migrare DA qualsiasi altro dominio webhost con un singolo clic dopo aver selezionato i domini da cui migrare (NOTA: questo esempio mostra la migrazione VERSO IL BASSO dai server di test/stage/live allo sviluppo locale, ma stai certo che può migrare VERSO qualsiasi dominio in cui si trova. Questo significa anche che il plugin sarà fantastico per prendere un sito live esistente e ottenere rapidamente un ambiente di sviluppo locale funzionante!):
Se non è chiaro, "migrazione" in questo contesto significa aggiornare tutti i riferimenti nel database corrente per essere appropriati per il webhost attualmente definito (e "corrente" viene rilevato ispezionando $_SERVER['SERVER_NAME']
).
La cosa interessante di questo plugin è che implementa alcune migrazioni di base, ma chiunque può agganciarlo ed eseguire le proprie migrazioni. Ad esempio, se aggiungi un plugin per gallerie che memorizza percorsi completi alle immagini nel database, potresti agganciare l'azione migrate_webhosts
a cui verranno passati il webhost "from" e il webhost "to" come array di metadati, e ti sarà permesso di eseguire qualsiasi operazione necessaria nel database usando SQL o qualsiasi funzione API di WordPress per fare la migrazione. Sì, qualsiasi di noi potrebbe farlo senza il plugin, ma senza il plugin ho scoperto che scrivere tutto il codice necessario era più fatica di quanto valesse. Con il plugin, è solo più semplice scrivere questi piccoli hook e finirla.
Potresti anche scoprire che le mie migrazioni falliscono in casi limite che non ho testato e magari puoi aiutarmi a migliorare il plugin? Chiunque può contattarmi via email tramite il mio account gmail (il mio alias è "mikeschinkel.")
Inoltre, il plugin è stato progettato per accettare metadati definiti dall'utente per i webhost, oltre a quelli che riconosce come database
, user
, password
, host
, domain
, ecc. Un esempio perfetto potrebbe essere googlemaps_apikey
, dove puoi memorizzare le diverse API key per ogni dominio che il tuo plugin Google Maps necessita per funzionare correttamente (chi tra voi che ha usato un plugin Google Maps non ha mai deployato un'app su un server live e dimenticato di cambiare il codice con la corretta API key? Suvvia, siate onesti... :) Con questo plugin, un elemento googlemaps_apikey
nel tuo array register_webhost() e un piccolo hook personalizzato migrate_webhosts
puoi eliminare efficacemente questo problema!
Beh, questo è tutto. Lancio questo plugin qui su WordPress Answer's Exchange perché la domanda di @Insanity5902 l'ha scatenato. Fatemi sapere se è utile, qui se appropriato o via email altrimenti.
P.S. Se decidi di usarlo, ricorda che è in alpha/beta e ciò significa che cambierà, quindi preparati a qualche piccola modifica se vuoi usarlo ora e poi usare la versione rilasciata una volta che sarà stata testata da molte mani.
P.P.S. Quali sono i miei obiettivi con questo? Mi piacerebbe vedere questo plugin integrato nel core di WordPress in modo che tutti possano accedervi. Ma prima che questo possa essere considerato, molte persone devono essere interessate a usarlo per assicurarsi che risolva più problemi di quanti ne possa potenzialmente creare. Quindi, se ti piace l'idea, allora usalo pure e aiutami a guadagnare slancio per una futura sperata inclusione nel core di WordPress.

Ottime soluzioni, ho comunque un paio di domande: 1) È ancora necessario definire WP_SITEURL per accedere all'area di amministrazione? 2) Lo strumento è visibile solo per gli utenti Administrator? (non sono sicuro se la sezione Strumenti sia visibile per i non amministratori)

Ciao @Insanity5902:
1) Non è necessario impostare WP_SITEURL, il plugin lo fa per te. In realtà lo stai impostando quando "registri" un "dominio" e un "percorso del sito" per un webhost. Nel normale funzionamento di WordPress, WP_SITEURL deve essere impostato nel codice o nel database per assicurarsi che nessuno possa falsificare l'URL e fare operazioni dannose a causa di un valore inaspettato in $_SERVER['SERVER_NAME']. Il plugin WP Migrate Websites imposta WP_SITEURL indirettamente in base a $_SERVER['SERVER_NAME'], ma lo farà SOLO se il dominio corrente corrisponde a uno dei domini definiti nel tuo file wp-config.php, nient'altro.

2) Il collegamento rapido URL di cui ho parlato effettua un reindirizzamento alla console di amministrazione, quindi è solo per gli utenti loggati come amministratori. Non ho ancora implementato controlli specifici per i soli amministratori. Non ho mai aggiunto funzionalità di gestione dei ruoli a un plugin, ma dovrò approfondire come farlo nelle prossime settimane, quindi potrò lavorarci nel prossimo mese. Tuttavia, il plugin non è distruttivo; può SOLO migrare al dominio corrente e il processo è ripetibile, quindi anche se un non amministratore vi accedesse, non potrebbe fare alcun danno, almeno non che io possa immaginare.

@Mike: Puoi aggiungerlo al repository dei plugin di WordPress? Penso che potrebbe raccogliere ulteriori feedback e supporto dagli sviluppatori.

@harke - Ho intenzione di farlo quando sarà maturo. Voglio che venga utilizzato da circa 5-10 persone per assicurarmi che sia robusto e verificare che i casi d'uso siano validi prima di sottoporlo al sistema di valutazione del forum dei plugin, perché penso che questo plugin abbia il potenziale per essere significativo se gestito correttamente. Voglio anche documentarlo completamente prima di pubblicarlo, e documentarlo mi obbligherà a validare molte delle ipotesi fatte durante lo sviluppo.

Grazie per aver creato questo plugin. Lo sto provando in questo momento e sembra funzionare molto bene. Mi piacerebbe inviarti dei feedback, qual è il posto migliore per farlo?

@Sam Murray-Sutton - Vedo dalla mia casella di posta che hai capito come contattarmi via email, ma se altri volessero farlo, la mia email è sulla pagina del mio profilo.

Sicuramente proverò questa soluzione. Sto attualmente configurando il mio primo ambiente completo e spero di poterlo collegare al mio repository bitbucket. Comunque: grazie mille per a) spiegare bene (ancora una volta) e b) condividere cose interessanti (ancora una volta). Ti auguro il meglio, Mike!

Questo è essenzialmente lo stesso processo che seguiamo con il nostro wp-config.php. Poter distribuire il codice su un server di staging senza mandare tutto all'aria è l'unico modo per lavorare. Noi non facciamo il pulling e pushing del database tramite WP ma lo gestiamo con un client mysql, che è altrettanto efficace, anche se un po' più lento.

@mike come potrei utilizzare questo metodo per migrare un singolo sito da una configurazione multisite (locale)?

@MikeSchinkel - magari includi anche questo nella discussione: http://wordpress.stackexchange.com/questions/24314/wordpress-database-synch-between-dev-and-prod/24982#24982

/wp-migrate-webhosts restituisce un errore 404, e /wp-admin mostra 'errore durante la connessione al database'

Quando possibile, imposto WP_HOME
e WP_SITEURL
direttamente nel file wp-config.php
. Questa soluzione, combinata con un dump e un'importazione del database, è la più semplice tra tutte quelle che conosco.
http://codex.wordpress.org/Changing_The_Site_URL#Edit_wp-config.php

Quando non sarebbe possibile impostare questi valori? Sembra leggermente più semplice rispetto a modificare le cose nel database.

@jfklein Lavoro quasi sempre con una rete WordPress, che è incompatibile con queste costanti.

Sto facendo lo stesso. Sfortunatamente, non tutti i temi rispettano questa impostazione. Ad esempio, il tema 'Responsive Theme' da ThemeID. Cercare nel dump/tutte le tabelle per 'http://localhost' (o qualunque sia il nome locale scelto), specialmente in wp_options, e fare sostituzioni è spesso inevitabile.

@FranKee Ho creato un plugin https://wordpress.org/plugins/pitta-migration/ che utilizza le costanti per aggiornare la tabella wp_options e dovrebbe coprire la maggior parte dei temi e plugin

@icc97: Fantastico. Gli darò un'occhiata. PS: Bella immagine di intestazione, rappresenta bene la situazione.

Il mio hack preferito; aggiungi un'impostazione al tuo /etc/hosts
per far puntare il dominio di produzione alla tua macchina di sviluppo, solo sul tuo computer. Per effettuare il deploy in produzione rsincronizzi tutti i file e trasferisci il database.
I rischi di questa strategia sono chiari; potresti confondere il tuo ambiente di sviluppo con quello di produzione.
Rimane comunque una soluzione semplice.

Sì! Sono così felice di non essere l'unica persona ad averlo pensato! qualsiasi differenza tra dev e prod è negativa. Eliminare completamente quella differenza è molto meglio che cercare di aggirarla. E questa configurazione non richiede alcun lavoro. Si può persino fare testing su una macchina virtuale con file hosts modificato se necessario.

Mi piace molto questo metodo, ma come gestisci il push/pull del database?

Volevo qualcosa di simile quando sono passato a WP alcuni mesi fa, quindi ho scritto uno script shell abbastanza semplice che utilizza rsync e mysqldump tramite ssh:
http://snarfed.org/sync_wordpress
Non è sofisticato o basato sul web, ma ne sono soddisfatto.

WP Engine è un nuovo servizio che offre "Staging con un clic":
WPEngine ha una funzionalità esclusiva chiamata "staging". Ecco come funziona: prima di apportare una modifica rischiosa al tuo blog, clicca il pulsante "snapshot". Creiamo una copia completa del tuo blog e la configuriamo in un'area separata e sicura. Puoi sperimentare tutto ciò che vuoi; nulla è in produzione. Solo quando sei pronto per renderlo pubblico, interagisci con il tuo sito principale.
Sembra un modo molto semplice per passare rapidamente dallo sviluppo alla produzione, specialmente con un sito già online.

È davvero un'opzione molto interessante e sarà ottima per molte persone! Naturalmente non funziona per gli URL incorporati né aiuta chi sviluppa localmente e vuole utilizzare un IDE con debugger. Se WPEngine riuscisse a creare un'interazione che integri anche un deploy locale, allora sarebbe davvero qualcosa di straordinario (Technosailor, stai ascoltando?)

La funzionalità snapshot copia solo da produzione a staging, non il contrario. È ottima per testare le modifiche, ma non aiuta per il deploy in produzione.

@sam in realtà, hanno recentemente iniziato a implementare la possibilità di copiare dall'ambiente di staging a quello di produzione. http://wpengine.com/2013/04/user-portal-v2-and-staging-to-production/

Plugin Duplicator: Ecco un plugin a cui ho lavorato. Attualmente è in versione beta ma svolge il suo lavoro per la maggior parte dei siti. Al momento è pensato per installazioni WordPress più piccole. http://wordpress.org/extend/plugins/duplicator/
Risorse: Risorse aggiuntive per il plugin sono disponibili qui: http://lifeinthegrid.com/duplicator/
Community: Fateci sapere dei vostri successi o di eventuali problemi che potreste incontrare! Per gestire più facilmente le varie discussioni, vi invitiamo a pubblicare i problemi nei forum dei plugin di WordPress.org. Vi preghiamo di non pubblicare alcun dato di log del plugin nei forum online. I dati di log possono essere inviati al nostro sito di supporto.

Potresti dare un'occhiata a un prodotto di iThemes chiamato BackUpBuddy. L'ho usato solo due volte, ogni volta ho avuto qualche intoppo, ma nel complesso sembra promettente.

A partire dal 2017, ecco i due migliori metodi che ho trovato per gestire il trasferimento di un database WordPress dall'ambiente di sviluppo a quello di produzione.
WP Migrate DB Pro / WP Sync DB
https://wordpress.org/plugins/wp-migrate-db/
Questi plugin WordPress ti permettono di spingere, tirare e sincronizzare tabelle di database tra diverse installazioni WordPress. È molto meglio di un semplice trova/sostituisci per molte ragioni perché:
- Esporta il tuo database come dump di dati MySQL (simile a phpMyAdmin)
- Esegue un trova e sostituisci su URL e percorsi file
- Gestisce dati serializzati
- Ti permette di salvarlo sul tuo computer come file SQL
Sono un sostenitore del pagamento per il lavoro svolto, quindi ti consiglio di supportare il signor Brad Touesnard e acquistare una licenza della versione originale. WP Sync DB è una replica e risulta sempre indietro con il supporto. Con questo plugin il processo è semplicissimo:
- Installa/attiva il plugin sul tuo localhost e ambiente di produzione
- Configura un trasferimento push dal tuo localhost/server di sviluppo alla produzione
- Definisci regole su quali tabelle trasferire e le regole di trova/sostituisci da applicare
- Fine!
Database Search & Replace for WordPress Databases by InterconnectIT
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
Questo strumento gratuito non è un plugin, ma viene installato nella root della tua installazione WordPress in produzione. Non è buono quanto WP Migrate DB Pro perché richiede alcuni passaggi manuali, ma rimane comunque un'ottima opzione che funziona sempre. Con questo approccio il processo è il seguente:
- Esegui il backup del tuo database locale, assolutamente necessario perché lo reimporteremo presto
- Aggiungi lo script in una cartella nella root della tua installazione
- Esegui il trova e sostituisci sul tuo database
- Esporta il database e salvalo per l'ambiente di produzione
- Reimporta il backup dal punto #1 per ripristinare il tuo localhost
- Connettiti al database di produzione e esegui il backup (come dovresti sempre fare prima di queste operazioni)
- Importa l'esportazione creata DOPO aver eseguito la routine trova/sostituisci dal punto #4
Esiste un approccio più veloce, ma comporta tempi di inattività per il sito in produzione che a mio parere sono inaccettabili. Dopotutto è per questo che lo chiamiamo ambiente di produzione, giusto?

Questo sembra promettente. Stiamo lavorando su alcuni script per gestire la migrazione di alcuni dati, ad esempio wp-options, cambiando i percorsi nel database e copiando i media.
Il problema che ho è che il sito live continua a crescere mentre l'altro è in sviluppo. Un sito su cui lavoriamo ha 20 post al giorno e oltre 3.000 commenti giornalieri. È una quantità di dati troppo grande da spostare con phpmyadmin o tramite riga di comando. Inoltre, spostare i dati causa sempre problemi di codifica UTF per qualche motivo.
Inoltre, ora che sembra che le opzioni dei menu siano memorizzate nel database, ho ancora più cose da gestire.
Controllo tutto il mio codice in SVN e lo distribuisco via FTP dal server (Beanstalk). Questo però non apporta le modifiche al database per me né attiva i nuovi plugin.
Il mio piano attuale è creare un file manifesto durante lo sviluppo per apportare tutte le modifiche al sito live.
Ad esempio, il file avrebbe righe leggibili da un essere umano
Includerebbe i plugin da attivare, wp-options da spostare, immagini da trasferire, pagine da migrare. Poi il mio plugin rileverebbe il file manifesto e apporterebbe tutte le modifiche al sito di staging.
Una volta testato e sicuro di aver incluso tutto, potrei essere certo che funzionerà in produzione.
Questo plugin è ancora solo un'idea, ma ho già scritto del codice per realizzarlo.
Inoltre, se vuoi apportare modifiche solo all'URL nel tuo database, puoi usare il seguente SQL.
basta sostituire $old$
con il vecchio dominio e $new$
con il nuovo
update wp_postmeta set meta_value = replace(meta_value, '$old$' , '$new$') ;
update wp_posts set post_content = replace(post_content, '$old$' , '$new$') ;
update wp_options set option_value = replace(option_value, '$old$' , '$new$') ;

Solo una nota, la mia chiamata sql potrebbe danneggiare i tuoi dati serializzati.
s:14:blogs.prod.com ha la lunghezza codificata come 14. Dopo aver eseguito il codice, ora abbiamo
s:14:dev.prod.com
che è corrotto. Dovrebbe essere
s:12:dev.prod.com
usa con cautela.

Sto affrontando personalmente questo problema con il mio progetto su Github, chiamato Autopress. Non ho ancora una soluzione perfetta, ma mi sto avvicinando, soprattutto con il plugin wpstage dei ragazzi di wpengine.

Ho appena controllato il tuo script. Bello. Se ho capito bene, installa una nuova istanza di WP sul server. La domanda qui è come migrare dall'ambiente di sviluppo a quello di produzione. Può essere utile per questo?

È questo? http://github.com/vluther/Autopress Suggerisco di creare link nelle tue risposte così le persone possono cliccare direttamente!

@Mike Lee: Sì, puoi votare positivamente i commenti. Vedi, ho votato positivamente il commento di artlung. Cerca la freccia verso l'alto che appare al passaggio del mouse a sinistra del commento.

Sto lavorando a un modo per mantenere tutto sotto controllo delle versioni, e poi spingere da sviluppo a produzione. Sono già riuscito a farlo senza problemi per alcuni siti, ma ci sono ancora alcuni aggiustamenti che devo affrontare.

Non sono sicuro che sia questo, ma c'è un plugin di WP Engine che viene utilizzato per la migrazione del sito tra host. Si chiama Snapshot (Link diretto).

http://plugins.wpengine.com/wpengine-snapshot.zip non è più disponibile :(

Due progetti di Google Summer of Code con un obiettivo simile:
- Migrazione Automatica (GSoC 2010)
- WordPress Move (proposta) (GSoC 2011)

Ho utilizzato http://wordpress.org/plugins/wp-clone-by-wp-academy/. Funziona benissimo!
Solo 3 passaggi:
- Installa il plugin su entrambi i siti.
- Usa il plugin per generare un backup sul vecchio sito.
- Prendi l'URL del backup che ti fornisce e inseriscilo nella pagina del plugin sul nuovo sito, clicca su vai, e la migrazione sarà completata in pochi secondi!
Aggiusta automaticamente tutti gli URL - comprese le sostituzioni di stringhe serializzate - quindi nessun rischio di perdere configurazioni di widget, ecc.
Gli unici problemi che ho riscontrato sono stati con alcuni siti web con database più grandi (~300MB), che causavano timeout nell'esecuzione dello script PHP durante l'importazione del backup del sito.

Normalmente accedo a phpMyAdmin, carico il database e modifico i contenuti di wp_options>siteurl e wp_options>home con il dominio previsto. Se hai bisogno di aggiornare gli URL all'interno dei tuoi post e pagine puoi effettuare una ricerca/sostituzione per l'URL e il percorso dei media/uploads nel file .SQL prima di caricarlo. È un lavoro rapido.

Utilizzo il comando di export di Subversion per installare i file di WordPress (http://core.svn.wordpress.org/tags//) così come tutti i plugin nel repository (http://plugins.svn.wordpress.org//tags//), poi semplicemente comprimo il tema e i plugin personalizzati e li installo normalmente. Una volta che tutto è operativo senza contenuti, esporto il database di test ed eseguo una ricerca/sostituzione per l'URL E il percorso del file (memorizzato per i media) e lo importo in un database vuoto, poi modifico semplicemente le informazioni del database in wp-config.php. Generalmente mi ci vogliono circa 10-20 minuti.

Sebbene non manchino buone soluzioni qui, nello spirito della condivisione ho pensato di aggiungere il mio script bash di deploy alla lista: https://github.com/jplew/SyncDB
SyncDB è uno script bash di deploy progettato per eliminare la noia dalla sincronizzazione delle versioni locali e remote di un sito Wordpress. Permette agli sviluppatori che lavorano in un ambiente locale (es. MAMP) di "inviare" o "recuperare" rapidamente le modifiche da o verso il loro server di produzione con un singolo comando da terminale.
Questo script funziona bene con WP-Skeleton di Mark Jaquith e utilizza mysqldump
, git
e rsync
per sincronizzare l'intero sito - database, codice e media - in due semplici passaggi:
./syncdb
git push hub master

Questo è il metodo più semplice di sempre:
https://themes.artbees.net/docs/website-migration/
Richiede solo due clic. Uno per esportare e uno per importare.
È possibile utilizzando il plugin All in one WP Migration. Il link sopra mostra come usarlo.

Un altro strumento utile per gestire le migrazioni dei siti su server è la CLI di WordPress. Questo articolo offre una buona panoramica delle sue funzionalità, ma in particolare la sezione "Cerca e Sostituisci" è utile per trovare tutti i riferimenti al vecchio URL del sito di sviluppo:

Dato che gestisco i miei siti in IIS (uso anche asp.net, quindi ho bisogno di Windows) utilizzo WebPI di Microsoft per installare una nuova istanza, poi copio il template e uso l'import/export per trasferire i dati.
Non è perfetto ma l'intero processo richiede meno di un'ora.
Ovviamente sarebbe bello avere una soluzione con un solo click, ma questa è la soluzione più semplice che ho trovato per le mie esigenze.

Utilizzo il plugin BackupBuddy da un po' di tempo. Ti permette di creare un backup del database e di tutti i file, scaricarlo come file ZIP o inviarlo direttamente a un altro server tramite FTP. Inoltre, esegue automaticamente la ricerca e sostituzione degli URL. Di solito mi ci vogliono circa 5 minuti per completare l'intero processo. E poiché tutti i file sono compressi in ZIP, il processo di upload/download è molto più veloce. No, non lavoro per loro, ma questo plugin ha reso davvero molto più semplice l'intero processo.

Lasciami condividere uno dei miei preferiti :-)
// codice collaudato per lo scambio local<->live (include test su rete locale, es. da dispositivi mobili):
$GLOBALS['is_local'] =
in_array( $_SERVER['REMOTE_ADDR'], array("127.0.0.1","::1")) || // semplice localhost (IPv4 IPv6)
$_SERVER['HTTP_HOST'] == 'local.workblog' || // chiamata per nome locale (modificare)
substr($_SERVER["REMOTE_ADDR"],0,8) == '192.168.'; // dispositivo (mobile) in rete locale
$table_prefix = NULL; // assicura l'ambito
if ( $GLOBALS['is_local'] ) // ramo LOCAL ------------------------
{
....
}
else // ramo STAGE/LIVE -------------------
{
...e poi prosegui da lì. DB_NAME, DB_USER... table_prefix. Personalmente attivo ALTERNATE_WP_CRON in locale (per evitare alcuni fastidiosi warning), WP_DEBUG spento su entrambi (se non sei uno sviluppatore) o solo su live (se lo sei), un altro ini_set('display_errors', '0');
per live può anche essere utile, e infine, come menzionato sopra: WP_HOME e WP_SITEURL con i rispettivi URL locali/effettivi.
Questo è praticamente tutto, niente sopra la classica riga di WordPress 'Fine delle modifiche!'...
La parte 192.168. ti permette di fare alcuni test locali (es. da tablet o telefoni) all'interno della tua rete locale)
La variabile $GLOBALS['is_local'] può tornare utile anche nello sviluppo del tema, per qualche output di debug extra, ecc...

Puoi utilizzare WordPress Skeleton wp-config.php che imposta una costante WP_LOCAL_DEV
per ottenere qualcosa di simile

RAMP è un nuovo plugin per il deployment dei contenuti sviluppato da Crowd Favorite, e sembra davvero ben fatto. Costa $250, però, quindi non l'ho ancora provato. Potrebbe ripagarsi da solo nel tempo risparmiato, quindi lo sto valutando.
Il grande vantaggio rispetto alla maggior parte degli altri metodi menzionati è che può unire in modo intelligente post, commenti, ecc. Non si tratta solo di importare un dump MySQL, ma più di un sistema di controllo versione per il database. Ad esempio, quando si distribuisce un post, verranno distribuiti anche i tag associati a quel post, se non esistono già nell'ambiente di produzione.

RAMP è pensato per la distribuzione di contenuti, a differenza della distribuzione di codice, ma concordo, sembra eccezionale. Ora hanno predisposto una demo di RAMP così puoi provare le funzionalità.

Potrebbe non esistere ancora quando hai posto la domanda, ma io uso un servizio chiamato Blogvault da un paio di mesi e funziona perfettamente. Ho effettuato probabilmente più di 50 migrazioni (tra domini diversi, sottodomini e diversi web host), senza intoppi e in pochissimo tempo.
È un servizio a pagamento (a dominio/mese), ma non costa molto.

Un collega ha trovato questo. Concetto interessante, anche se sembra non funzionare tra server diversi. Lo sto ancora esplorando, ma sembra che possa funzionare benissimo per un'istanza di staging.

Quattro mesi fa, non riuscivo a far funzionare questo plugin... Ed è ancora alla versione 0.1 su code.google

Un'altra soluzione a pagamento: il framework del tema Xtreme One ha rilasciato la versione 1.2 con Xtreme Backup che ti consente di "esportare o importare le impostazioni dei tuoi Childthemes, Layouts o Widgets con tutti i loro contenuti/impostazioni come file XML."

Dopo aver seguito questa risposta per un po', ho creato il mio piccolo plugin - Pitta Migration. Le ragioni sono:
- Tra tutte le idee provate qui - la più semplice è usare le opzioni
WP_HOME
eWP_SITEURL
- Poi uso queste per impostare i due URL corrispondenti in
wp_options
- il che copre i casi in cui plugin/temi ignorano queste costanti - Questo mi dà la certezza al 100% di ciò che viene modificato nel mio database
- Funziona anche cross-platform (tutti quegli script bash non funzionano bene su Windows)
- È facile capire cosa fa il plugin
- Non c'è configurazione oltre alle due costanti - fai un mysqldump e un import mysql nel tuo database locale e il plugin vede che la costante e la tabella differiscono e li aggiorna per farli corrispondere
- Nessuna ricerca e sostituzione di testo
- Nessun rischio di rovinare il database - uso l'oggetto Database di WordPress per fare due aggiornamenti e nient'altro
- Funziona bene con cose come WordPress Skeleton dove puoi avere tutto sotto controllo del codice sorgente e impostare una configurazione locale
- L'ho messo nella directory dei plugin WordPress e su Github così che sia gratuito, completamente open source, facile da forkare e semplice da installare
- Una volta installato puoi dimenticartene e dovrebbe "funzionare e basta" - ti mostra un piccolo avviso per dirti che il database è stato modificato
- Dovrebbe funzionare con qualsiasi processo di backup/FTP/ripristino

A mio parere il metodo più semplice che seguo è il trasferimento manuale.. Basta copiare la cartella wp-content e il file wp-config.php sul nuovo host. Esportare il database dal vecchio host e importarlo in un nuovo database del nuovo host..
Nel nuovo database dell'host, vai alla tabella wp-option e cambia l'URL del sito e l'URL del blog con l'indirizzo del nuovo host invece del vecchio. Ad esempio da http://localhost/wp a http://example.com
Ora nel file wp-config cambia semplicemente le informazioni del database e dell'utente con quelle del nuovo host.
Adesso accedi al nuovo wp-admin e vai su impostazioni per salvare i permalink.
Hai finito. Penso che sia semplice senza usare alcun plugin.
Ho provato diversi tipi di plugin e tutti presentano vari tipi di problemi..
Quindi preferisco questo semplice trasferimento manuale che secondo me è più facile.
