نشر تطبيق أساسي "ترجمة Google" تطبيق Express.js على App Engine وCloud Functions وCloud Run.

1. نظرة عامة

تهدف هذه السلسلة من الدروس التطبيقية حول الترميز (البرامج التعليمية العملية الذاتية) إلى مساعدة المطوّرين على فهم الخيارات المختلفة المتاحة لهم عند نشر تطبيقاتهم. ستتعلم كيفية استخدام واجهة برمجة تطبيقات Google Cloud Translation API في تطبيق ويب بسيط. يمكن تشغيل هذا التطبيق على الجهاز أو نشره على نظام أساسي للحوسبة بدون خادم (App Engine أو Cloud Functions أو Cloud Run).

يمكنك إعداد هذا البرنامج التعليمي حول JavaScript باستخدام Node.js باستخدام إطار عمل الويب Express.js. ستتعلم أيضًا كيفية الوصول إلى Google Cloud APIs من خلال الأنظمة الأساسية بدون خوادم. جميع إصدارات هذا التطبيق من نظام "بدون خادم" مستودع مفتوح المصدر يتضمّن إصدارًا من هذا التطبيق بلغة Python ودروسًا تطبيقية مستقلة عن الترميز. يستضيف المستودع أيضًا تطبيقات مشابهة توضّح للمطوّرين كيفية الوصول إلى واجهات Google APIs غير المستندة إلى السحابة الإلكترونية من الأنظمة الأساسية التابعة لنا بدون خوادم.

يركّز هذا الدرس التطبيقي حول الترميز على نشر هذا التطبيق على الأنظمة الأساسية المكتوبة بالخط العريض أعلاه.

ستتعرَّف على كيفية

المتطلبات

  • أن يكون لديك مشروع على Google Cloud مع حساب فوترة نشط على Cloud
  • إطار عمل ويب مثبّت للتشغيل محليًا ( Flask لأولئك الذين ينفذون البرنامج التعليمي Python أو Express لأولئك الذين ينفّذون البرنامج التعليمي JavaScript/Node.js)
  • نظام أساسي واحد على الأقل للحوسبة غير قابل للتغيير مفعَّل لعمليات نشر Google Cloud
  • مهارات البرمجة الأساسية (Python أو JavaScript/Node.js)
  • معرفة عملية بأوامر نظام التشغيل الأساسية

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

اقرأها وأكمِل التمارين القراءة فقط

ما هو تقييمك لتجربتك في التطوير باستخدام Python أو Node.js؟

حديث متوسط بارع

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟

حديث متوسط بارع

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

3- تفعيل واجهة برمجة تطبيقات الترجمة

في هذا القسم، ستتعرّف على طريقة تفعيل Google APIs بشكل عام. بالنسبة إلى نموذج التطبيق الذي نقدّمه، عليك تفعيل Cloud Translation API. سيتم أيضًا تفعيل App Engine و/أو Cloud Functions و/أو Cloud Run (بالإضافة إلى Cloud Artifact Registry)، بناءً على الأنظمة الأساسية التي تريد نشر نموذج التطبيق عليها.

تفعيل Google APIs

مقدمة

بغض النظر عن واجهة Google API التي تريد استخدامها في تطبيقك، يجب تفعيلها. يمكن تفعيل واجهات برمجة التطبيقات من سطر الأوامر أو من Cloud Console. عملية تفعيل واجهات برمجة التطبيقات متطابقة، لذلك بعد تفعيل إحدى واجهات برمجة التطبيقات، يمكنك إجراء أخرى بالطريقة نفسها.

الخيار 1: gcloud واجهة سطر الأوامر (Cloud Shell أو البيئة المحلية)

على الرغم من أن تفعيل واجهات برمجة التطبيقات من Cloud Console هو الأكثر شيوعًا، إلا أنّ بعض المطوّرين يفضّلون تنفيذ كل شيء من سطر الأوامر. لإجراء ذلك، عليك البحث عن "اسم الخدمة" في واجهة برمجة التطبيقات. يبدو أنّ عنوان URL هو: SERVICE_NAME.googleapis.com. يمكنك العثور على هذه المنتجات في الرسم البياني للمنتجات المتوافقة، أو يمكنك طلبها آليًا باستخدام Google Discovery API.

