نشر تطبيق Java على VPS: دليل خطوة بخطوة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

نشر تطبيق Java على VPS: دليل خطوة بخطوة من الألف إلى الياء

\n\n

تطوير تطبيق Java هو نصف المهمة فقط. النصف الثاني، الذي لا يقل أهمية، هو نشره (deploy) على خادم الإنتاج (production). في هذا الدليل، سنمر عبر دورة النشر الكاملة لتطبيق Java (Spring Boot) على خادم افتراضي مخصص (VPS) يعمل بنظام التشغيل Ubuntu 22.04. ستتعلم كيفية إعداد الخادم، بناء المشروع، تشغيله كخدمة نظامية، وتأمين الوصول عبر خادم الويب.

\n\n

1. إعداد VPS وتثبيت البرامج اللازمة

\n\n

الخطوة الأولى هي الاتصال بـ VPS الخاص بك عبر SSH وتثبيت Java Runtime Environment (JRE) و Git.

\n\n

الاتصال بالخادم

\n
ssh root@عنوان-ip-الخادم-الخاص-بك
\n\n

تحديث الحزم وتثبيت Java (OpenJDK 17)

\n

بالنسبة لـ Spring Boot 3.x، يُوصى باستخدام Java 17. سنقوم بتثبيت OpenJDK.

\n
apt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version
\n

يجب أن ترى معلومات حول إصدار Java 17.

\n\n

تثبيت Nginx (لـ reverse proxy)

\n
apt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx
\n\n

2. بناء تطبيق Java (Maven/Gradle)

\n\n

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

\n\n

الخيار أ: البناء محلياً ونسخه إلى الخادم

\n

لنفترض أن لديك مشروع Spring Boot مع Maven.

\n
# على الجهاز المحلي\nmvn clean package -DskipTests\n# سيظهر الملف في target/my-app-0.0.1-SNAPSHOT.jar
\n

ثم انسخه إلى الخادم عبر SCP:

\n
scp target/my-app-0.0.1-SNAPSHOT.jar root@عنوان-ip-الخادم:/opt/myapp/
\n\n

الخيار ب: البناء مباشرة على الخادم

\n

استنسخ المستودع وقم ببناء المشروع:

\n
cd /opt\ngit clone https://github.com/اسم-المستخدم-خاصتك/اسم-المستودع-خاصتك.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# أو، إذا كان Maven مثبتاً بشكل عام:\nmvn clean package -DskipTests
\n\n

3. إعداد تكوين الإنتاج وإنشاء خدمة systemd

\n\n

لضمان تشغيل التطبيق تلقائياً عند بدء تشغيل النظام وإعادة تشغيله في حالة حدوث عطل، سنقوم بإنشاء ملف systemd unit.

\n\n

إنشاء سكريبت التشغيل

\n

أنشئ دليلاً للتطبيق (إذا لم تقم بإنشائه بعد):

\n
mkdir -p /opt/myapp\n# انقل ملف JAR إلى هذا الدليل إذا لم يكن موجوداً بالفعل
\n\n

إنشاء خدمة systemd

\n

أنشئ ملفاً /etc/systemd/system/myapp.service:

\n
nano /etc/systemd/system/myapp.service
\n

ألصق المحتوى التالي (استبدل المسارات والمعلمات بما يتناسب مع مشروعك):

\n
[Unit]\nDescription=تطبيق Java Spring Boot الخاص بي\nAfter=syslog.target network.target\n\n[Service]\nUser=root\nWorkingDirectory=/opt/myapp\nExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/my-app-0.0.1-SNAPSHOT.jar --server.port=8080\nSuccessExitStatus=143\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target
\n

شرح المعلمات:

\n
    \n
  • -Xms256m -Xmx512m — الحجم الأولي والأقصى لذاكرة Java heap.
  • \n
  • --server.port=8080 — المنفذ الذي سيعمل عليه التطبيق.
  • \n
  • Restart=always — إعادة التشغيل التلقائي عند التعطل.
  • \n
\n\n

تشغيل الخدمة والتحقق منها

\n
systemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp  # التشغيل التلقائي عند الإقلاع
\n

تحقق من أن التطبيق يستجيب محلياً:

\n
curl http://localhost:8080/actuator/health
\n

يجب أن تحصل على استجابة JSON بالحالة UP.

\n\n

4. إعداد Reverse Proxy عبر Nginx

\n\n

الوصول المباشر إلى التطبيق عبر المنفذ 8080 غير آمن. سنقوم بإعداد Nginx كخادم وكيل (proxy) يستقبل الطلبات على

المدونات

توصيات الكتب