Skip to content

نشر Potato على AWS Lightsail

ضع دراسة تعليق توضيحي على Potato في AWS Lightsail مقابل $12 شهريًا باستخدام potato deploy، من إعداد بيانات الاعتماد إلى سحب التعليقات في النهاية.

يضع potato deploy up --provider aws دراسة تعليق توضيحي على جهاز افتراضي واحد في AWS Lightsail بسعر ثابت قدره $12 شهريًا، مع عنوان HTTPS ترسله إلى معلّقيك. Lightsail هو هدف AWS الذي ينبغي استخدامه ما لم يكن معطّلًا في حسابك. يشمل السعر عنوان IPv4 وقرصًا بسعة 60 GB يبقى بعد إعادة التشغيل، ولا يحتاج Potato إلا إلى صلاحيتي lightsail:* وsts:GetCallerIdentity، لذا يعمل تحت دور IAM مقيَّد. تتطلب هذه الصفحة Potato 2.10 أو أحدث وملف إعداد سبق أن شغّلته باستخدام potato start.

إعداد بيانات اعتماد AWS

يقرأ Potato بيانات اعتماد AWS بالطريقة نفسها التي تقرؤها بها أداة سطر الأوامر aws، من AWS_ACCESS_KEY_ID وAWS_SECRET_ACCESS_KEY، ثم AWS_PROFILE، ثم ~/.aws/credentials و~/.aws/config. ثبّت إضافة AWS، وسجّل الدخول باستخدام AWS CLI، وتحقق من أن Potato يرى الحساب الذي تتوقعه:

bash
pip install 'potato-annotation[deploy-aws]'
aws configure                     # or: aws sso login --profile lab
potato deploy providers --verify

يسأل providers --verify كل مزوّد عن صاحب بيانات اعتمادك ويطبع الإجابة. وإذا كانت مؤسستك تستخدم تسجيل الدخول الموحّد، فمرّر اسم الملف الشخصي إلى كل عملية نشر باستخدام --aws-profile lab، ويسجّله Potato حتى تستخدم الأوامر اللاحقة الحساب نفسه. لا يكتب Potato بيانات اعتماد AWS على القرص أبدًا.

إذا كان مستخدم IAM أو الدور الخاص بك مقيَّدًا، فاطلب من المسؤول عن حسابك lightsail:* وsts:GetCallerIdentity. يحتاج هدفا AWS الآخران إلى صلاحيات أكثر من هذه. فهدف EC2 (--provider aws-ec2، بنحو $18 شهريًا) مخصص للحسابات التي عُطِّل فيها Lightsail، وهدف ECS Express (--provider aws-ecs) يشغّل حاوية لا يبقى قرصها بعد إعادة التشغيل.

تحديد من يمكنه تسجيل الدخول

لا يغيّر potato deploy إعدادات تسجيل الدخول لديك، وعنوان Lightsail عام. إذا كان ملف الإعداد يسمح لأي شخص بالتسجيل، فسيبلّغ التشغيل التجريبي أدناه عن التحذير D003، "Anyone who finds the URL can register and annotate." (يستطيع أي شخص يعثر على عنوان URL أن يسجّل ويعلّق). في دراسة تعهيد جماعي يكون التسجيل المفتوح مقصودًا عادةً، لأن المنصة ترسل العمّال إلى الرابط. أما للمعلّقين المسمَّين، فاسردهم تحت user_config.users مع allow_all_users: false (إدارة كلمات المرور) أو اجعلهم يسجّلون الدخول عبر Google أو GitHub أو مؤسستك (مصادقة SSO وOAuth) قبل أن تنشر.

مراجعة الخطة

لا يحتاج التشغيل التجريبي إلى حساب AWS ولا ينشئ شيئًا. فهو يطبع تقرير الفحص المسبق، وكل خطوة سيتخذها النشر، والتكلفة التقديرية:

bash
potato deploy up myproject/config.yaml --provider aws --dry-run