من خلال هذه المعلومات، وباستخدام Cloud Shell (أو بيئة التطوير المحلية التي تم تثبيت أداة سطر الأوامر gcloud فيها)، يمكنك تفعيل واجهة برمجة التطبيقات على النحو التالي:

gcloud services enable SERVICE_NAME.googleapis.com

المثال 1: تفعيل Cloud Vision API

gcloud services enable vision.googleapis.com

المثال 2: تفعيل Google App Engine

gcloud services enable appengine.googleapis.com

مثال 3: تفعيل واجهات برمجة تطبيقات متعددة من خلال طلب واحد على سبيل المثال، إذا كان هذا الدرس التطبيقي حول الترميز يتضمّن مشاهدين ينشرون تطبيقًا باستخدام Cloud Translation API على App Engine وCloud Functions وCloud Run، سيكون سطر الأوامر على النحو التالي:

gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

يؤدي هذا الأمر إلى تفعيل App Engine وCloud Functions وCloud Run وCloud Translation API. بالإضافة إلى ذلك، يفعّل Cloud Artifact Registry لأنّه يجب تسجيل صور الحاوية من خلال نظام Cloud Build ليتم نشرها في Cloud Run.

الخيار 2: Cloud Console

يمكنك أيضًا تفعيل Google APIs في مدير واجهات برمجة التطبيقات. من Cloud Console، انتقِل إلى مدير واجهة برمجة التطبيقات واختَر المكتبة.

fb0f1d315f122d4a.png

ابدأ بإدخال اسم واجهة برمجة التطبيقات في شريط البحث للاطّلاع على النتائج المطابقة:

2275786a24f8f204.png

اختَر واجهة برمجة التطبيقات التي تريد تفعيلها وانقر على الزر تفعيل:

7960a6752a1da767.png

تعتبر عملية تفعيل جميع واجهات برمجة التطبيقات مشابهة لعملية تفعيل جميع واجهات برمجة التطبيقات، بغض النظر عن واجهة Google API التي تريد استخدامها.

التكلفة

يمكن استخدام العديد من واجهات Google APIs بدون رسوم، ولكن هناك تكاليف عند استخدام معظم منتجات Google Cloud وواجهات برمجة التطبيقات. عند تفعيل Cloud APIs، قد يُطلَب منك حساب فوترة نشط. ومع ذلك، تقدّم بعض منتجات Google Cloud الحالة "مجانية دائمًا" tier والتي يجب أن تتجاوزها لتحمل تكاليف الفوترة.

يتأهل مستخدمو GCP الجدد للفترة التجريبية المجانية، وهي حاليًا صالحة بقيمة 300 دولار أمريكي خلال أول 90 يومًا. لا تتطلب الدروس التطبيقية حول الترميز عادةً الكثير من الفواتير أو أي رسوم فوترة، لذا نقترح عليك إيقاف "الفترة التجريبية المجانية" إلى أن تصبح مستعدًا لاختبارها، لا سيّما أنّها عرض لمرة واحدة. لا تنتهي صلاحية حصص "المستوى المجاني" ولا تسري بغض النظر عما إذا كنت تستخدم الفترة التجريبية المجانية أم لا.

على المستخدمين الرجوع إلى معلومات الأسعار الخاصة بأي واجهة برمجة تطبيقات قبل تفعيلها (على سبيل المثال، صفحة أسعار Cloud Vision API )، لا سيما إذا كانت تتضمّن مستوى مجانيًا، وإذا كان الأمر كذلك، يُرجى توضيح ما إذا كانت تتضمّن فئة مجانية. وما دمت في حدود الحدود اليومية أو الشهرية المحددة بشكل إجمالي، لن تتحمل أي رسوم. تختلف الأسعار والمستويات المجانية بين واجهات برمجة التطبيقات الخاصة بمجموعات المنتجات من Google. أمثلة:

