كيفية بناء خادم Raspberry Pi للتطوير

نشرت: 2022-03-11

Raspberry Pi هو جهاز كمبيوتر صغير يمكنك الحصول عليه بسعر منخفض يصل إلى 5 دولارات أمريكية ويمكنك من خلاله تشغيل العديد من أنواع البرامج المختلفة وبناء العديد من المشاريع المختلفة.

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

ما الذي تحتاجه لخادم Raspberry Pi المنزلي هذا؟

في حين أن هذا هو الآن برنامج تعليمي Raspberry Pi 3 على وجه الخصوص ، إلا أنه لا يزال من المفترض أن يعمل مع الطرز التي تعود إلى الجيل الأول - إذا كان لديك طراز أقدم أو Raspberry Pi Zero ، فيرجى إخبارنا بتجربتك في التعليقات أدناه.

بالإضافة إلى لوحة Raspberry Pi نفسها ، ستحتاج إلى:

  • شاحن Micro USB
  • كابل إيثرنت
  • بطاقة microSD (بحد أدنى 8 جيجا بايت ، ويبدو أن البطاقات حتى 32 جيجا بايت تعمل بشكل جيد)

ستكون هذه أيضًا مفيدة أثناء الإعداد الأولي:

  • لوحة مفاتيح USB
  • كابل HDMI وشاشة

نظام التشغيل Raspberry Pi OS: Raspbian

يعد تثبيت نظام التشغيل على Raspberry Pi أمرًا بسيطًا. أولاً ، باستخدام جهاز الكمبيوتر الخاص بك ، قم بتثبيت صورة التمهيد على بطاقة microSD. ثم أدخل البطاقة ببساطة في Raspberry Pi وقم بالتمهيد من هناك.

Raspbian هو توزيع Linux مأخوذ من Debian 7.0 ( Wheezy ) ، وهو نظام التشغيل الرسمي لـ Raspberry Pi المحسّن لبنية الجهاز. بينما توجد خيارات أخرى لتشغيل نظام التشغيل المفضل لديك على Pi ، سنستخدم Raspbian نظرًا لبساطته.

تم تحديث هذا البرنامج التعليمي للعمل مع هذا الإصدار (أو الأحدث) من Raspbian:

 Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64

لتثبيت Raspbian ، توجه إلى صفحة التنزيل الرسمية وقم بتنزيل الملف المضغوط بأحدث إصدار من Raspbian.

بعد ذلك ، أدخل بطاقة microSD في فتحة بطاقة SD بجهاز الكمبيوتر أو المحول. اعتمادًا على نظام تشغيل جهاز الكمبيوتر الخاص بك ، اتبع التعليمات المتوفرة على موقع Raspberry على الويب لنظام التشغيل Linux أو Mac OS أو Windows.

بمجرد الانتهاء من العملية ، أخرج بطاقة SD من جهاز الكمبيوتر الخاص بك وأدخلها في Raspberry Pi. قم بتوصيل Raspberry Pi بجهاز التوجيه الخاص بك باستخدام كابل Ethernet ، وقم بتوصيل شاحن Micro USB ، والذي سيبدأ تشغيل Raspberry Pi.

للتكوين الأولي ، هناك خياران:

  • إذا كان لديك لوحة مفاتيح USB وشاشة HDMI ، فيمكنك توصيلهما بـ Raspberry Pi للإعداد الأولي.
    • يجب أن يتعرف Pi الخاص بك على هذه الأجهزة بمجرد توصيلها.
    • في المرة الأولى التي يتم فيها تشغيل Pi ، سيتم تشغيل raspi-config تلقائيًا. بعد التمهيد الأول ، ستحتاج إلى تشغيل sudo raspi-config بنفسك لتهيئة الجهاز.
  • إذا لم يكن لديك ، فيمكنك الاتصال بـ Raspberry Pi أثناء تشغيله باستخدام SSH:
    • أولاً ، تحتاج إلى العثور على عنوان IP الخاص بـ Raspberry Pi في شبكتك المحلية. يمكن القيام بذلك عن طريق الاتصال بصفحة مسؤول جهاز التوجيه الخاص بك ، أو باستخدام أداة شبكة مثل nmap .
    • بمجرد حصولك على عنوان IP الخاص بالجهاز ، اتصل به باستخدام SSH من جهازك الطرفي (أو من خلال Putty إذا كنت تستخدم Windows). المستخدم الافتراضي هو pi ، وكلمة المرور الافتراضية هي raspberry . لذلك ، على سبيل المثال ، إذا كان عنوان IP هو 192.168.1.16 ، فقم بتشغيل ssh [email protected] وأدخل كلمة المرور عندما يُطلب منك ذلك.
    • عندما تكون متصلاً ، قم بتشغيل sudo raspi-config .

