2012-03-16 23 views
6

के लिए एसएसएल निर्दिष्ट करें मैं हेरोकू में सीडर स्टैक पर एक रेल 3.2 ऐप चला रहा हूं।हेरोकू बाहरी MySQL डेटाबेस कनेक्शन

मैं अपने MySQL डेटाबेस के लिए अमेज़ॅन आरडीएस का उपयोग कर रहा हूं, और मेरे पास Heroku config vars में उचित DATABASE_URL सेटअप है।

मैं अमेज़ॅन आरडीएस के संबंध में एसएसएल का उपयोग करने के लिए हेरोोकू कैसे प्राप्त करूं?

आम तौर पर इसे डेटाबेस.आईएमएल में एक मान के रूप में निर्दिष्ट किया जाएगा, लेकिन चूंकि हेरोोकू हमारे लिए डेटाबेस.आईएमएल उत्पन्न करता है, मुझे यकीन नहीं है कि इस सेटिंग को कैसे नियंत्रित किया जाए।

धन्यवाद!

उत्तर

1

इंजेक्शन डेटाबेस.आईएमएल को देखने से (http://neilmiddleton.com/sharing-databases-between-heroku-applications/ के नीचे देखें) आप क्वेरी पैराम्स के रूप में डीबी यूआरएल के हिस्से के रूप में अतिरिक्त कॉन्फ़िगरेशन में पास कर सकते हैं।

सिद्धांत रूप में, यह आपको इसे कॉन्फ़िगर करने देता है कि आप कैसे चाहते हैं हालांकि मैंने इसे आजमाया नहीं है।

+1

धन्यवाद नील। यह बहुत अच्छा काम किया! अधिक विशेष रूप से, मेरा हेरोोक कॉन्फ़िगरेशन DATABASE_URL कुछ ऐसा दिखता है: mysql2: // उपयोगकर्ता नाम: पासवर्ड @ hostname/databasename? Sslca =/path/to/ca.pem – Nathan

12

आप some mysql2 SSL paramsDATABASE_URL कॉन्फ़िगरेशन के माध्यम से निर्दिष्ट कर सकते हैं। उन्हें गतिशील database.yml पर आइटम के रूप में जोड़ा जाएगा जो हेरोकू बिल्ड प्रक्रिया के दौरान उत्पन्न होता है, और इसलिए जब mysql2 कनेक्शन बनाए जाते हैं तो वे पारित हो जाएंगे।

काम करने के लिए आपको पास करने के लिए केवल एक ही पैरा है sslca (sslcapath के साथ भ्रमित नहीं होना चाहिए)।

1. Amazon RDS CA certificate डाउनलोड करें और अपने ऐप के साथ इसे बंडल करें।

(संपादित करें) अमेज़ॅन मार्च 2015 में rotating this certificate होगा। आपको इसके बजाय उस पृष्ठ से नई फ़ाइल की आवश्यकता होगी।

curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem

2. git करने के लिए फ़ाइल जोड़ें, और Heroku को पुनर्वितरित।

3. बदलें DATABASE_URLsslca पारित करने के लिए:

heroku config:add DATABASE_URL="mysql2://username:[email protected]/dbname?sslca=config/amazon-rds-ca-cert.pem -a <app_id>

रिश्तेदार पथ है नीचे महत्वपूर्ण देखने।

यही है!

sslca के एक रिश्तेदार पथ पारित करने के लिए सुनिश्चित करें कि

GRANT USAGE ON dbname.* TO 'username'@'%' REQUIRE SSL; 

समस्या निवारण: अब आप एसएसएल काम कर रहे है तो आप उसे लागू करने के लिए है कि उपयोगकर्ता के साथ सभी कनेक्शनों केवल एसएसएल की अनुमति देने के लिए कर सकते हैं! अन्यथा, rake assets:precompile एक एसएसएल त्रुटि के साथ तोड़ सकता है।

SSL connection error: ASN: bad other signature confirmation 

या बस: आप की तरह एक त्रुटि प्राप्त करते हैं

SSL connection error 

...तो सीए प्रमाण फ़ाइल के संदर्भ में कुछ गलत होने की संभावना है।

+2

चरण 3 के तहत: -a क्या लगता है? Heroku ऐप का नाम है? – jmogera

+2

यदि आपके पास केवल एक ऐप है- a {app_id} अक्सर छोड़ा जा सकता है। टर्मिनल में ''' heroku ऐप्स''' का प्रयोग यह देखने के लिए करें कि कौन से ऐप्स लॉग इन उपयोगकर्ता से संबंधित हैं। –

+1

इसके अतिरिक्त मुझे अपने सुरक्षा समूह में MySQL पोर्ट जोड़ना पड़ा। स्रोत है: 0.0.0.0/0 और पोर्ट रेंज है: 3306 – djburdick

संबंधित मुद्दे