تتم فوترة منتجات Google المختلفة بشكل مختلف، لذا احرص على الرجوع إلى الوثائق المناسبة لهذه المعلومات.

التأكد من تفعيل الخدمات المطلوبة

تأكَّد من استخدام Cloud Translation API في مدير واجهة برمجة التطبيقات حسب التوجيهات أعلاه. إذا لم تفعّل الأنظمة الأساسية بدون خوادم من سطر الأوامر، يمكنك إجراء ذلك من كل لوحة بيانات خاصة بها في Cloud Console: App Engine وCloud Functions وCloud Run.

على الرغم من أنّه من المفيد تفعيل واجهات برمجة التطبيقات من Cloud Console، ولكن يمكنك استخدام أداة gcloud التي تستغرق ثوانٍ لتفعيل جميع الخدمات بشكل أسرع، وذلك وفقًا لما يلي:

$ gcloud services enable appengine.googleapis.com \
cloudfunctions.googleapis.com artifactregistry.googleapis.com \
run.googleapis.com translate.googleapis.com
Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.

مزيد من المعلومات عن التكاليف

قسم التكاليف أعلاه عام على مستوى واجهات Google APIs. دعونا نتناول المزيد من التفاصيل لهذا البرنامج التعليمي. على الرغم من أن حصتها الشهرية غير مدرجة في الحساب "المجاني دائمًا" بشكل عام صفحة ملخّص المستوى، تشير صفحة أسعار Translation API إلى أنّ جميع المستخدمين يتلقّون عددًا ثابتًا من الأحرف المترجمة شهريًا. ويجب ألا يتم تحصيل أي رسوم من واجهة برمجة التطبيقات إذا بقيت أقل من هذا الحدّ. لمزيد من المعلومات حول تكاليف استخدام منصات Google Cloud بدون خوادم، يُرجى الاطّلاع على قسم التكاليف في المستودع. حملة "التنظيف" في النهاية كيفية إيقاف تحمُّل تكلفة الفوترة بعد الانتهاء من هذا الدرس التطبيقي حول الترميز.

4. الحصول على نموذج رمز التطبيق

تنزيل ملف ZIP أو نُسخة طبق الأصل

  • نزِّل ملف ZIP أو استنساخ repo باستخدام git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git
  • إذا لم تكن لديك بيئة مطوِّر برامج محلية وأردت تنفيذ هذا البرنامج التعليمي في Cloud Shell، يمكنك استنساخ المستودع باستخدام أمر git clone نفسه هناك.
  • يمكنك أيضًا الوصول إلى ملف ZIP من زر الرمز الأخضر الخاص به كما هو موضّح في لقطة الشاشة التالية:

5cd6110c4414cf65.png

والآن بعد أن أصبح لديك كل شيء، أنشئ نسخة كاملة من المجلد للقيام بهذا البرنامج التعليمي المحدد، لأنه من المحتمل أن يتضمن حذف الملفات أو تغييرها. إذا كنت تريد إجراء عملية نشر مختلفة، يمكنك البدء من جديد عن طريق نسخ النسخة الأصلية حتى لا تضطر إلى استنساخها أو تنزيلها مرة أخرى.

5- تأكيد بيئة Node.js

لإعداد بيئة Node.js، يمكنك إجراء ما يلي:

  1. التأكد من تثبيت الإصدارات المعاصرة من العقدة (>=10) وNPM (>=6)
  2. انتقِل إلى المكان الذي استنسخت فيه repo (أو فك ضغط ملف ZIP)، ثم انتقِل إلى مجلد "cloud/nodejs".
  3. تأكَّد من توفّر package.json ثم شغِّل npm install.

بالنسبة إلى رقم 1 أعلاه، يمكنك التحقق من الإصدارات الموجودة في سطر الأوامر:

$ node -v
v17.0.1
$ npm -v
8.1.0

6- جولة حول نموذج التطبيق

