2010-04-28 10 views
10

मैं एक सार्वजनिक होस्ट पर रहने वाले एक एप्लिकेशन को विकसित कर रहा हूं लेकिन जिसका स्रोत मुझे कॉर्पोरेट फ़ायरवॉल के पीछे गिट भंडार में रखना होगा। मुझे बहुतscp के माध्यम से तैनाती की धीमी गति से थक गया है (पूरे भंडार की प्रतिलिपि बना रहा है और इसे प्रत्येक तैनाती पर एसएसएच पर भेज रहा है) और रिमोट होस्ट बस अपडेट करने के लिए git pull करना चाहता है। समस्या यह है कि फ़ायरवॉल आने वाले एसएसएच कनेक्शन को प्रतिबंधित करता है।क्या कैपिस्ट्रानो एक रिवर्स एसएसएच सुरंग पर चेकआउट कर सकता है?

क्या मेरे लिए मेरे कंप्यूटर से तैनाती कंप्यूटर पर एक एसएसएच सुरंग स्थापित करना संभव होगा और git pull के स्रोत के रूप में मेरे भंडार का उपयोग करना संभव होगा? आखिरकार, git वितरित किया गया है, इसलिए मेरी प्रति केंद्रीय के रूप में एक भंडार के रूप में मान्य है। यदि यह संभव है, सुरंग आदेश और Capistrano विन्यास क्या होगा?

मुझे लगता है कि सुरंग की तरह

ssh -R something:deployserver.com:something [email protected] 

उत्तर

7

Net :: SSH implements remote forwarding कुछ दिखेगा। मैंने सभी कैपिस्ट्रानो के स्रोत कोड को देखा है और वर्तमान रिलीज में इसका कोई संदर्भ नहीं देख सका। कम से कम कोई भी नहीं, जो आपको कैपिस्ट्रानो के साथ तैनात करने से पहले दूरस्थ अग्रेषण स्थापित करने से नहीं रोकता है।

आप क्या करना चाहते हैं :local_repository और :repository पथ अलग-अलग सेट करें। :local_repository को यह निर्धारित करने के लिए स्थानीय रूप से संदर्भित किया जाता है कि कनेक्शन शुरू होने से पहले तैनाती के लिए कौन सी प्रतिबद्धता का उपयोग किया जाएगा। कनेक्शन शुरू होने के बाद रिमोट सर्वर से खींचने के लिए :repository छोड़ देता है। यह वह जगह है जहां आप फ़ायरवॉल के पीछे भंडार के पथ निर्दिष्ट कर सकते हैं।

# deploy.rb 
set :local_repository, "ssh://[email protected]/path/to/project.git" 
set :repository, "ssh://[email protected]:9000/path/to/project.git" 

आपके द्वारा तैनात करने से पहले, दूरस्थ आगे स्थापित करना सुनिश्चित करें। आपको प्रत्येक सर्वर के लिए इसे दोहराने की आवश्यकता होगी।

$ ssh -R 9000:serverbehindfirewall:22 [email protected] 
# CTRL + C + A (Screen) or ⌘ + T (Terminal.app) to open new tab 
$ cap HOSTFILTER=deployserver.com deploy # HOSTFILTER reduces set to specified host. Only useful if you have multiple servers. 

Net :: SSH यह आसानी से एक काम जो कुछ भी करने से पहले मार डाला जाता है और कुछ अधिक से अधिक लचीलापन प्रदान जब कई सर्वरों के लिए की तैनाती में तब्दील किया जा सकता है का उपयोग करना।

आखिरकार, आप एसपीपी का उपयोग कर रहे हैं, तो आप deploy_via, :remote_cache सेट करना चाहते हैं जो रिमोट सर्वर पर रिपॉजिटरी की एक प्रति रखता है। इससे आपके तैनाती के समय में कमी आती है भ्रष्टाचार का मौका कम हो जाता है। मेरे लिए निम्न कार्य

Capistrano 3.x का उपयोग करना,:

0

this SO question से मेरा उत्तर देखें

namespace :deploy do 
    desc "Open SSH Tunnel to GitLab" 
    task :open_tunnel do 
    on roles(:app) do 
     info "Opening SSH Remote Tunnel..." 
     self.send(:with_ssh) do |ssh| 
     # ssh -R 9000:192.168.1.123:22 
     ssh.forward.remote(22, "192.168.1.123", 9000) 
     end 
    end 
    end 
    before "deploy:check", "deploy:open_tunnel" 
end 

कृपया ध्यान दें कि ssh.forward.remotessh -R तुलना में एक अलग क्रम में मानकों की उम्मीद है, इसके बाद के संस्करण के बराबर है ssh -R 9000:192.168.1.123:22

यह कार्य एक निजी विधि कहता है, अगर कोई व्यक्ति कैपिस्ट्रानो के एसएसएच कनेक्शन तक पहुंचने का आधिकारिक तरीका जानता है, तो कृपया टिप्पणी करें या संपादित करें।

संपादित करें: इसके अलावा SSHKit के README

की धारा Tunneling and other related SSH themes देखना
संबंधित मुद्दे