الاستخدام | الأمن | سجل التغيير | زائدة
(alpha) أداة للمساعدة في تأليف المواقع الثابتة باستخدام Amazon Web Services (AWS).
الأساس المنطقي : المواقع الثابتة ممتعة. يعد النشر إلى S3 متعة خالصة. يقوم CloudFront بتوسيع نطاق شيء لم تعد تفكر فيه بعد الآن. لا توجد خوادم لإدارتها؛ لا دموع للبكاء. ومع ذلك، فإن إعداد كل شيء ليس بالأمر السهل. تعد Confetti محاولة لترميز أفضل الممارسات في برنامج قابل للتكرار باستخدام CloudFormation وتوفير أدوات سهلة الاستخدام لسيناريوهات النشر الأساسية والمتقدمة.
[confetti/confetti " 0.2.1 " ] ; ; latest release
إنشاء موقع | مزامنة موقعك | الخطوة الأخيرة: نظام أسماء النطاقات | إضافة النطاقات الفرعية
يتم حزم النثار كمهمة تمهيد. ويرجع ذلك أساسًا إلى أن التمهيد يجعل من السهل كتابة تطبيقات سطر الأوامر في Clojure دون الحاجة إلى القلق بشأن التمهيد أو حل التبعية.
توفر Confetti أمرين، في لغة Boot-lingo، يُطلق عليهما اسم المهام . ستقوم مهمة create-site
بإنشاء حزمة CloudFormation مع جميع الموارد لموقع الويب الثابت الخاص بك وحفظ جميع المعلومات المهمة في ملف EDN في الدليل الحالي.
لنستعرض مثالاً على إنشاء موقع ومزامنته لأول مرة.
هل أنت محتار بشأن مفاتيح الوصول؟ راجع قسم الأمان في الملف التمهيدي هذا.
لنفترض أنك تريد نشر موقع على my-app.com
. لإنشاء مجموعة S3 وتوزيع CloudFront ومفاتيح الوصول المقيدة، يمكنك تشغيل ما يلي:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
ملاحظة: تتأكد بتة
-d confetti
من قيام Boot بتنزيل القصاصات بحيث تكون مهمةcreate-site
متاحة.
استثناء! لأنك تريد استخدام نطاق مجرد/APEX، عليك استخدام Route53 لـ DNS. (يمكنك العثور على المزيد حول هذا الأمر في الملحق.) حاول مرة أخرى مع تمكين DNS:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
وهذا ينبغي أن يبدأ العملية. يجب أن تظهر التعليقات الأولى على شاشتك. في مرحلة ما، لن تتم طباعة أي أحداث جديدة ولكن العملية أيضًا لم تتم إرجاعها بعد. ما تنتظره الآن هو إنشاء توزيعة CloudFront الخاصة بك. يستغرق هذا عادة ما بين 10-15 دقيقة.
قد تقتل العملية في هذه المرحلة. كل شيء يعمل عن بعد ولن ينقطع. يتم حفظ ملف
.confetti.edn
في دليل العمل الحالي الخاص بك، وإذا كنت تستخدم مهمةfetch-outputs
ببيانات اعتماد كافية، فيمكنك تنزيل جميع المعلومات المفيدة في أي وقت. (ستخبرك المهمة ما إذا كانت المكدسة ليست جاهزة بعد أيضًا.)
بعد انتهاء مهمة create-site
يجب أن تجد ملفًا في دليل العمل الحالي الخاص بك: my-app-com.confetti.edn
. يجب أن تحتوي محتوياته على كل شيء مهم حول مواردك المتوفرة حديثًا:
{ :stack-id " arn:aws:cloudformation:us-east-1:297681564547:stack/my-app-com/xxx " ,
:bucket-name " my-app-com-sitebucket-3fu0w0729ndk " ,
:cloudfront-id " E3760XUWU2V9R7 " ,
:cloudfront-url " d3up0oy7r2svli.cloudfront.net " ,
:access-key " AAA " ,
:secret-key " BBB " ,
:website-url " http://my-app.com " ,
:hosted-zone-id " Z3KJWNUJTT8GHO " }
الآن كل شيء جاهز للنشر الأول!
الآن يأتي دور مهمة sync-bucket
. على الرغم من أن المهمة توفر العديد من الطرق المختلفة لتحديد ما سيتم تحميله، فسنعرض أبسطها هنا: مزامنة دليل محلي. لأغراض العرض التوضيحي، يتيح لك إنشاء دليل بسرعة:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
الآن يتيح مزامنته. خذ قيم bucket-name
access-key
secret-key
من ملف .confetti.edn :
boot -d confetti sync-bucket --bucket "my-app-com-sitebucket-3fu0w0729ndk"
--access-key AAA --secret-key BBB --dir my-app-site
;; or alternatively
boot -d confetti sync-bucket --confetti-edn your-site.confetti.edn --dir my-app-site
سيؤدي هذا إلى تحميل index.html
و about.html
إلى مجموعتك. للتحقق من أن كل شيء كان ناجحًا، يمكنك الانتقال إلى عنوان URL المُخزن كـ cloudfront-url
في ملف edn.
هناك العديد من الطرق لتحديد الملفات التي سيتم تحميلها (مع بيانات التعريف المخصصة إذا أردت ذلك) والتي لا يغطيها هذا الدليل. راجع
boot sync-bucket --help
للحصول على التفاصيل.
الآن الخطوة الوحيدة المفقودة هي إعداد DNS بشكل صحيح. يختلف ما يجب القيام به هنا اعتمادًا على ما إذا كنت قد قمت بتمكين خيار --dns
أم لا. في المثال أعلاه قمنا بتمكينه لذا فلنغطي هذه الحالة أولاً:
DNS مع Route53: نظرًا لأن لديك إعداد مجال جذر/مجرد/قمة، فقد قررت استخدام DNS مُدار بواسطة AWS. أنت الآن بحاجة إلى تعيين خوادم الأسماء للمجال الذي استخدمته لخوادم أسماء AWS. تختلف هذه المناطق باختلاف المناطق المستضافة، لذا يتعين عليك البحث عنها في وحدة تحكم AWS.
بدون Route53: عند عدم استخدام Route53، فإن الشيء الوحيد الذي عليك فعله هو إضافة إدخال CNAME إلى Zonefile الخاص بنطاقك والذي يشير إلى توزيع Cloudfront.
ستختلف كلتا الخطوتين من مسجل النطاق إلى مسجل النطاق، لذا يوصى بالتحقق من الوثائق الفردية الخاصة بكل منهما.
هل تريد طبقة المقابس الآمنة؟ وإليك كيفية تمكينه.
لنفترض أنك استخدمت Confetti لإنشاء موقع weloveparens.com
وتريد الآن إضافة موقع ثابت إلى نطاق فرعي لذلك المجال. يمكنك فقط تشغيل:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
سيؤدي هذا إلى إنشاء مجموعة سجلات Route53 في HostedZone والتي تم إنشاؤها مسبقًا لك عند إعداد weloveparens.com
. سيتم إنشاء مجموعة S3 وتوزيع CloudFront وما إلى ذلك كالمعتاد. كما هو الحال دائمًا، سيتم إنشاء كل شيء (بما في ذلك مجموعة السجلات) كمكدس CloudFormation، لذا إذا لم تعد بحاجة إليه، يمكنك فقط حذف المكدس، دون أن يتأثر weloveparens.com
.
للحصول على المساعدة في سطر الأوامر، يمكنك دائمًا تشغيل:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
لا تتردد أيضًا في فتح المشكلات لطرح الأسئلة أو اقتراح التحسينات.
يعد إعطاء مفاتيح AWS الخاصة بك لبعض البرامج والسماح لها بتشغيلها أمرًا مخيفًا نوعًا ما، لذا يهدف هذا القسم إلى توفير بعض الراحة حول ذلك.
create-site
بإنشاء مكدس CloudFormation وفقًا لقالب محدد في confetti-clj/cloudformation.--dry-run
.create-site
على أذونات لإنشاء الموارد الفردية المدرجة في قالب CloudFormation. (في المستقبل، قد توفر Confetti مقتطفًا لسياسة AWS IAM حتى تتمكن من إنشاء مستخدم لديه جميع الحقوق التي يحتاجها Confetti.) اعتبارًا من الإصدار 0.2.0
سيقوم أمر create-site
بإنشاء ملف ينتهي بـ .confetti.edn
وهو يحتوي على كافة المعلومات اللازمة لصيانة موقعك. المعلومات الموجودة في هذا الملف تحتوي على أسرار!
تحديث: لقد توصلت إلى نتيجة مفادها أن إنشاء هذا الملف فكرة سيئة. سوف يلتزم الناس بذلك حتمًا وينشرون مفاتيح مجموعة S3 الخاصة بهم. في المستقبل، أود فقط طباعة شيء ما بتنسيق يفهمه direnv وأوصي بـ env vars / direnv بدلاً من ذلك.
[confetti/cloudformation "0.1.6"]
، والتي تجلب التحسينات التالية:confetti/s3-deploy
لتحسين توافق Windows إعادة استخدام HostedZone: إنشاء HostedZone جديد لكل موقع له عيبان:
باستخدام HostedZone واحد للمجال الجذر الخاص بك example.com
يتم حل هذه المشكلات وإضافة موقع جديد على demo.example.com
هي مجرد مسألة إضافة مجموعة سجلات. تحاول Confetti الآن العثور على HostedZone موجودة وتضيف مجموعة السجلات فقط إذا وجدت واحدة.
خيار invalidation-paths
الجديد لمهمة sync-bucket
. تم تحديد مسارات الإبطال سابقًا بناءً على الملفات التي قمت بتحميلها. الآن يمكنك توفير مجموعة مخصصة. (#21 + #29)
إصلاح الخلل باستخدام الطريقة الجديدة لتوفير الخيارات عبر ملف .confetti.edn
confetti-edn
، فإننا نقبل الآن كلا الإصدارين (الذي ينتهي بـ .confetti.edn
والجزء الذي يسبقه فقط). في السابق كان من المتوقع أن تقوم فقط بتوفير الجزء الذي يسبق اللاحقة .confetti.edn
confetti-edn
ومهمة fetch-outputs
create-site
fetch-outputs
[confetti/cloudformation "0.1.3"]
للحصول على :website-url
في مخرجات المكدس بغض النظر عما إذا كان Route53 مستخدمًا أم لاfetch-outputs
إذا لم يتم استخدام Route53 fetch-outputs
التي يمكن استخدامها لتنزيل مخرجات مكدسات Cloudformation. في السابق، كانت التقارير تتعطل في كثير من الأحيان ولم تحفظ مخرجات المكدس بشكل صحيح. للتحايل على هذا، يمكنك الآن إلغاء التقارير واستدعاء fetch-outputs
في أي وقت لاحق لتنزيل المخرجات.sync-bucket
الآن خيار confetti-edn
الذي يمكن استخدامه لتوفير جزء Some-id من {some-id}.confetti.edn
. سيتم بعد ذلك استخدام المعلومات الموجودة في هذا الملف بدلاً من خيارات المهام العادية.إذا لم يعمل أي شيء كما هو متوقع، يرجى فتح مشكلة. ؟
ملاحظة: إذا انتهى بك الأمر إلى الحصول على أخطاء 504 عند طلب الأصول من توزيع Cloudfront الخاص بك، فتأكد من أنك تستخدم بالفعل نقطة نهاية موقع الويب كأصل. يجب أن تكون سياسة بروتوكول الأصل "HTTP فقط" نتيجة لاستخدام نقطة نهاية موقع الويب.
يدعم Cloudfront مجالات APEX ولكن فقط إذا كنت تستخدم سجلات ALIAS
الخاصة بـ Route53. يمكن العثور على مزيد من المعلومات في الإعلان الرسمي.
يجعل هذا القيد من الصعب أتمتة إعدادات مجال الجذر (APEX)، وبالتالي فهو غير مدعوم حاليًا لإنشاء مواقع لنطاقات الجذر دون إدارة DNS باستخدام Route53 أيضًا.