نموذج التطبيق هو مشتق بسيط من ترجمة Google يطلب من المستخدمين إدخال نص باللغة الإنجليزية وتلقّي الترجمة المماثلة لهذا النص باللغة الإسبانية.

يشير ملف الإعداد package.json إلى الحِزَم التابعة لجهات خارجية المطلوبة للتطبيق (يُرجى العلم أنّه قد يتم تعديل إصدارات الحِزم على نحو يتجاوز ما هو وارد هنا):

{
  "name": "cloud-nebulous-serverless-nodejs",
  "version": "0.0.1",
  "description": "Nebulous Serverless sample app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/test_neb.js"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/translate": "^6.3.1",
    "express": "^4.17.1",
    "nunjucks": "^3.2.3"
  },
  "devDependencies": {
    "mocha": "^9.1.3",
    "supertest": "^6.1.6"
  }
}

يُرجى فتح ملف index.js لنتمكّن من التعرّف على طريقة عمله. مع إغفال السطور التي تم التعليق عليها بشأن الترخيص، ستظهر لك هذه السطور في الأعلى والأسفل:

const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');

const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();

const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
    parent = `projects/${result}`;
});


if (!process.env.FUNCTION_TARGET) {
    app.listen(PORT, () =>
        console.log(`Listening on port ${PORT}`)
    );
}

# . . . [translate() function definition] . . .

app.all('/', translate);
module.exports = {
    app
};
  1. توفّر require إطار عمل ووظائف إنشاء النماذج ومكتبة برامج واجهة برمجة التطبيقات Cloud Translation API.
  2. تمثّل المتغيّرات العمومية تطبيق الويب ورقم تعريف المشروع على Google Cloud وعميل Translation API و"مسار الموقع الجغرافي" الرئيسي. لطلبات البيانات من واجهة برمجة التطبيقات Translation API واللغتَين SOURCE وTARGET. في هذه الحالة، ستكون اللغة الإنجليزية (en) والإسبانية (es)، ولكن يمكنك تغيير هذه القيم إلى رموز لغات أخرى متوافقة مع Cloud Translation API.
  3. العنصر الأول في كل زوج (SOURCE وTARGET) هو رمز اللغة، والثاني هو اسم اللغة (ويتم استخدامه لأغراض العرض فقط لأنّه لا صلة له بواجهة برمجة التطبيقات).
  4. الأسطر القليلة في أسفل الصفحة هي إرسال جميع طلبات HTTP إلى translate() ثم تصدير كائن التطبيق app.

أخيرًا، في منتصف index.js، توجد الدالة translate():

async function translate(req, rsp) {
    let text = null;
    let translated = null;
    if (req.method === 'POST') {
        text = req.body.text.trim();
        if (text) {
            const data = {
                contents: [text],
                parent: parent,
                targetLanguageCode: TARGET[0]
            };
            const [response] = await TRANSLATE.translateText(data);
            translated = response.translations[0].translatedText;
        }
    }
    const context = {
        orig:  {text: text, lc: SOURCE},
        trans: {text: translated, lc: TARGET}
    };
    rsp.render('index.html', context);
}

تؤدي الوظيفة الأساسية إلى أخذ البيانات التي أدخلها المستخدم واستدعاء واجهة برمجة التطبيقات Translation API لتنفيذ المهام الصعبة. لنحلل هذا الأمر:

  1. أعِد ضبط المتغيّرات الأساسية للنموذج. هذا بشكل أساسي لطلبات GET حيث إن طلبات POST ستحتوي على بيانات تحل محلها.
  2. إذا كانت طلب POST، استخدِم النص لترجمته. وإذا لم يكن فارغًا، أنشئ بنية JSON تمثّل متطلبات البيانات الوصفية لواجهة برمجة التطبيقات. بعد ذلك، يمكنك طلب واجهة برمجة التطبيقات للخدمة.
  3. لم نوجِّه الترميز في SOURCE[0] إلى واجهة برمجة التطبيقات إلى مصدر معيّن باللغة الإنجليزية. عند استبعاد اللغة المصدر، يعني ذلك أنّك تطلب من واجهة برمجة التطبيقات التعرّف التلقائي على اللغة المصدر (يُرجى الاطّلاع على sourceLanguageCode في المستندات).
  4. بغض النظر عن ذلك، يجب تنسيق النتائج الفعلية (POST) أو عدم وجود بيانات (GET) في سياق النموذج وعرضها.

