Deployment per Siti WordPress in Ambiente Dev, Stage e Production?

18 gen 2012, 19:22:43
Visualizzazioni: 15.7K
Voti: 43

Ho bisogno di poter avere iterazioni dev/stage/production (su server separati) per un sito WordPress, solitamente uso git ma ovviamente questo non funziona con i siti WordPress a causa della dipendenza dal database per la configurazione principale di... beh, quasi tutto.

Quindi la mia domanda è: come lo fate voi? Ho fatto una rapida ricerca su Google e ho visto che ci sono alcuni plugin, è l'unico modo? Quali sono i migliori in termini di facilità d'uso, velocità, affidabilità, interfaccia utente ecc.?

1
Commenti

https://pantheon.io ha ambienti di sviluppo, test e produzione per un singolo dominio. Utilizzano git per i file e trasferiscono il database tra gli ambienti con un solo clic. È gratuito da provare e si paga solo quando si passa alla fase 'live' - https://www.youtube.com/watch?v=KpGTDeqwgX4

jgraup jgraup
2 dic 2015 19:36:28
Tutte le risposte alla domanda 4
9
29

Ho una configurazione di cui sono piuttosto orgoglioso e che funziona estremamente bene per il mio team.

Struttura Generale

Mantengo l'intera installazione sotto git. Tutte le modifiche, che si tratti di un aggiornamento di sistema, aggiunta/aggiornamento di un plugin, aggiunta/aggiornamento di un tema, seguono lo stesso flusso di lavoro. Le modifiche possono essere annullate in un attimo. Ho un server di deployment (un vecchio desktop P4) che esegue gitosis ma potresti altrettanto facilmente usare github o gitolite. In git, ho due branch "speciali", master e develop (spiegati più avanti). I miei server di produzione e staging sono basati su cloud.

Ambienti di Sviluppo

Ogni sviluppatore esegue il proprio server di sviluppo sulla propria macchina. In termini di database, raramente abbiamo avuto bisogno di dati live. Utilizziamo principalmente i dati di test del tema unit. Altrimenti, l'export e l'import coprono la maggior parte delle esigenze. Se il pezzo del DB fosse cruciale, potresti configurare la replica o impostare qualcosa per la sincronizzazione su richiesta. Quando ho inizialmente configurato questa struttura, pensavo che questo sarebbe stato cruciale, quindi ho iniziato a scrivere un set di strumenti per farlo, ma con mia sorpresa non erano davvero necessari. (nota: poiché non erano necessari, non li ho mai perfezionati, quindi ci sono bug, ad esempio sostituirà il dominio nei dati serializzati).

Ambiente di Staging

Quando i commit vengono inviati dal branch develop a gitosis, vengono automaticamente distribuiti sul nostro server di staging. Il database di staging è uno slave del database di produzione.

Ambiente di Produzione

Quando i commit vengono inviati a gitosis sul branch master, vengono automaticamente distribuiti sul server di produzione.

Il problema di wp-config.php

Vuoi che wp-config.php sia unico da server a server, ma vuoi anche tenerlo sotto controllo di versione. La mia soluzione è stata usare .gitignore per ignorare wp-config.php e memorizzare le versioni di staging e produzione come file con nomi diversi. Quindi su ogni server, creo un symlink, ad esempio wp-config.php -> wp-config-production.php. Ogni utente mantiene quindi il proprio DB con le proprie credenziali, con le proprie impostazioni (non tracciate) di wp-config.php.

Altre Note

Uso Rackspace Cloud, che è fenomenale ed economico. Con esso posso mantenere i miei server di staging e produzione identici. Sto anche scrivendo plugin che utilizzano la loro API per permettermi di controllare i miei servizi direttamente da WordPress, è fantastico.

Le directory della cache, le directory di upload dei file, ecc., sono tutte aggiunte a .gitignore. Se volessi, potresti impostare un'attività cron per verificare periodicamente gli upload e inviarli a gitosis, ma non è mai sembrato necessario.

La struttura master/develop è impostata per imitare parzialmente il modello di branching di Vincent Driessen. Uso anche la sua estensione git git-flow e la consiglio vivamente.

Ho avuto circa 10 sviluppatori che lavorano con questa struttura per oltre un anno ed è stato un sogno lavorarci. Affidabile, sicuro, veloce, funzionale e agile, non si può chiedere di meglio!

13 feb 2012 06:38:14
Commenti

Sto per configurare un'installazione wp in modo simile (ma noi usiamo svn) e volevo confermare il tuo processo per aggiornare plugin e wp: completare l'aggiornamento e verificare su dev, commitare le modifiche, distribuirle su staging, verificare, distribuire su live. In sintesi, non fai mai un aggiornamento dell'installazione wp direttamente sul server live ma porti le modifiche tramite aggiornamenti nel repository?

paullb paullb
4 feb 2013 04:34:59

E riguardo alle modifiche al DB fatte dalla routine di aggiornamento. Come vengono applicate al DB di produzione?

paullb paullb
4 feb 2013 05:20:28

Quel flusso di lavoro è corretto @paullb, e non devi preoccuparti degli aggiornamenti del DB. Il modo in cui funziona WordPress, gli aggiornamenti vengono attivati dopo che il cambiamento viene rilevato, quindi funziona esattamente come funzionerebbe un aggiornamento manuale (del core o di un plugin)!

