نشر تطبيق Java على VPS: دليل خطوة بخطوة من الألف إلى الياء
\n\nتطوير تطبيق Java هو نصف المهمة فقط. النصف الثاني، الذي لا يقل أهمية، هو نشره (deploy) على خادم الإنتاج (production). في هذا الدليل، سنمر عبر دورة النشر الكاملة لتطبيق Java (Spring Boot) على خادم افتراضي مخصص (VPS) يعمل بنظام التشغيل Ubuntu 22.04. ستتعلم كيفية إعداد الخادم، بناء المشروع، تشغيله كخدمة نظامية، وتأمين الوصول عبر خادم الويب.
\n\n1. إعداد VPS وتثبيت البرامج اللازمة
\n\nالخطوة الأولى هي الاتصال بـ VPS الخاص بك عبر SSH وتثبيت Java Runtime Environment (JRE) و Git.
\n\nالاتصال بالخادم
\nssh root@عنوان-ip-الخادم-الخاص-بك\n\nتحديث الحزم وتثبيت Java (OpenJDK 17)
\nبالنسبة لـ Spring Boot 3.x، يُوصى باستخدام Java 17. سنقوم بتثبيت OpenJDK.
\napt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version\nيجب أن ترى معلومات حول إصدار Java 17.
\n\nتثبيت Nginx (لـ reverse proxy)
\napt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx\n\n2. بناء تطبيق 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:
\nscp target/my-app-0.0.1-SNAPSHOT.jar root@عنوان-ip-الخادم:/opt/myapp/\n\nالخيار ب: البناء مباشرة على الخادم
\nاستنسخ المستودع وقم ببناء المشروع:
\ncd /opt\ngit clone https://github.com/اسم-المستخدم-خاصتك/اسم-المستودع-خاصتك.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# أو، إذا كان Maven مثبتاً بشكل عام:\nmvn clean package -DskipTests\n\n3. إعداد تكوين الإنتاج وإنشاء خدمة systemd
\n\nلضمان تشغيل التطبيق تلقائياً عند بدء تشغيل النظام وإعادة تشغيله في حالة حدوث عطل، سنقوم بإنشاء ملف systemd unit.
\n\nإنشاء سكريبت التشغيل
\nأنشئ دليلاً للتطبيق (إذا لم تقم بإنشائه بعد):
\nmkdir -p /opt/myapp\n# انقل ملف JAR إلى هذا الدليل إذا لم يكن موجوداً بالفعل\n\nإنشاء خدمة systemd
\nأنشئ ملفاً /etc/systemd/system/myapp.service:
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
تشغيل الخدمة والتحقق منها
\nsystemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp # التشغيل التلقائي عند الإقلاع\nتحقق من أن التطبيق يستجيب محلياً:
\ncurl http://localhost:8080/actuator/health\nيجب أن تحصل على استجابة JSON بالحالة UP.
4. إعداد Reverse Proxy عبر Nginx
\n\nالوصول المباشر إلى التطبيق عبر المنفذ 8080 غير آمن. سنقوم بإعداد Nginx كخادم وكيل (proxy) يستقبل الطلبات على