क्या Git / GitHub एक अच्छा वर्डप्रेस परिनियोजन समाधान है?


67

मैं वर्तमान में अपना वर्डप्रेस स्थानीय रूप से विकसित कर रहा हूं, GitHub के साथ GitHub के लिए अपना कोड बना रहा हूं और फिर अपने सर्वर में SSHing कर रहा हूं और अपने कोड को अपडेट करने के लिए "git pull" कर रहा हूं। क्या यह एक वर्डप्रेस साइट पर कोड परिनियोजन के लिए एक अच्छा विकल्प है (मुझे स्पष्ट रूप से इस मामले में मेरे सर्वर तक रूट स्तर की पहुंच है।) मुझे कैपिस्ट्रानो जैसी चीजों का पता है, लेकिन क्या यह एक वर्डप्रेस साइट पर तैनाती के लिए ओवरकिल होगा? मैं इस मामले में अधिकतम Git / GitHub कैसे बना सकता हूं?


मैं तैनाती का उपयोग करता हूं । यह एक सशुल्क सेवा है लेकिन मुझे इसकी कीमत उचित लगती है। यदि आप WP इंजन (मैं करते हैं) के साथ होस्ट करते हैं, तो उन्होंने हाल ही में एक git पुश सुविधा शुरू की: git.wpengine.com
dwenaus

जवाबों:


60

मैं इसके लिए git का उपयोग करता हूं और पाता हूं कि यह वास्तव में अच्छी तरह से काम करता है। कुछ सुझाव:

  • अपनी अपलोड निर्देशिका (wp-content / uploads) निर्देशिका को अपनी .gitignoreफ़ाइल में जोड़ें।
  • अपने विकास प्रणाली पर एक वेब सर्वर और डेटाबेस सर्वर चलाएं ताकि आप उन्हें उत्पादन पर धकेलने से पहले स्थानीय स्तर पर परिवर्तनों का परीक्षण कर सकें।
  • अपने डेटाबेस कनेक्शन की सेटिंग को निरंतर बीवी देव और प्रोडक्ट्स के साथ रखें, या .gitignoreअपनी उत्पादन वर्डप्रेस सेटिंग्स को रोकने के लिए अपनी फ़ाइल में wp-config.php जोड़ें ।
  • Wordpress के व्यवस्थापक इंटरफ़ेस का उपयोग करके अपनी उत्पादन प्रणाली पर प्लगइन्स को अपडेट करने से बचें - सबसे अच्छा के रूप में, आपकी गिट कॉपी आपके द्वारा अपडेट / चेकआउट करते ही आपके द्वारा अपडेट किए गए किसी भी प्लगइन्स को ओवरराइट कर देगी, सबसे खराब रूप से आपको संघर्ष मिलेगा। उत्पादन में अपने विकास प्रणाली, कमिट, पुश और चेकआउट पर व्यवस्थापक इंटरफ़ेस का उपयोग करके अपने अपडेट करें।
  • post-receiveअपने वेब सर्वर (जैसे /var/www) के माध्यम से वर्डप्रेस प्रकाशित करने के लिए उपयोग की जाने वाली निर्देशिका में अपने अपडेट को स्वचालित रूप से चेकआउट करने के लिए एक गिट हुक जोड़ने पर विचार करें । यह आपको केवल फाइलों की जांच करने की अनुमति देता है, किसी भी गिट मेटाडेटा को खोजने से बचने के लिए यह आपके वेब सर्वर के दस्तावेज़ रूट में है, और इसका मतलब यह भी है कि आप पोस्ट-प्राप्त हुक में कोई भी अनुमति परिवर्तन जोड़ सकते हैं ताकि आपकी अनुमतियाँ हर बार संगत रहें। एक उदाहरण नीचे शामिल है:

    #!/bin/sh
    unset GIT_INDEX_FILE
    # the directory your web server serves wordpress from 
    export GIT_WORK_TREE=/var/www/example.com/
    # the local directory where your remote git repository sites
    export GIT_DIR=/home/git/repos/example.com.git/
    # below user is for debain - you want the user and group your webserver uses
    sudo git checkout -f
    sudo chown -R www-data:www-data $GIT_WORK_TREE
    sudo chmod -R 755 $GIT_WORK_TREE
    sudo chmod 600 $GIT_WORK_TREE/wp-config.php
    sudo chmod -R 775 $GIT_WORK_TREE/wp-content
    

