
अपनी कहानी शुरू करने से पहले, मैं एक छोटा सा सवाल पूछूंगा: आप अपनी सर्वर परियोजनाओं को कैसे तैनात करते हैं?
यदि आप एक मुफ्त साझा होस्टिंग पर एक छोटी साइट का प्रबंधन करते हैं, तो आपको सिंक्रनाइज़ेशन समस्याएं नहीं हैं - आप ftp के माध्यम से जुड़े हैं, फ़ाइलों की प्रतिलिपि बनाई है और यह बात है। और अगर आपको कई सौ परियोजनाओं (छोटे व्यवसाय कार्ड साइटों से लोड किए गए अनुप्रयोगों तक) की तैनाती को नियंत्रित करने की आवश्यकता है, जिस पर एक दर्जन से अधिक लोग काम कर रहे हैं? यदि योग्यता अनुमति देती है, तो आप rsync, unison, आदि का उपयोग कर सकते हैं। विशेष रूप से हताश केवल रिपॉजिटरी से प्रोजेक्ट (svn, git, आदि) की कार्य प्रति को अपडेट कर सकते हैं। और उन दर्जनों कलाकारों को क्या करना होगा जिन्हें यहाँ उस छोटी सी तस्वीर को ठीक करने की तत्काल आवश्यकता है? दरअसल, उनमें से कई के लिए, सांत्वना एक जादुई अंधेरे घने जंगल है।
कटर के तहत एक समाधान का वर्णन है, जो अनुप्रयोगों को तैनात करने की प्रक्रिया को बहुत सरल करता है।
देश को अपने नायकों को जानना चाहिए
सिंकमैन परियोजना में पहले से ही एक लंबा इतिहास है, लेकिन, जैसा कि मुझे लगता है, यह अभी भी अपनी प्रासंगिकता नहीं खोई है।
पचंगा ,
कोरचासा ,
रोमानीतेव ,
विलीम ,
डब्रेन , आदि के लिए धन्यवाद, जिन्हें मैं
हबेरा पर नहीं मिला। ये सभी
बीआईटी क्रिएटिव के वर्तमान और पूर्व कर्मचारी हैं। उनके लिए धन्यवाद, यह परियोजना दिखाई दी और अभी भी रहती है। उनके साथ काम करके मैंने बहुत कुछ सीखा।
उत्सव के कुलपति
आज, अद्भुत ओपनसोर्स प्रोजेक्ट
सिंकमैन बंदूक के नीचे है।
सिंकमैन का उद्देश्य दूरस्थ परियोजनाओं के सिंक्रनाइज़ेशन को सुविधाजनक बनाना है ताकि यहां तक कि वे लोग जो प्रोग्रामिंग से दूर हैं (उदाहरण के लिए, कलाकार, डिजाइनर, प्रबंधक, आदि) स्वतंत्र रूप से दूरस्थ सर्वर के साथ परियोजनाओं को सिंक्रनाइज़ कर सकते हैं।
सिंकमैन में उत्कृष्ट वेब और कंसोल इंटरफेस हैं। नीचे सिंकमैन वेब इंटरफेस के स्क्रीनशॉट हैं।
और कुछ नहीं। परियोजनाओं की सूची, समूहों में विभाजित। प्रत्येक प्रोजेक्ट के लिए, बटन सिंक्रनाइज़ किए जाते हैं, परिवर्तनों को देखें, परिवर्तनों को वापस रोल करें। जब आप किसी विशिष्ट प्रोजेक्ट का चयन करते हैं, तो आप इसकी वर्तमान सेटिंग्स देख सकते हैं। यदि परियोजना सिंक्रनाइज़ है, तो इसे हरे रंग में हाइलाइट किया गया है। यदि नए कमिट थे जो रिमोट सर्वर पर नहीं हैं, तो रंग लाल है।
एक परियोजना स्थापित करने के बाद, इसके तुल्यकालन को क्रियाओं के निम्नलिखित अनुक्रम में घटाया जाता है:
- प्रोजेक्ट बदल दिया
- भंडार के लिए एक प्रतिबद्ध बनाया
- मैंने सिंकमैन वेब इंटरफेस में "सिंक प्रोजेक्ट" बटन पर क्लिक किया है
समय के साथ, आपको इसकी बहुत आदत हो जाती है, उदाहरण के लिए, मैं कुछ इस तरह से सिंक्रनाइज़ करता हूं:
..... svn commit -m "my changes" syncman project_to_sync
सभी प्रोजेक्ट सिंक्रनाइज़ है।
सिंक्रोनाइज़ेशन के दौरान सिंकमैन क्या करता है?
सिंक्रनाइज़ेशन 4 मुख्य चरणों में होता है:
- प्रोजेक्ट को स्थानीय नेटवर्क पर कहीं से सिंकमैन सर्वर पर एक अस्थायी फ़ोल्डर में रिपॉजिटरी से चयनित या अपडेट किया गया है।
- प्रोजेक्ट सेटिंग्स में निर्दिष्ट Presync_cmd कमांड निष्पादित होती है। इस स्तर पर, तैनाती के लिए एक लेआउट तैयार किया जाता है। उदाहरण के लिए, presync_cmd उन फ़ाइलों को हटा सकता है जिनका दूरस्थ सर्वर पर कुछ भी नहीं है: उदाहरण के लिए, आप अस्थायी निर्देशिका, अनावश्यक डिज़ाइन, इकाई परीक्षण फ़ाइलों को हटा सकते हैं।
- प्रोजेक्ट परिनियोजन यह आमतौर पर SSH पर rsync का उपयोग करके किया जाता है, लेकिन आवश्यक नहीं है। उदाहरण के लिए, आप एफ़टीपी का उपयोग कर सकते हैं (यदि rsync के लिए पहुंच की व्यवस्था करना संभव नहीं है)।
- अंतिम चरण में, पोस्टसिंक_सीएमडी कमांड प्रोजेक्ट सेटिंग्स में सेट की गई है। यह कमांड आमतौर पर एसएसएच के माध्यम से निष्पादित की जाती है, लेकिन यह बिल्कुल भी आवश्यक नहीं है। इस कमांड का कार्य उन फ़ाइलों को हटाने के लिए है जो तैनाती के बाद पुरानी हैं (उदाहरण के लिए, लिम्ब में कैश किए गए कुछ रास्ते, टेम्पलेट आदि), इसके अलावा, डेटाबेस के लिए माइग्रेशन लागू किया जा सकता है।
मुख्य विशेषताएं
मैं बहुत लंबे समय से इस समाधान का उपयोग कर रहा हूं। पर्याप्त कार्यक्षमता थी, और सिंकमैन को गीथब में ले जाने के बाद मैंने परिवर्तनों का पालन नहीं किया। दरअसल, इन परिवर्तनों ने मुझे इस पोस्ट को लिखने के लिए प्रेरित किया। तो सिंकमैन:
- ओपन सोर्स प्रोजेक्ट;
- Php में लिखा;
- Limb3 ढांचे के आधार पर;
- अनुकूलित करने के लिए आसान;
- सेटिंग्स में लचीला। अधिक बार पर्याप्त मानक सेटिंग्स हैं (उनके बारे में नीचे), लेकिन परियोजना कॉन्फ़िगरेशन फ़ाइल के माध्यम से आप सबसे अधिक मांग वाले उपयोगकर्ता को संतुष्ट करने के लिए लगभग सभी आदेशों को फिर से परिभाषित कर सकते हैं;
- सिंकमैन कोड लचीला है। सभी समान, यह Limb3 परियोजना का बेटा है! दरअसल, कार्यक्षमता का विस्तार थोड़ा कम है;
- Svn और git रिपॉजिटरी के साथ बॉक्स से बाहर काम करता है;
- बॉक्स से बाहर rsync और FTP का उपयोग करके SSH के माध्यम से सिंक्रनाइज़ेशन का समर्थन करता है;
- उपयोग में आसान। सिंक्रनाइज़ेशन करने के लिए, आपको विशिष्ट ज्ञान रखने की आवश्यकता नहीं है।
सिंकमैन को कैसे कॉन्फ़िगर करें?
चलो अंक के अनुसार सब कुछ का विश्लेषण करें:
1. भंडार से फ़ाइलें उठाओ
cd /path/to/hosts git clone https://github.com/limb-php-framework/limb-app-syncman.git syncman git submodule init git submodule update
2. एक नया वर्चुअल होस्ट जोड़ें
उदाहरण के लिए, उदाहरण के लिए, यदि आप अपाचे का उपयोग करते हैं, तो कॉन्फ़िगरेशन इस तरह हो सकता है:
मानक विन्यास <VirtualHost 192.168.0.xxx:80> ServerName syncman DocumentRoot /home/user/syncman/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/user/syncman/www> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /tmp/apache_syncman_error.log LogLevel warn CustomLog /tmp/apache_syncman_access.log combined </VirtualHost>
यदि आप वेब-इंटरफ़ेस का उपयोग करने की योजना नहीं बना रहे हैं, तो आप इस आइटम को छोड़ सकते हैं।
3. परियोजनाओं की स्थापना
3.1। संक्षिप्त उदाहरण
यदि आप ऊपर दिए गए विवरण का पालन करते हैं, तो डाउनलोड की गई फ़ाइलें फ़ोल्डर / पथ / में / होस्ट / सिंकमैन के पास होनी चाहिए। फिर सभी परियोजनाओं को / पथ / में / होस्ट / सिंकमैन / प्रोजेक्ट निर्देशिका में संग्रहीत किया जाना चाहिए।
प्रत्येक प्रोजेक्ट के लिए एक अलग फ़ोल्डर बनाया जाता है। इस फ़ोल्डर का नाम प्रोजेक्ट का नाम है। प्रोजेक्ट फ़ोल्डर में प्रोजेक्ट सेटिंग्स के साथ एक एकल फ़ाइल सेटिंग्स है ।conf.php।
उदाहरण विन्यास file1 $conf = array( // , 'server' => array( 'host' => 'myhost.com', 'user' => 'syncman', 'password' => 'qwerty', 'remote_dir' => '/var/www/myhost.com', ), // , git 'repository' => array( //-- allowed types: git, svn 'type' => 'git', 'path' => 'myrepos/myhost.com/', 'branch' => 'project_branch', ), // //-- allowed types: rsync, ftp 'type_sync' => 'ftp', //, Syncman 'presync_cmd' => 'php %local_dir%/cli/pre_sync.php', // , 'postsync_cmd' => 'ssh -i %key% %user%@%host% \'php %remote_dir%/cli/post_sync.php\'', // ftp 'history' => false, // 'category' => 'MyCategory', );
कॉन्फ़िगरेशन फ़ाइल उदाहरण 2 $conf = array( // , SSH 'server' => array( 'host' => 'myhost.com', 'user' => 'syncman', 'port' => 22, 'key' => '/home/syncman/.ssh/id_dsa', 'remote_dir' => '/var/www/myhost.com', ), // , Subversion 'repository' => array( //-- allowed types: git, svn 'type' => 'svn', 'path' => 'myrepos/myhost.com/trunk', ), // rsync SSH //-- allowed types: rsync, ftp 'type_sync' => 'rsync', //. 'presync_cmd' => 'php %local_dir%/cli/pre_sync.php', 'postsync_cmd' => 'ssh -i %key% %user%@%host% \'php %remote_dir%/cli/post_sync.php\'', // 'history' => true, // 'category' => 'MyCategory', // . //!!! , 'ssh_get_date' => "date +%F_%R", 'ssh_mkdir' => "mkdir -p \$dir", 'ssh_ln_edit' => "rm -f \$ln_path; ln -s \$new_dir \$ln_path;", 'ssh_cp' => "cp -pRT \$dir_of/ \$dir_in/", // &> /dev/null 'ssh_ls' => "ls -F --classify -1 \$dir", 'ssh_preg_dir' => "/(.)+\//", 'ssh_readlink' => "readlink -v \$link", );
3.2। एक विस्तृत उदाहरण। कदम से कदम निर्देश
यदि उदाहरण 3.1 पढ़ने के बाद। वैसे भी, यह स्पष्ट नहीं है कि परियोजना कैसे स्थापित की जाए, ...
विस्तृत निर्देशआइए दूसरे उदाहरण का अधिक विस्तार से विश्लेषण करें:
- हम एसएसएच के माध्यम से सिंकमैन सर्वर पर जाते हैं (हम मानते हैं कि सिंकमैन आपके कंप्यूटर पर स्थित नहीं है);
- सिंकमैन निर्देशिका पर जाएं, यदि परियोजना निर्देशिका नहीं बनाई गई है, तो इसे बनाएं;
- प्रोजेक्ट निर्देशिका पर जाएं और प्रोजेक्ट फ़ोल्डर myhost.com बनाएं;
- Myhost.com फ़ोल्डर पर जाएं और सेटिंग बनाने के लिए अपने पसंदीदा टेक्स्ट एडिटर का उपयोग करें ।conf.php फ़ाइल (उदाहरण 2 में सामग्री के रूप में);
- हम मानते हैं कि तुल्यकालन SSH के माध्यम से किया जाएगा (अनुभव से पता चलता है, यह सबसे अधिक इस्तेमाल किया जाने वाला विकल्प है)।
- यदि आवश्यक हो, ssh-keygen का उपयोग करके SSH के लिए एक महत्वपूर्ण जोड़ी बनाएं। हम सार्वजनिक कुंजी को myhost.com परियोजना के दूरस्थ सर्वर पर कॉपी करते हैं, हम इसे अधिकृत करते हैं। मुख्य भाग में गुप्त भाग का मार्ग निर्दिष्ट है।
- कॉन्फ़िगरेशन लिखते समय, आप किसी भी सेटिंग्स को बदल सकते हैं। इसके अलावा, यदि आप सेटिंग निर्दिष्ट करते समय% नाम% निर्दिष्ट करते हैं, तो इस टेम्पलेट के लिए संबंधित मान प्रतिस्थापित किया जाएगा (देखें, उदाहरण के लिए, पोस्टसिंक_कम कमांड)।
- इसके बाद, अपनी परियोजना के भंडार में cli / pre_sync.php स्क्रिप्ट बनाएं।
लिम्ब अनुप्रयोगों के लिए विशिष्ट pre_sync.php उदाहरण echo "Pre syncing...\n"; // $remove_dirs = array($all_shared = dirname(__FILE__) . "/../www/shared"); $remove_dirs[] = dirname(__FILE__) . "/../_docs"; // foreach($remove_dirs as $dir) `rm -rf $dir`; // mkdir($all_shared); foreach(glob(dirname(__FILE__) . "/../lib/limb/*/shared") as $pkg_shared) { echo "Moving $pkg_shared..\n"; $pkg = basename(dirname($pkg_shared)); rename($pkg_shared, "$all_shared/$pkg"); } echo "done.\n";
- इसके बाद, अपनी परियोजना के भंडार में cli / post_sync.php स्क्रिप्ट बनाएं।
लिम्ब अनुप्रयोगों के लिए विशिष्ट post_sync.php उदाहरण $dir = dirname(__FILE__); echo "Post syncing...\n"; include('migrate.php');// `rm -rf $dir/../var/compiled`; `rm -rf $dir/../var/locale`; `rm -rf $dir/../var/locators`; `rm -f $dir/../var/db_info*`; echo "done.\n";
- दोनों अंतिम फ़ाइलों को रिपॉजिटरी में जोड़ा जाना चाहिए और परियोजना के साथ सिंक्रनाइज़ किया जाना चाहिए।
- सभी प्रोजेक्ट कॉन्फ़िगर किया गया है।
स्वाभाविक रूप से, आइटम 1-2 को केवल एक बार निष्पादित किया जाता है। पॉइंट 3 को प्रत्येक प्रोजेक्ट के लिए 1 बार निष्पादित किया जाता है।
4. तैनाती और तुल्यकालन
वेब इंटरफ़ेस का उपयोग करना
प्रोजेक्ट को सिंक्रनाइज़ करने के लिए, आपको वेब पते को खोलने की आवश्यकता है जहां सिंकमैन किसी भी ब्राउज़र में स्थित है। यदि सब कुछ सही ढंग से किया गया था, तो आपको परियोजनाओं की सूची में अपना myhost.com प्रोजेक्ट देखना चाहिए।

"सिंक्रनाइज़ करें" बटन पर क्लिक करें। सिंक्रनाइज़ेशन लॉग दिखाते हुए एक नई विंडो खोलनी चाहिए।

यदि आप परिवर्तन देखना चाहते हैं, तो "शो परिवर्तन" बटन पर क्लिक करें। सिंक्रनाइज़ेशन लॉग दिखाते हुए एक नई विंडो खोलनी चाहिए।

कंसोल से
कंसोल इंटरफ़ेस ऊपर उल्लेख किया गया था। कंसोल से सिंक्रनाइज़ेशन के लिए सभी स्क्रिप्ट सिंकमैन प्रोजेक्ट के बिन फ़ोल्डर में हैं।
स्क्रिप्ट Sync.php सिंक्रोनाइज़ेशन के लिए स्क्रिप्ट का एक पुराना संस्करण है। उपयोग उदाहरण:
sync.php <project>[,<project>,<project>...] php sync.php <project>[,<project>,<project>...]
इसके अलावा, इस स्क्रिप्ट का एक नया संस्करण है - Syncman.php - अधिक सुविधाओं के साथ। कार्य टास्कमैन पैकेज पर आधारित है।
सिंकमैन व्यवहार बढ़ाएँ
सिंकमैन में, सब कुछ प्रोजेक्ट क्लास के चारों ओर घूमता है, इसलिए एप्लिकेशन के संचालन को समझने के लिए, आपको इस क्लास को समझना चाहिए। पहली नज़र में, ऐसा लग सकता है कि वहाँ सब कुछ जटिल है। लेकिन यह केवल लगता है। परियोजना लिम्ब फ्रेमवर्क वर्ग से विरासत में मिली - lmbOblect। यह लंबरैक्ट के साथ है जिसे आपको प्रोजेक्ट सीखना शुरू करने की आवश्यकता है, फिर कोई कठिनाई नहीं होगी।
नए संस्करण नियंत्रण प्रणालियों के लिए समर्थन जोड़ने के लिए, आपको SvnRepository और GitRepository वर्गों के साथ सादृश्य द्वारा संबंधित संस्करण नियंत्रण प्रणाली का समर्थन करने के लिए एक वर्ग लिखने की आवश्यकता है। वे src / model / directory में मिल सकते हैं। आपकी कक्षा तैयार हो जाने के बाद, आपको रिपॉजिटरी फ़ॉरेक्ट क्लास (src / factory directory में स्थित) में परिवर्तन करने की आवश्यकता है।
सिंक्रनाइज़ेशन के दौरान नए प्रकार के परिवहन के लिए समर्थन जोड़ने के लिए, आपको RSyncProjectSync और FtpProjectSync वर्गों के साथ सादृश्य द्वारा संबंधित वर्ग लिखने की आवश्यकता है। वे src / model / directory में मिल सकते हैं। आपकी कक्षा तैयार होने के बाद, आपको ProjectSyncFactory वर्ग (src / factory निर्देशिका में स्थित) में परिवर्तन करने की आवश्यकता है।
निष्कर्ष
मेरे लिए, वेब प्रोग्रामिंग केवल एक शौक है, और मुझे ऐसा नहीं लगता कि मैं अपनी साइटों को मैन्युअल रूप से सिंक्रनाइज़ करने में समय बर्बाद कर रहा हूं। सिंकमैन इसमें मेरी मदद करता है। और मेरा विश्वास करो, इसके उपयोग ने मुझे अपने व्यक्तिगत अमूल्य समय के एक दर्जन से अधिक घंटे बचाए हैं।
यह एप्लिकेशन कंपनी BIT क्रिएटिव में पैदा हुआ था। इसके साथ, वे सैकड़ों परियोजनाओं को सिंक्रनाइज़ करते हैं। कल्पना करें कि वे कितना समय बचाते हैं।
मुझे आशा है कि मुझे अपने पाठक में दिलचस्पी होगी। और इससे सिंकमैन और लिम्ब में उनकी रुचि जागृत हुई।
संदर्भ