في النشر الافتراضي، تنشئ الخطة مثيلًا واحدًا يحمل اسم المهمة في us-east-1، باستخدام الحزمة small_3_0 بسعة 2 GB ونظام Ubuntu 24.04. وتربط به عنوان IP ثابتًا، فيبقى العنوان وشهادته بعد الإيقاف والتشغيل، ولا تفتح إلا المنافذ 22 و80 و443. يستمع Potato على المنفذ 8000 خلف خادم الويب Caddy، ولا يفتح النشر المنفذ 8000 أبدًا. ويولّد Potato مفتاح نشر SSH لهذا النشر ولا يستخدم مفاتيح SSH الخاصة بك.

ثلاثة خيارات تغيّر القيم الافتراضية. يقبل --region أي منطقة من مناطق Lightsail. ولأن Potato يحتفظ بمجموعة العناصر في الذاكرة، فإن مجموعة نصوص أكبر من أن تتسع في 2 GB تحتاج إلى --size medium_3_0، الذي يعطي 4 GB مقابل $24 شهريًا. ويضيف --volume-gb قرص Lightsail منفصلًا بسعر $0.10 لكل GB شهريًا ويحفظ بيانات المهمة عليه.

النشر

شغّل الأمر نفسه من دون --dry-run. يعرض Potato الخطة مرة أخرى وينتظر تأكيدك:

bash
potato deploy up myproject/config.yaml --provider aws

يستغرق النشر عدة دقائق بينما يقلع المثيل ويثبّت Docker. وينتهي بطباعة عنوان URL، وهو عنوان https:// على عنوان IP الثابت، ومسار ملف مفتاح المشرف، .potato/secrets.json بجانب ملف الإعداد. يفتح مفتاح المشرف لوحة تحكم المشرف على /admin. وتشغيل up مرة أخرى بعد تعديل ملف الإعداد يرفع النسخة الجديدة ويعيد تشغيل المهمة على المثيل نفسه.

من دون اسم نطاق، تصدر Let's Encrypt الشهادة لعنوان IP. تدوم الشهادة نحو ستة أيام وتتجدد تلقائيًا. ويبلّغ potato deploy status myproject/config.yaml عن أي تجديد يفشل، لذا افحصه كل بضعة أيام إذا كانت الدراسة تعمل دون متابعة. ولاستخدام نطاقك الخاص، وجّه سجل DNS من نوع A إلى عنوان IP الثابت وأعد النشر باستخدام --domain annotate.example.edu.

إنهاء الدراسة

التعليقات موجودة على قرص المثيل، الذي يبقى بعد إعادة التشغيل والإقلاع من جديد لكنه لا يبقى بعد destroy. اسحبها إلى جهازك أولًا، وافحصها، ثم احذف المثيل:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

يكتب pull كل ما جمعه النشر في مجلد جديد باسم potato-pull-<name>-<timestamp> وينسخ قواعد البيانات باستخدام أمر النسخ الاحتياطي في SQLite. ولا يعمل destroy على نشر لم يُسحب قط. وهو يحرّر عنوان IP الثابت، لأن Lightsail يحاسب على العنوان غير المرتبط بمثيل. ومع --volume-gb، يُبقي destroy --keep-data على القرص المنفصل.

استكشاف الأخطاء وإصلاحها

"AWS rejected the credentials" تعني أن جلسة تسجيل الدخول الموحّد انتهت صلاحيتها أو أن AWS_PROFILE يسمّي ملفًا شخصيًا غير موجود. شغّل aws sso login وانشر مرة أخرى.

"Lightsail does not sell bundle …" تظهر عندما تعيد AWS تسمية الحزم بعد تغيير في الأسعار. يسرد الخطأ الحزم المعروضة للبيع حاليًا، ويقبل --size واحدة منها.

يفشل HTTPS في الدقائق الأولى لأن الشهادة تُطلب بمجرد أن يصبح المثيل قابلًا للوصول. ويبلّغ potato deploy status عن خطأ الشهادة بمعزل عن الخادم المتوقف.

قراءة إضافية