क्या unset GIT_INDEX_FILEटाइपो के बाद बैकटिक दिखाई दे रहा है ?
वेस्टन रटर

जेम्स ने मेरे वफ़्फ़्लो को बहुत अधिक अभिव्यक्त किया है, सिवाय इसके कि मैं केवल एक बार स्टेजिंग / टेस्ट / प्रोडक्शन साइट स्थापित करने के लिए थीम फ़ाइलों को गिट रेपो में जोड़ दूं। इसके अलावा, मैं पूरी तरह से रिमोट सर्वर पर एक पोस्ट-प्राप्त हुक का उपयोग करने की सलाह देता हूं, लॉग इन करने और
गिट पुलिंग

SSH उपनाम के साथ, इसका मतलब है कि मैं 'git push live' आदि का उपयोग करके लाइव थीम रेपो पर धकेल सकता हूँ
davemac

मैं वर्डप्रेस में प्लगइन अपडेट प्रक्रिया से परिचित नहीं हूं लेकिन क्या होता है अगर प्लगइन अपडेट डेटाबेस में बदलाव करता है? उन स्थानीय परिवर्तनों को उत्पादन सर्वर पर कैसे धकेला जाएगा?
प्रयोक्ता

@ उपयोगकर्ता जो प्लगइन से प्लगइन में भिन्न होगा। कोर वर्डप्रेस स्कीमा वर्जन चेक करता है, इसलिए यदि आप बिल्ट इन अपडेटर का उपयोग किए बिना वर्डप्रेस अपडेट करते हैं, तो यह डीबी अपडेट को अलग तरीके से करेगा। मेरी सलाह यह होगी कि यदि आप डीबी को लिखने वाले किसी भी प्लगइन्स का उपयोग कर रहे हैं, तो आप Wordpress के व्यवस्थापक क्षेत्र की जांच करते हैं, क्योंकि स्कीमा अपडेट आमतौर पर वहां नियंत्रित किए जाते हैं, भले ही आप प्लगइन कोड को कैसे अपडेट करें।
जेम्स हेब्डेन

22

मैं अत्यधिक कैपिस्ट्रानो को स्थापित करने की सिफारिश करूंगा - यह पहली बार थोड़ा आगे बढ़ने का काम है, लेकिन इसके बाद आप इसे आसानी से नए सेटअप के लिए उपयोग कर सकते हैं।

मुख्य लाभ हैं

  • अपने डेस्कटॉप से ​​तैनात करने में सक्षम होने के नाते। यह बहुत ज्यादा नहीं लग सकता है, लेकिन अपने दूरस्थ सर्वर में ssh-ing, और एक git पुल कर रहा है अभी भी गधे में एक दर्द है।
  • यदि आपको आवश्यकता हो तो पिछले संस्करण में आसान रोलबैक
  • मचान / उत्पादन वातावरण की स्थापना तैनाती जैसी शांत चीजें करने में सक्षम।

मैं आपको दिखाने के लिए कैपिस्ट्रानो स्क्रिप्ट का एक सेट जोड़ रहा हूं कि मैं चीजों को कैसे सेट करता हूं।

Capfile