raspi-config خلال الإعداد النهائي. يمكنك تكوين جميع الخيارات ولكن الأهم من ذلك هما: لتوسيع نظام الملفات ، والتأكد من أن كل مساحة تخزين بطاقة SD متاحة لنظام التشغيل ، وتغيير كلمة المرور لمستخدم Pi الافتراضي ، بحيث يكون خادمك محمي من المتسللين.

Raspi-config

قم بتثبيت خادم ويب (Nginx) على Raspberry Pi الخاص بك

بعد ذلك ، ستقوم بتثبيت خادم الويب. أنا أفضل Nginx لأنه يحتوي على مساحة صغيرة في الذاكرة ، ولأنه يعمل بشكل جيد مع Node.js (الذي ستقوم بإعداده لاحقًا). ستعمل خوادم الويب الأخرى ، مثل Apache أو lighttpd أيضًا ، لكننا سنستخدم Nginx في هذا العرض التوضيحي.

قبل أن تبدأ في تثبيت أي شيء ، يجب أن تتأكد من تحديث كل شيء عن طريق تشغيل هذه الأوامر على Pi:

 sudo apt-get update sudo apt-get upgrade

ثم يمكنك تثبيت Nginx باستخدام apt-get :

 sudo apt-get install nginx

بمجرد اكتمال التثبيت ، ابدأ الخادم بتشغيل:

 sudo service nginx start

إذا لم تكن مضطرًا إلى اكتشاف عنوان IP المحلي الخاص بـ Raspberry Pi في الخطوة السابقة ، فقد حان الوقت لمعرفة ذلك عن طريق تشغيل ifconfig . سيكون إخراج محول Ethernet الخاص بك تحت eth0 ، ومع عنوان IP المحلي الخاص به المسمى inet addr .

بمجرد معرفة عنوان IP ، يمكنك توجيه متصفح جهاز الكمبيوتر الخاص بك إليه ، حيث سترى رسالة "مرحبًا بك في Nginx" الافتراضية.

فتح على الويب: Port Forwarding

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

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

عندما يبدأ جهاز على الشبكة المحلية اتصالاً (على سبيل المثال ، عند فتح موقع ويب على متصفحك) ، يتعرف جهاز التوجيه على حركة الاستجابة الواردة باعتبارها جزءًا من هذا الاتصال ، ويسمح لها بالمرور. ومع ذلك ، إذا تلقى جهاز التوجيه حركة مرور واردة ليست جزءًا من اتصال مفتوح (على سبيل المثال ، عندما يحاول جهاز خارجي بدء اتصال بجهاز داخلي) ، فسيحظر حركة المرور الواردة من العبور إلى الشبكة. هذه ميزة أمان مهمة لحماية الشبكة!

فكيف يمكنك الاتصال بـ Pi الخاص بك من الخارج؟ الجواب هو ميناء الشحن. يجب تكوين جهاز التوجيه للسماح بالاتصالات الواردة على منافذ معينة بالمرور ، وإرسالها إلى الجهاز الصحيح. بشكل افتراضي ، يستخدم بروتوكول HTTP المنفذ 80 ، ويستخدم SSH المنفذ 22 ، لذلك هذان هما المنفذان اللذان تحتاج إلى فتحهما على جهاز التوجيه الخاص بك من أجل الوصول إلى تطبيق الويب الخاص بك ، والسماح بالاتصالات الآمنة لإدارة الخادم الخاص بك.

ميناء الشحن.

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

تحتاج إلى فتح منفذ لاتصالات HTTP ومنفذ آخر لاتصالات SSH. تتكون الفكرة الأساسية من إعادة توجيه البيانات الموجهة إلى هذين المنفذين الخارجيين إلى Raspberry Pi الخاص بك ، مع انتقال حركة مرور الويب إلى المنفذ 80 حيث يستمع Nginx ، وتنتقل حركة مرور SSH إلى المنفذ 22 ، حيث يقبل خادم SSH الاتصالات من أجهزة الكمبيوتر الخارجية. فيما يلي مثال على كيفية ظهور ذلك في صفحة تكوين جهاز التوجيه الخاص بك:

جدول تكوين إعادة توجيه المنفذ.

تكوين إعادة توجيه المنفذ إذا كان عنوان IP الداخلي الخاص بـ Raspberry Pi هو 192.168.1.16 . يتم إعادة توجيه كل حركة المرور الواردة من المنفذين 80 أو 22 إلى هذا العنوان الداخلي.

