عندما تكبر وتكبر فإنك لا تفعل ذلك  ¢ à  à  لا ترغب في الاحتفاظ بخادم واحد أكثر لاستضافة عدد قليل من المواقع والمدونات مثل هذا ، مراقبة ما إذا كان يسمح بتشفير الشهادة المجددة حتى على المواقع القديمة وما إلى ذلك  ¢ à  à ¦ على الأقل هذا صحيح بالنسبة me :) وقررت نقله إلى بعض الأنظمة الأساسية المُدارة بالكامل. للظهور الأول ، كان التخزين السحابي من Google حلاً جيدًا بما فيه الكفاية ، ولكن بعد إنشاء حاوية ، وإلقاء نظرة كاملة على البرنامج التعليمي ، أفهم أن تمكين https لن يكون سهلاً (باستخدام موازن التحميل وما إلى ذلك) ليس رخيصًا (إنه   ¢ à  à  s $ 0.025 لكل أول 5 قواعد في الساعة =>18 $ شهريًا) فقط استخدم Google Cloud Run لعدد قليل من واجهات برمجة التطبيقات ويتم دفعه فقط مقابل الوقت المستخدم / وحدة المعالجة المركزية / ذاكرة الوصول العشوائي ، ولكن في حالة عدم وجود موقع ويب نشط للغاية ، حتى Free Tier كافية لاستضافة بعض مواقع الويب تمامًا مجانا بعد قراءة الوثائق ، يبدو الأمر بسيطًا للغاية ، حتى أنك لست بحاجة إلى تقديم بيانات الاعتماد يدويًا داخل حالات حاوية Cloud Run (المُدارة بالكامل) عند استخدام مكتبات عميل GCP! ملاحظة: إذا كنت تريد فقط الكود النهائي لنشر الحاوية الخاصة بك ، فيرجى زيارة github.com/kanocz/gclwebgcs نحتاج أولاً إلى الاستماع على المنفذ المقدم من قِبل متغير PORT env: http.ListenAndServe + os.Getenv (à  ¢ à  à  PORT لا شيء) عبر GCS env weà  ¢ à  à  سوف نحدد اسم حاوية Google Cloud Storage (يجب أن تكون في نفس المشروع ctx: = Context.Background () client، err: = storage.NewClient (ctx) bucket = client.Bucket (os.Getenv (à  ¢ à  à  GCS وقراءة الكائن المراد إرساله: obj: = bucket.Object (r.URL.Path [1 // strip firstobjAttrs، err: = obj.Attrs (ctx) obj = obj.ReadCompressed (true) // نحن لا نفعل ¢ à  à  تريد فك الضغط وضغطه مرة أخرى للنقل // نسخ رؤوس w.HeaderSet (à  ¢ à  à  نوع المحتوى  ¢ ¢  à  ، objAttrs.ContentType) w.HeaderSet (à  ¢ à  à  ترميز المحتوى  ¢ à  à  ، objAttrs.ContentEncoding) w.HeaderSet (à  ¢ à  à  طول المحتوى à  ، objAttrs.ContentDisposition) w.HeaderSet (à  ¢ à  à  Cache-Controlà  ¢ à  à  ، objAttrs.CacheControl) w.HeaderSet (à  ¢ à  à  ETagà  ¢ à  à  ، objAttrs.Etag) // وأرسل قارئ البيانات ، يخطئ: = obj.NewReader (ctx) io.Copy (w ، قارئ) حقًا لخدمة موقع الويب ، نطلب أيضًا فهرس الخادم ، والتعامل مع الأخطاء التي لم يتم العثور عليها وما إلى ذلك ، ولكن الأمر ليس معقدًا أيضًا لا تنس أن تخلق go.mod لمساعدة Google Cloud Build :) من النشر إلى حاوية التسجيل فقط يُنشئ gcloud - علامة gcr.io/project1/gclwebgcs (يرجى استبدال مشروع 1 مع اسم مشروعك) وإنشاء / تحديث الخدمة باستخدام نشر تشغيل الإصدار التجريبي من gcloud - صورة gcr.io/project1/gclwebgcs \ - إدارة النظام الأساسي --set-env-vars = GCS = GCSbucketName serviceName لا تنسى تحميل الملفات إلى GCSbucketName في نفس المشروع وتعيين اسم المجال للخدمة الجديدة ، سيتم توفير شهادة ssl وإدارتها تلقائيًا! هذا  ¢ ¢   à  كل شيء :)