require 'railsless-deploy'
load 'config/deploy'`

deploy.rb

set :stages, %w(production staging local)
set :default_stage, "staging"
require 'capistrano/ext/multistage'

set :application, "" # your application name - used to set directory name

set :scm, :git
set :repository, "" # use the ssh repo access line you get from the provider eg git@github.com:name/repo.git
set :deploy_to, "/var/www/#{application}" #this is the root site folder on the remote server
set :deploy_via, :remote_cache # get directly from repo
set :copy_exclude, [".git", ".DS_Store", ".gitignore", ".gitmodules", "wp-config.php"]

# makes capistrano ask for sudo password or other remote inputs
default_run_options[:pty] = true

namespace :tasks do
    task :fix_links  do
        run "ln -nfs #{shared_path}/uploads #{release_path}/wp-content/uploads"
        run "ln -nfs #{shared_path}/wp-config.php #{release_path}/wp-config.php"
      run "ln -nfs #{shared_path}/blogs.dir #{release_path}/wp-content/blogs.dir"
      run "ln -nfs #{shared_path}/.htaccess #{release_path}/.htaccess"
      run "sudo chown -R www-data.www-data #{release_path}/"
    end
end

after "deploy", "tasks:fix_links"

और अंत में, एक नमूना पर्यावरण फ़ाइल (यदि आप मल्टीस्टेज रत्न का उपयोग करते हैं, तो आप अपने पर्यावरण के प्रत्येक चरण के लिए इनमें से एक हो सकते हैं, जैसे स्थानीय, मंचन, उत्पादन)

config / local.rb

server "", :app  #hostname
set :branch, 'develop' #choose branch to deploy
set :use_sudo, false #don't use sudo

set :deploy_to, "/var/www/#{application}" #overwrite default path to deploy to

ये फाइलें बिना ट्वीक किए काम नहीं कर सकती हैं, और आपको कुछ बुनियादी कैपिस्ट्रानो ज्ञान की आवश्यकता होगी, लेकिन उम्मीद है कि कुछ लोगों को मदद मिलेगी।

यह पहला ट्यूटोरियल था जिसका मैंने उपयोग किया था जो मुझे कैपिस्ट्रानो और वर्डप्रेस के साथ जा रहा था: http://theme.fm/2011/08/tutorial-deploying-wordpress-with-capistrano-2082/


2
यदि आप git पोस्ट-प्राप्त हुक का उपयोग करते हैं, तो वे दूरस्थ सर्वर पर ssh की आवश्यकता को नकारते हैं और git पुल करते हैं
davemac

git post-receiveहुक जाने का रास्ता है!
ब्रॉक हेंसले

3
@ पोस्ट-प्राप्त हुक के साथ समस्या यह है कि जब तक आपको एक अच्छा CI इंफ्रास्ट्रक्चर नहीं मिल जाता है, एक गलत मर्ज पूरी साइट को नीचे ला सकता है। यदि आप एक ऐसे प्रोजेक्ट पर काम कर रहे हैं, जिसमें कई ऐसे देवता हैं जो आपके रेपो तक पहुंच बना चुके हैं। इसलिए मैं, व्यक्तिगत रूप से, बजाय capistrano के माध्यम से तैनात करना पसंद करता हूं, लेकिन मैं देख सकता हूं कि अन्य लोग इसके बारे में इतना चिंता क्यों नहीं कर सकते हैं।
अनु

आप एक नंगे गिट रेपो का उपयोग करते हैं, इसलिए मर्ज समस्या प्रासंगिक नहीं है
davemac

9

मैंने वास्तव में इस विषय पर एक वर्डकैम्प प्रस्तुति दी थी। अपने आप को दोहराने के बजाय, यहाँ इसका एक पेंचकस है और यहाँ एक बहुत ही सरल परिनियोजन स्क्रिप्ट है जिसके साथ मैंने चर्चा की।

संक्षेप में, मैं रेपो की मेजबानी के लिए GitHub का उपयोग करता हूं, और git Ref के आधार पर परिवर्तनों को तैनात करने के लिए एक webhook का उपयोग करता हूं। यह आपको विन्सेन्ट ड्रिसेसन के गिट ब्रांचिंग मॉडल का उपयोग करने की अनुमति देता है और स्वचालित तैनाती के साथ असीमित वेबहेड्स, स्टेजिंग सर्वर, परीक्षण सर्वर आदि होने के लिए खोलता है। मैं संस्करण नियंत्रण में wp-config.php को कवर करते हुए भी अलग-अलग डेव / प्रोडक्शन वर्जन को बनाए रखता हूं (फाइलों का नाम बदलकर और सिम्क्लिंग करके)।


5

मुझे पता है कि यह सवाल थोड़ा पुराना है, क्योंकि मैंने इसे यहां उत्तर के रूप में नहीं देखा है, मैं साझा करना चाहूंगा कि मैं सामान्य रूप से एकल-साइट गिट आधारित सेटअप और तैनाती के लिए क्या करता हूं और यह वास्तव में अच्छी तरह से काम कर रहा है, साथ ही कई से काम कर रहा है उपकरणों, स्थानों और कई डेवलपर्स के साथ (सभी अपने स्वयं के स्थानीय प्रतिनिधि होते हैं जो वे इसमें काम करते हैं)।

मैं गर्मजोशी से निम्नलिखित सेटअप का सुझाव दे सकता हूं:

यह भी उल्लिखित है (यदि आपको इसके चारों ओर अपना सिर लपेटने के लिए दूसरे संसाधन की आवश्यकता है):

यह मूल रूप से काम करता है (कम से कम तीन रिपोज के साथ):

  1. वेबसाइट को लाइव-होस्ट पर git के तहत डाल रहा है,
  2. लाइव होस्ट पर एक नया नंगे गिट रिपॉजिटरी बनाएं ।
  3. और फिर नंगे भंडार से अपने स्थानीय विकास गिट रेपो (ओं) के लिए कांटा।

जब काम पूरा हो जाता है, तो आप उस दूरस्थ नंगे रेपो के खिलाफ धक्का देते हैं, जिससे आपने क्लोन किया है। नंगे रेपो में लाइव रेपो (उपरोक्त प्राइम में कोड में ) के साथ सिंक करने के लिए हुक हैं ।

रेपो में वर्डप्रेस विशिष्ट सेटिंग्स के रूप में मेरे पास यह है .gitignore:

# uploads are data, excluded from source tree
wp-content/uploads/

बाकी झुकाव। प्लगइन और विषय विन्यास मैं संस्करण / विन्यास नियंत्रण के अंतर्गत रखता हूं। यह मुझे लाइव का उपयोग करने से पहले परिवर्तनों और समीक्षा कोड को आसानी से ट्रैक करने की अनुमति देता है । मैं अपने बदलावों के साथ सुदूर पेड़ों के खिलाफ भी आसानी से विलीन हो सकता हूं। यह विशेष रूप से वर्डप्रेस कोर के खिलाफ उपयोगी है जो गिथब पर उपलब्ध है

यह मेरी वर्डप्रेस की अधिकांश जरूरतों के लिए बहुत अच्छा काम करता है। नंगे रेपो आपको परस्पर विरोधी परिवर्तनों को आगे बढ़ाने से रोकता है। यह लाइव-साइट को अपडेट करने से पहले एक दूरस्थ प्रतिलिपि के लिए भी सिंक करता है। इसका मतलब है, लाइव-साइट को अपडेट करना सामान्य रूप से बहुत तेज है। हुक के कारण आप चाहें तो Wordpress अपडेट हुक को बाद में भी कॉल कर सकते हैं।

अगर यह प्रयोग नहीं किया है कि गितुब हुक के साथ इसे कितना बेहतर किया जा सकता है, लेकिन मुझे आमतौर पर उनकी आवश्यकता नहीं है क्योंकि कोड स्थानीय संस्करण नियंत्रण के तहत है, न कि गितूब।

इस तरह की प्रणाली को पहली बार सेट करने के लिए, आपको यह मूल्यांकन करने के लिए कुछ समय लेना चाहिए कि क्या आपको अपने दूरस्थ होस्ट पर सभी उपकरण उपलब्ध हैं:

  • एसएसएच पहुंच
  • GIT
  • एक निजी निर्देशिका जिसे आप फ़ाइलों और उप-निर्देशिकाओं में रख सकते हैं (जैसे आपके नंगे गिट रेपो के लिए)

पहली बार सेटअप-समय एक दो घंटे के भीतर संभव होना चाहिए। संपूर्ण वातावरण और आप पहली बार पुश प्रकाशित करते हैं।

अपने मेजबान के आधार पर, आप .gitवेब-एक्सेस से निर्देशिका को भी ढाल देना चाह सकते हैं। यहाँ कुछ उदाहरण .htaccessकोड है जो वर्डप्रेस को उप-निर्देशिका के अंदर रखता है, जो रेपो में स्थान नहीं छोड़ता है जो ऑनलाइन प्रकाशित नहीं होता है (उपयोगी):

Options -Indexes

# fix trailing slash for .git / make it disappear + .gitignore and similar files.
RedirectMatch 404 ^/\.git(.*)$

# mask 403 on .ht* as 404
<Files ~ "^\.ht">
  Order Deny,Allow
  Allow from all
  Satisfy All
  Redirect 404 /
</Files>

RewriteEngine On
RewriteBase /

# map everything into public and set environment var
# to tag the request being valid
RewriteCond %{ENV:REDIRECT_sitealias} !set
RewriteRule ^(.*)$ /public/$1 [E=sitealias:set,L]

संक्षेप में, सार्वजनिक निर्देशिका के अंदर सब कुछ ऑनलाइन नहीं है। सार्वजनिक निर्देशिका के अंदर उदाहरण के लिए वर्डप्रेस कोडबेस हो सकता है, इसके लिए .htaccessआपको तब आवश्यकता होगी:

RewriteEngine On
# mask as 404 if directly accessed
RewriteCond %{ENV:REDIRECT_sitealias} !set
RewriteRule .* - [L,R=404]

यह जनता के लिए सीधी पहुँच को रोकता है । इसका एक हिस्सा ।htaccess -foo का आप यहां उल्लेख कर सकते हैं: .htaccess के अनुरोधों को 403 के बजाय 404 वापस करना चाहिए । यदि आपके वातावरण में काम करता है तो पर्यावरण चर के लिए आपको परीक्षण करने की आवश्यकता है। इसके अलावा आपको यह तय करने की आवश्यकता है कि क्या आप इसे संस्करण नियंत्रण में रखते हैं या नहीं।

यदि आपके पास होस्टिंग पर अधिक नियंत्रण है, तो आप यहां और अधिक सामान (और अलग-अलग / अधिक अनुकूलित) कर सकते हैं, ऊपर दिए गए उदाहरण विशिष्ट साझा-होस्टिंग वातावरण के लिए लक्षित हैं (जो कि GIT की पेशकश करते हैं, कुछ उपयोगकर्ताओं का कहना है कि आप इसे आसानी से अपने रूप में स्थापित कर सकते हैं ठीक है, मैं आम तौर पर अपने होस्टरों को ऐसा प्रदान करने के लिए कहता हूं क्योंकि मैं पसंद करता हूं यदि वे ध्यान रखते हैं कि मैं उनके लिए क्या भुगतान करता हूं)।

नकारात्मक पक्ष पर, इसकी कुछ सामान्य समस्याएं हैं जो अन्य उत्तरों में भी उल्लिखित हैं। एक बात पर मुझे गर्व नहीं है, लेकिन विकास सर्वर को विकास की प्रतिलिपि के लिए डेटाबेस सर्वर बिंदु के लिए होस्ट होस्ट को एक परिवर्तन करने के लिए क्या काम करता है। तो आप एक डेटाबेस कॉन्फ़िगरेशन रख सकते हैं। सच में कूल नहीं। साख के कारण।

स्वचालित बैकअप

हालाँकि, मैं आमतौर पर यहां बहुत परवाह नहीं करता हूं, लेकिन इसके बजाय दैनिक बैकअप रिमोट सिस्टम पर चलते हैं जो कि वृद्धिशील रूप से खुद को किसी अन्य दूरस्थ स्थान पर संग्रहीत किया जाता है। यह आसान और सस्ता है और आपको वर्डप्रेस इंस्टॉल के साथ-साथ फाइल-अपलोड, डेटाबेस और गिट रेपो दोनों को पुनर्स्थापित करने की अनुमति देता है । मेरी बैकअप कमांड के लिए भी मैं पूरी तरह से ठीक नहीं हो सकता, लेकिन मेरे लिए वे काम हैं:

mysql: mysqldump --host=%s -u %s --password=%s %s| gzip > %s
git  : git gc
       git bundle
files: tar --force-local -czf %s %s

यहाँ मैं जो सुझाव देता हूँ वह यह है कि आप अपने वर्डप्रेस इंस्टालेशन की प्रक्रियाओं को वर्डप्रेस से बाहर रखें। वे एक विशिष्ट सिस्टम पर चलाने की आवश्यकता है, तो आप सामान्य रूप से उन्हें आवेदन के अंदर की जरूरत नहीं है (उदाहरण के लिए आवेदन नीचे जा सकता है, लेकिन आप की जरूरत है इन काम करना जारी है करने के लिए)।

टीम वर्क के लिए सक्षम

एक और अच्छा लाभ यह है कि आप टीम-वर्क के लिए पहले से ही सक्षम हैं। अतिरिक्त नंगे रेपो के लिए धन्यवाद आप बहुत गलत नहीं कर सकते हैं और आप अपने सहयोगियों के साथ एक मास्टर या लाइव शाखा के अलावा दूरस्थ शाखाएं भी साझा कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.