يمكنك تحديد عنوان IP الخارجي لجهاز التوجيه الخاص بك عن طريق كتابة "ما هو عنوان IP الخاص بي" في Google. إذا انتقلت بعد ذلك إلى خارج شبكة جهاز التوجيه ، فيمكنك اختبار أن إعادة توجيه المنفذ تعمل عن طريق فتح اتصال SSH مع ssh pi@{external IP address} . وبالمثل ، يمكن اختبار إعادة توجيه منفذ HTTP عن طريق إدخال عنوان IP الخارجي في شريط عنوان المتصفح. فقط ضع في اعتبارك أن إعادة توجيه المنفذ تسمح لأي شخص من الخارج بالوصول إلى الجهاز على هذه المنافذ إذا كانوا يعرفون عنوان IP الخارجي لجهاز التوجيه الخاص بك.

إذا لم يكن لديك عنوان IP ثابت ، فيمكنك إعداد DNS الديناميكي. إنها خطوة بسيطة وسهلة للغاية. يمكنك إعداد DNS الديناميكي من جهاز التوجيه الخاص بك أو يمكنك تكوين Raspberry Pi الخاص بك لذلك. لن أقوم بتغطية كيفية تكوين DDNS هنا ، ولكن لدى BitPi.co برنامج تعليمي جيد حول هذا الموضوع إذا لزم الأمر.

قم بتثبيت Framework: Full-stack JavaScript

يمكنك تشغيل معظم أطر عمل الويب أعلى Nginx ، لكن دعنا نرى كيفية استخدام JavaScript كامل المكدس. للقيام بذلك ، تحتاج إلى تثبيت Node.js و MongoDB.

في الوقت الحاضر ، يتم تثبيت Node.js بسهولة على Raspberry Pi باستخدام:

 sudo apt-get install nodejs

بمجرد انتهاء التثبيت ، يمكنك التحقق مما إذا كان يعمل عن طريق تشغيل node -v .

الآن يمكنك تثبيت MongoDB فقط عن طريق كتابة:

 sudo apt-get install mongodb

فقط كن على علم أنه إذا احتجت في أي وقت إلى إيقاف تشغيل Raspberry Pi ، فأنت بحاجة إلى إيقاف تشغيل الخدمة أولاً لتجنب تلف قاعدة البيانات:

 sudo service mongodb stop

انشر تطبيقك

يمكنك التطوير على جهازك المحلي ، ثم دفع تغييراتك إلى مستودع Git على BitBucket. نظرًا لأن Raspbian يأتي مع Git مثبتًا مسبقًا ، يمكنك بعد ذلك سحب أحدث كود تطبيق على الجهاز وتشغيله.

سقالة المشروع

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

تثبيت generator-angular-fullstack على جهاز الكمبيوتر الخاص بك:

 npm install -g generator-angular-fullstack

قم بإنشاء دليل جديد لتطبيقك:

 mkdir my-app cd my-app

وسقالة التطبيق:

 yo angular-fullstack my-app

قم بإنشاء المستودع وادفع الرمز

الآن قم بإنشاء مستودع في BitBucket ، كما هو موضح هنا. ثم قم بإعداد دليلك المحلي:

 git init git remote add origin [email protected]:USER/REPO.git

حتى تتمكن من الالتزام ودفع الكود:

 git add . git commit -m 'Initial commit' git push -u origin master

يأتي المولد مع المكوّن الإضافي grunt-build-control ، والذي يسمح لك بربط كود البناء بفرع معين في مستودعك. ما عليك سوى إضافة تكوين BitBucket إلى Gruntfile.js في الدليل الجذر للتطبيق الخاص بك:

 buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: '[email protected]:USER/REPO.git', branch: 'build' } } }, // ...

شغّل الآن:

 grunt build

... لإنشاء مجلد التوزيع ، متبوعًا بما يلي:

 grunt buildcontrol:bitbucket

... للالتزام ودفع الكود إلى فرع البناء في المستودع الخاص بك.

قم بإنشاء مفتاح SSH

لديك الآن رمزك مستضاف. قبل أن تتمكن من نشره على Raspberry Pi الخاص بك ، تحتاج إلى إنشاء مفتاح SSH لـ Raspberry Pi وإضافته إلى حساب BitBucket الخاص بك. سنقوم بتنفيذ هذه الخطوة بسرعة ، ولكن إذا واجهتك أي مشكلة ، فيرجى اتباع دليل BitBucket. لذا ، قم بتسجيل الدخول مرة أخرى إلى محطة Raspberry Pi الخاصة بك ، وقم بإنشاء زوج المفاتيح العام / الخاص:

 ssh-keygen

ثم ابدأ الوكيل:

 ssh-agent /bin/bash

وأضف المفتاح إلى الوكيل:

 ssh-add /home/pi/.ssh/id_rsa

الآن تحتاج فقط إلى إخراج محتوى المفتاح العام:

 cat /home/pi/.ssh/id_rsa.pub

... حتى تتمكن من نسخها ولصقها في BitBucket.