يوجد الجزء المرئي من التطبيق في ملف النموذج index.html. يعرض هذا الزر أي نتائج مترجَمة سابقًا (تكون فارغة في الحالات الأخرى) متبوعة بالنموذج الذي يطلب ترجمة المحتوى:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #DDDDDD;
}
</style>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
    <h4>Previous translation</h4>
    <li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
    <li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

بالنسبة لما يتبقى من البرنامج التعليمي، يمكنك تحديد أي من الخيارات الأربعة لنشر هذا التطبيق وتشغيله. وتكون جميع عمليات النشر اختيارية، ما يعني أنّه بإمكانك إجراء أي منها أو جميعها.

  1. تشغيل الخدمة على الجهاز
  2. النشر في App Engine (بيئة عادية)
  3. النشر في دوال Cloud
  4. النشر إلى التشغيل في السحابة الإلكترونية

7. الخيار 1: تشغيل الخدمة محليًا

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

لتشغيل نموذج التطبيق محليًا، هناك ثلاث خطوات منفصلة يجب اتخاذها:

  1. إنشاء حساب خدمة
  2. إنشاء مفتاحَي تشفير عام/خاص لحساب الخدمة
  3. تنزيل ملف بيانات الاعتماد والحزمة التي تحتوي على رمز التطبيق
  4. بدء الخدمة

مزيد من المعلومات عن حسابات الخدمة

حسابات الخدمة هي آلية الأمان للوصول إلى واجهات Google APIs للتطبيقات المستندة إلى السحابة الإلكترونية عند الوصول إلى بيانات لا تخص مستخدمين. عند النشر على السحابة الإلكترونية، توفّر جميع منصات الحوسبة في Google Cloud (التي لا تستند إلى خادم وغيرها) حسابات الخدمة التلقائية لتقليل وقت زيادة نشاط إعداد المستخدمين إلى السحابة الإلكترونية.

تأتي حسابات الخدمة التلقائية مع مجموعة واسعة من الأذونات "لتجاوز الإجراءات الصارمة" ولكن عند الاستعداد لإطلاق خدمة إنتاج، ننصح بشدة المستخدمين باتّباع أفضل الممارسات وهي "الامتيازات الأقل" ولكن إنشاء حسابات خدمة يديرها المستخدم مع الحصول على أذونات كافية فقط لكي يعمل تطبيقك بشكل صحيح. بصرف النظر عن ذلك، لا تتوفّر حسابات خدمة تلقائية لعمليات النشر المحلية، لذا عليك إنشاء حساب خدمة بالإضافة إلى مفتاح حساب خدمة (زوج مفتاح عام/خاص في الواقع) وإتاحة بيانات الاعتماد هذه لرمز التطبيق.

إنشاء مفتاحَي تشفير لحساب الخدمة وتنزيل ملف بيانات الاعتماد

يمكنك اتّباع التعليمات الواردة في هذه الصفحة لإنشاء حساب خدمة ومفتاحَي تشفير عام/خاص لتشغيلهما على الجهاز. عند إنشاء مفتاح حساب الخدمة، سيُطلب منك تقديم الأذونات المطلوبة. تأكّد من اختيار roles/cloudtranslate.user لتتمكّن من الوصول إلى واجهة برمجة التطبيقات بنجاح.

بعد إنشاء مفتاحَي التشفير بنجاح، سيُطلب منك تنزيل ملف مفتاح حساب الخدمة. يمكنك تسميته credentials.json ونقله إلى مجلد المستوى الأعلى للتطبيق. أصبح عليك الآن توجيه حزمة تطوير البرامج (SDK) للسحابة الإلكترونية إلى استخدام بيانات الاعتماد هذه: اضبط متغيّر بيئة GOOGLE_APPLICATION_CREDENTIALS للإشارة إلى ذلك الملف. يمكنك أيضًا العثور على مزيد من المعلومات حول هذه العملية على هذه الصفحة التي تتناول استخدام حسابات الخدمة.