Matthew Boynes Matthew Boynes
5 feb 2013 20:04:11

@MatthewBoynes, ciao. stai ancora utilizzando questo workflow per il tuo sviluppo? se sì, ho intenzione di applicare questo workflow al mio progetto. grazie :)

khakiout khakiout
20 lug 2014 09:44:32

Non lo faccio, ma solo perché non è applicabile ai progetti su cui lavoro attualmente, che sono principalmente ospitati su WordPress.com VIP. Se fosse applicabile, lo userei ancora (e infatti, l'azienda per cui lavoravo in precedenza continua a utilizzarlo).

Matthew Boynes Matthew Boynes
21 lug 2014 16:49:29

Ottimo materiale qui. Come gestisci le modifiche apportate a post esistenti ecc. sull'ambiente di staging? Come fai a pubblicare una modifica in produzione?

Lucky Luke Lucky Luke
3 dic 2015 11:19:33

@MatthewBoynes E le impostazioni dei plugin? Anche queste risiedono nel database, ma vorremmo testarle in locale prima di modificarle in produzione (e preferiremmo non modificarle due volte, poiché questo metodo è soggetto a errori).

Aaron Aaron
11 ago 2016 05:58:39

Non sono riuscito a utilizzare la variante del symlink per il config.php; non funzionava con vvv.

Kuronashi Kuronashi
5 dic 2021 17:40:58

Sembra che questo flusso di lavoro non sia più realmente praticabile.

Eric Eric
23 set 2022 03:04:42
Mostra i restanti 4 commenti
2

Innanzitutto, penso sia importante considerare cosa si intende mettere sotto controllo di versione. Raccomando contro l'idea di mettere l'intera directory di WP sotto VC. Ritengo che abbia più senso mettere sotto controllo wp-content/themes/NomeDelTuoTema. Per un sito ampio con un numero elevato di plugin complessi, si potrebbe considerare di includere anche wp-content/plugins. Se fosse assolutamente necessario, si potrebbe includere wp-content/uploads. Le risposte seguenti cambieranno leggermente, a seconda di cosa si decide di versionare.

Detto questo, ecco cosa utilizzo io:

Locale: Configurare un ambiente LAMP sulla tua macchina. Utilizza lo stesso URL del tuo sito di sviluppo. Usa VirtualHosts e voci nel file .host per simulare l'ambiente di sviluppo dal punto di vista dell'URL. Se stai versionando solo il tuo tema, considera l'uso di SSHFS per collegarti a wp-content/plugins, wp-content/uploads. Considera l'uso del database della tua installazione di sviluppo del progetto, a meno che tu non stia facendo operazioni particolarmente complesse.

Sviluppo: Estrai una copia di lavoro del tuo repository nel tuo ambiente WP. Configura un Hook POST-COMMIT in SVN per aggiornare questo repo ad ogni commit. Questo lo manterrà sincronizzato. (Consideralo una forma rudimentale di integrazione continua.)

Produzione: Estrai un tag di versione nominato che rappresenta una versione candidata finale. Quando devi utilizzare una nuova versione, cambia il tag e aggiorna il repository.

19 gen 2012 02:48:20
Commenti

Un ambiente di sviluppo è perfettamente adatto per testare le build notturne, e il git di WordPress viene aggiornato automaticamente ogni 30 minuti, oltre ad essere decentralizzato e funzionare meglio per i team. Non conosco nessuno che sia passato a git/hg e sia tornato a usare svn.

Wyck Wyck
4 feb 2012 21:31:06

Sono solo curioso di capire il tuo ragionamento per non mettere l'intera directory di WP sotto controllo versione. Sembra un collo di bottiglia nel flusso di lavoro. Inserire WP nel repository fornisce a tutti gli sviluppatori la stessa codebase e versione di WP. Permette anche di mantenere la coerenza tra gli ambienti. Vedi il link di Wyck (nella sua risposta) ai file wp-config condizionali.

Brian Fegter Brian Fegter
5 feb 2012 09:37:10
0

Abbiamo recentemente scoperto RAMP. Nota: questa è solo una parte dell'intero processo, ma la sincronizzazione dei database dei contenuti tra i server è probabilmente la parte più complessa.

4 feb 2012 18:56:16
0

Lo faccio con git e mercurial, assicurati solo di utilizzare un repository privato.

Opzione 1.

L'unico problema è il config.php, che puoi dire a git di ignorare durante il push o prima dell'inizializzazione.

Usa .gitignore oppure git update-index --assume-unchanged config.php (leggi un po' riguardo al comando assumed-unchanged prima di usarlo)

Opzione 2.

Usa un condizionale nel config.php che controlla l'url e applica le credenziali corrette, qualcosa come "se l'url del server = dev allora usa le credenziali A, altrimenti usa le credenziali B", ecc.

Mark lo spiega meglio, http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

PS. Puoi anche servire i file direttamente da un repository remoto invece di avere un tradizionale "file server". (video veramente noioso che ho fatto su questo http://www.youtube.com/watch?v=8ZEiFi4thDI)

4 feb 2012 21:22:18