في BitBucket ، انقر فوق صورة ملفك الشخصي وانتقل إلى إدارة الحساب . ضمن الأمان ، ابحث عن مفاتيح SSH ، وانقر فوق الزر إضافة مفتاح .

استنساخ المستودع

لا توجد اتفاقية حول مكان وضع رمز تطبيقاتك ، ولكن يمكنك إنشاء دليل /var/www ووضع جميع مشاريعك هناك.

 cd /var sudo mkdir www

لتجنب استخدام sudo عندما تريد وضع ملفات في webroot ، يمكنك تغيير المالك إلى مستخدم Pi الخاص بك والمجموعة إلى www-data التي يستخدمها Nginx:

 sudo chown -R pi:www-data www cd www

الآن ، يمكنك استنساخ فرع البناء للمستودع الخاص بك وتثبيت التبعيات:

 git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production

بمجرد الانتهاء ، يمكنك بدء تشغيل تطبيقك ، وضبط البيئة على الإنتاج:

 export NODE_ENV=production; node server/app.js &

الآن ، قم بتوجيه متصفح الكمبيوتر الخاص بك إلى عنوان IP الخاص بالجهاز للتحقق مما إذا كان يعمل.

هل تتمنى أن يكون لديك خادم مطور يمكنك الاتصال به بنفسك؟ يمكنك ذلك باستخدام #RaspberryPi.
سقسقة

تكوين Nginx Reverse Proxy

لا تزال هناك خطوة واحدة متبقية لتيسير الوصول إلى التطبيق الخاص بك من الخارج. على الرغم من أن Nginx يستمع إلى المنفذ 80 ، حيث سيتلقى طلبات HTTP لـ Pi الخاص بك ، فإن تطبيق Node نفسه يستمع على منفذ مختلف (على سبيل المثال ، المنفذ 8080). لذلك ، تحتاج إلى تكوين Nginx للعمل كوكيل عكسي ، والتعرف على الطلبات المخصصة لتطبيقك ، وتمريرها إلى Node.

يحتفظ Nginx بملف التكوين لكل تطبيق يخدمه في مجلد sites-available :

 cd /etc/nginx/sites-available/

هنا ، يمكنك نسخ ملف التكوين default وتعديله على راحتك:

 sudo cp default my-app sudo nano my-app

يجب أن يبدو ملف التكوين النهائي على هذا النحو ، مع عمل Nginx كوكيل لخادم Node.js:

 server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }

لتمكين هذا التكوين ، تحتاج إلى إنشاء ارتباط رمزي في المجلد الذي sites-enabled فيه ، حيث يبحث Nginx عن التكوينات النشطة أثناء وقت التشغيل:

 sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app

وأعد تحميل الخدمة لتفعيل هذه التغييرات:

 sudo service nginx reload

في هذه المرحلة ، يكون تطبيقك جاهزًا لتلقي حركة مرور HTTP المخصصة لمجال my-app.dev (بفضل توجيه server_name my-app.dev الذي قمت بتكوينه أعلاه). المشكلة الأخيرة التي تحتاج إلى حلها هي كيفية جعل حركة المرور التي ترسلها من الخارج تتطابق مع اسم المجال هذا. على الرغم من أنه يمكنك شراء اسم مجال وتوجيهه إلى عنوان IP الخاص بك ، فإن ملف hosts ينقذ ويجعل ذلك غير ضروري.

على محطة العمل التي ستصل من خلالها إلى الموقع ، ما عليك سوى إضافة عنوان IP الخارجي لجهاز التوجيه الخاص بك ، ومطابقته مع اسم المضيف my-app.dev . سيتم إرسال أي حركة مرور HTTP تنشئها لـ my-app.dev مباشرة إلى جهاز التوجيه الخاص بك ، مع اسم المضيف الصحيح في رأس HTTP Host .

في نظام Windows ، بامتيازات المسؤول ، يمكنك تحرير الملف الموجود في c:\windows\system32\drivers\etc\hosts باستخدام المفكرة. في نظامي Linux و Mac ، يمكنك استخدام المحطة الطرفية مع sudo nano /etc/hosts و sudo nano /private/etc/hosts على التوالي.

 ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list

ماذا بعد؟

الآن بعد أن تم إعداد كل شيء ، يمكنك نشر العديد من التطبيقات كما تريد على Raspberry Pi الخاص بك ، وتثبيتها إلى الأبد أو pm2 للحفاظ على خوادم Node.js الخاصة بك على قيد الحياة.

وتذكر فقط أنه إذا حدث خطأ ما ، فيمكنك فقط مسح بطاقة SD والبدء مرة أخرى من نقطة الصفر!

خادم تطوير Raspberry Pi قيد التشغيل.

ذات صلة: تحكم في مناخك باستخدام هذا البرنامج التعليمي Raspberry Pi Thermostat