بدء الخدمة

عندما تكون مستعدًا للمتابعة، يمكنك تشغيل خادم Express محليًا باستخدام الأمر التالي:

$ npm start

> cloud-nebulous-serverless-nodejs@0.0.1 start
> node index.js

Listening on port 8080

انتقِل إلى متصفح الويب للاتصال به على localhost:8080، ومن المفترض أن يظهر لك شيء على النحو التالي:

adc6665b7ae13c40.png

يجب ترجمة أي نص لإتمام عملية الإعداد.

fc154326080bf14f.png

عندما تكون راضيًا عنه، قم بإنهاء الخادم باستخدام ^C (control-C) ثم الخروج. تهانينا لإطلاق عملية نشر محلية. هناك أخبار سارة: أصبح النشر على السحابة الإلكترونية أسهل بكثير.

تحديد المشاكل وحلّها

هل يظهر لك خطأ كهذا عند طلب ترجمة؟

node:fs:2486
      handleErrorFromBinding(ctx);
      ^

Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
    . . .

الحل: يعني هذا الخطأ أنّك لم تُكمل عملية إنشاء حساب خدمة وتنزيل ملفّ زوج المفتاح العام/الخاص credentials.json. يُرجى الرجوع إلى " الخيار 1: تشغيل الخدمة على الجهاز" وأكمِل هذه العملية وثبِّت التوثيقات في المجلد الرئيسي قبل المتابعة.

8. الخيار 2: النشر في App Engine (بيئة عادية)

هذا القسم من الدرس التطبيقي حول الترميز مخصَّص فقط للنشر على Node App Engine. إذا لم تكن مهتمًا، يُرجى الانتقال إلى القسم التالي.

تستخدِم عملية النشر هذه ملف الإعداد app.yaml الذي يحدد وقت التشغيل المطلوب استخدامه مع سطر واحد لـ App Engine:

runtime: nodejs16

لا يُستخدم الملف app.yaml في Cloud Functions أو Cloud Run. إذا لم تكن تخطط لاستخدام App Engine، ربما تم حذف هذا الملف بأمان. عندما تكون جاهزًا للنشر في App Engine، شغّل الأمر التالي:

$ gcloud app deploy

بعد اختيار منطقة، سيكون ناتج gcloud app deploy أقل طولًا بكثير ويجب أن يظهر على النحو التالي:

Services to deploy:

descriptor:                  [/private/tmp/nodejs/app.yaml]
source:                      [/private/tmp/nodejs]
target project:              [PROJECT_ID]
target service:              [default]
target version:              [2021...]
target url:                  [https://PROJECT_ID.REG_ABBR.appspot.com]
target service account:      [App Engine default service account]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                          ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json.

Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

To take a quick anonymous survey, run:
  $ gcloud survey

والآن بعد أن أصبح تطبيقك متاحًا على مستوى العالم في جميع أنحاء العالم، من المفترض أن تتمكّن من الوصول إليه على عنوان URL الذي يحتوي على رقم تعريف مشروعك، ومن المفترض أن تظهر لك نتيجة مشابهة لإصدار Express المحلي، ولكن عليك معرفة أنّه يتم تشغيله في السحابة الإلكترونية ومتوفّر في جميع أنحاء العالم:

da28f951c33a2c3d.png

إذا أرسلت طلبًا، ستجد أنه يعمل بالطريقة نفسها التي يعمل بها جميع عمليات النشر الأخرى.

9. الخيار 3: النشر في دوال السحابة الإلكترونية

هذا القسم من الدرس التطبيقي حول الترميز مخصَّص فقط للنشر في Node Cloud Functions. إذا لم تكن مهتمًا، يُرجى الانتقال إلى القسم التالي.

ما مِن ملفات إعداد تتضمّن دوال Cloud، لذا عندما تكون جاهزًا للنشر في دوال Cloud، نفِّذ الأمر التالي:

$ gcloud functions deploy translate \
  --runtime nodejs16 \
  --entry-point app \
  --trigger-http \
  --region REGION \
  --allow-unauthenticated

قد يتضمّن مشروع Google Cloud Platform REGION تلقائيًا، ولكن يمكنك استخدام العلامة --region لنشر وظيفتك في منطقة معيّنة. إذا لم تعجبك منتجات Cloud الأخرى، لن تسري عليك دوال السحابة الإلكترونية. بغض النظر عن المنطقة التي تختارها، يجب أن يبدو ناتج gcloud functions deploy على النحو التالي:

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
entryPoint: app
httpsTrigger:
  securityLevel: SECURE_OPTIONAL
  url: https://REGION-PROJECT_ID.cloudfunctions.net/translate
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/PROJECT_ID/locations/REGION/functions/translate
runtime: nodejs16
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip
status: ACTIVE
timeout: 60s
updateTime: '2021...'
versionId: '...'

والآن بعد أن أصبح تطبيقك متاحًا على مستوى العالم في جميع أنحاء العالم، من المفترض أن تتمكّن من الوصول إليه من خلال عنوان URL الذي يحتوي على رقم تعريف مشروعك كما هو موضَّح في مخرجات عملية النشر (ضمن "httpsTrigger/url"). يجب أن يظهر عنوان URL على النحو التالي: https://REGION-PROJECT_ID.cloudfunctions.net/translate والذي يختلف حسب المنطقة التي اخترتها ورقم تعريف مشروعك على Google Cloud.

518f1c3165f2096d.png

10. الخيار 4: النشر على "التشغيل في السحابة الإلكترونية"

هذا القسم من الدرس التطبيقي حول الترميز مخصَّص للنشر في Cloud Run فقط. إذا لم تكن مهتمًا، يُرجى الانتقال إلى القسم التالي.

لا تتوفر ملفات تهيئة مع تشغيل Cloud، لذا عندما تكون مستعدًا للنشر في Cloud Run، يمكنك اتباع الإرشادات أدناه.

أنت الآن جاهز لنشر خدمة الترجمة في Cloud Run من خلال تشغيل الأمر التالي:

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed

يجب أن تظهر النتيجة على النحو التالي وتقدم بعض المطالبات للخطوات التالية:

Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

تعمل Cloud Buildpack على تطوير تطبيقاتك المُستخدَمة في Cloud Run تشبه إلى حدّ كبير طريقة تشغيل تطبيقك على الجهاز. بالنسبة إلى مستخدمي Node.js، يمكن تشغيل npm install وnpm start. بالنسبة إلى Python، يتم تشغيل pip install -r requirements.txt وبدء التطبيق من خلال التعليمات الواردة في Procfile. (ينطبق الأمر نفسه على جميع اللغات الأخرى التي توفّرها Cloud Buildpacks). سيصبح تطبيقك جاهزًا للاستخدام بعد اكتمال عملية التصميم.

وبعد ذلك، (يتم نشر تطبيقك على مستوى منطقة معيّنة ولكن) يصبح متاحًا عالميًا، ويمكن الوصول إليه على عنوان URL الذي يحتوي على رقم تعريف مشروعك كما هو موضّح في ناتج النشر (ضمن "Service URL:"

169f6edf5f7d2068.png

يجب ترجمة أي نص لإتمام عملية الإعداد.

31554e71cb80f1b4.png

11. الخاتمة

تهانينا! تعرفت على كيفية تفعيل واجهة برمجة التطبيقات Cloud Translation API واستخدامها، والحصول على بيانات الاعتماد اللازمة، ونشر تطبيق ويب بسيط لخدمة Express على الجهاز أو في App Engine و/أو دوال Cloud و/أو Cloud Run. يُرجى الاطّلاع على مجلد Repo لمعرفة المزيد من المعلومات أو للوصول إلى الإصدارات الأخرى من هذا التطبيق بالإضافة إلى الدروس التطبيقية الأخرى حول الترميز.

تَنظيم

تتيح لك Cloud Translation API تنفيذ عدد ثابت من الأحرف المُترجَمة شهريًا مجانًا. يشمل App Engine أيضًا حصة مجانية، وينطبق الأمر نفسه على الوظائف السحابية وتشغيل السحابة الإلكترونية. ستتحمل رسومًا في حالة تجاوز أي منهما. إذا كنت تخطّط للمتابعة إلى الدرس التطبيقي التالي حول الترميز، لن تحتاج إلى إيقاف التطبيق.

ومع ذلك، إذا لم تكن مستعدًا للانتقال إلى البرنامج التعليمي التالي أو إذا كنت قلقًا بشأن اكتشاف الإنترنت للتطبيق الذي نشرته للتو، يمكنك إيقاف تطبيق App Engine أو حذف دالتك السحابية أو إيقاف خدمة تشغيل السحابة الإلكترونية لتجنب تحمُّل الرسوم. عندما تكون مستعدًا للانتقال إلى الدرس التطبيقي التالي حول الترميز، يمكنك إعادة تفعيله. من ناحية أخرى، إذا كنت لا تريد مواصلة استخدام هذا التطبيق أو الدروس التطبيقية الأخرى حول الترميز وأردت حذف جميع البيانات بالكامل، يمكنك إيقاف مشروعك.

بالإضافة إلى ذلك، إنّ النشر على منصة حوسبة بدون خادم في Google Cloud يؤدي إلى تحمُّل تكاليف بسيطة لإنشاء المحتوى وتخزينه. تمتلك خدمة Cloud Build حصتها المجانية الخاصة، كما هي الحال في Cloud Storage. لمزيد من الشفافية، تنشئ Cloud Build صورة تطبيقك، ويتم تخزينها في Cloud Container Registry أو Artifact Registry، الذي يليه. كما يستهلك تخزين تلك الصورة بعضًا من هذه الحصة كما هو الحال مع مخرجات الشبكة عند نقل تلك الصورة إلى الخدمة. ومع ذلك، قد تكون مقيمًا في منطقة لا يتوفر بها هذا المستوى المجاني، لذا عليك الانتباه إلى استخدام مساحة التخزين لتقليل التكاليف المحتملة.

12. مراجع إضافية

في الأقسام التالية، يمكنك العثور على مواد قراءة إضافية بالإضافة إلى تمارين موصى بها لزيادة معرفتك المكتسبة من إكمال هذا البرنامج التعليمي.

دراسة إضافية

الآن بعد أن أصبحت لديك بعض الخبرة في استخدام واجهة برمجة التطبيقات Translation API، حان وقت إجراء بعض التمارين الإضافية لتطوير مهاراتك بشكل أكبر. لمتابعة مسارك التعليمي، عدّل نموذج التطبيق للقيام بما يلي:

  1. أكمِل جميع الإصدارات الأخرى من هذا الدرس التطبيقي حول الترميز للتشغيل محليًا أو للنشر على أنظمة الحوسبة الأساسية بدون خوادم في Google Cloud (يمكنك الاطّلاع على repo README).
  2. أكمل هذا البرنامج التعليمي باستخدام لغة برمجة أخرى.
  3. قم بتغيير هذا التطبيق بحيث يدعم لغات مصدر أو هدف مختلفة.
  4. ترقية هذا التطبيق لترجمة النص إلى أكثر من لغة واحدة تغيير ملف القالب لتظهر قائمة منسدلة للغات الهدف المدعومة.

مزيد من المعلومات

Google App Engine

وظائف Google Cloud

تشغيل السحابة الإلكترونية من Google

Google Cloud Buildpacks وContainer Registry و Artifact Registry

ترجمة Google Cloud وGoogle ML Kit

منتجات/صفحات Google Cloud الأخرى

الترخيص

هذا البرنامج التعليمي مرخّص بموجب ترخيص Creative Commons Attribution 2.0 عام، في حين أن رمز المصدر في المستودع مرخص بموجب Apache 2.