لماذا تستضيف Spring Boot على VPS؟
المنصات المُدارة لـ Java تُفوتر على RAM المحجوزة وتفرض إصدار JDK المخصص، مما يُعقّد ضبط JVM وإدارة اتصالات PostgreSQL. على VPS، تتحكم في المكدس الكامل: OpenJDK 21 LTS مع Virtual Threads، وMaven للبناء، وNginx في المقدمة، وPostgreSQL 16 للبيانات.
فوائد Spring Boot المستضاف ذاتيًا
- تحكم كامل في PostgreSQL: فهارس وVACUUM وpool الاتصالات ونسخ pg_dump احتياطية مجدولة.
- Virtual Threads (OpenJDK 21 Loom) مع Spring WebMVC: مئات الطلبات المتزامنة دون إعادة كتابة تفاعلية.
- تكلفة ثابتة وقابلة للتنبؤ بغض النظر عن حجم الطلبات.
- البيانات والسجلات تحت ولايتك القضائية، مفيد للامتثال والتدقيق.
- حرية إصدار JDK والاعتماديات دون قيود buildpack.
- نشر قابل للتكرار: fat JAR واحد، وأمر
java -jarواحد.
المتطلبات
لتطبيق Spring Boot مع PostgreSQL، خطط لـ 2 vCPU و2 غيغابايت RAM كحد أدنى؛ استهدف 4 غيغابايت لخدمات متعددة. Ubuntu 24.04 LTS هو OS الموصى به — OpenJDK 21 في المستودعات الرسمية، لا PPA مطلوب. اسم النطاق اختياري: بدونه، نفق SSH للمنفذ 8080 يكفي للتطوير والاختبار.
نشر Spring Boot خطوة بخطوة
تثبيت OpenJDK 21 وPostgreSQL
اتصل بـ SSH ونفّذ apt-get install -y maven nginx postgresql postgresql-contrib. Maven يسحب OpenJDK 21 LTS تلقائيًا. تحقق: java -version (21.x)، mvn -version، وpsql --version (16.x).
إنشاء قاعدة البيانات والمستخدم
اتصل بـ sudo -u postgres psql ونفّذ CREATE USER myapp WITH PASSWORD 'كلمة_مرور_قوية'; CREATE DATABASE myappdb OWNER myapp;. عيّن spring.datasource.url=jdbc:postgresql://localhost/myappdb في application.properties.
بناء ورفع الـ JAR
نفّذ mvn clean package -DskipTests محليًا، ثم انقل fat JAR إلى /var/www/مشروعك/app.jar عبر scp. أنشئ application.properties مع بيانات PostgreSQL وserver.port=8080.
إنشاء خدمة systemd
أنشئ /etc/systemd/system/مشروعك.service مع ExecStart=/usr/bin/java -jar /var/www/مشروعك/app.jar، Restart=always، User=www-data. نفّذ systemctl daemon-reload && systemctl enable --now مشروعك.
إعداد Nginx وتفعيل HTTPS
أنشئ كتلة خادم Nginx مع proxy_pass http://127.0.0.1:8080;. نفّذ certbot --nginx -d نطاقك.com للحصول على شهادة Let's Encrypt. Spring Boot يستمع داخليًا فقط؛ Nginx يتعامل مع TLS.
استخدم Virtual Threads من Java 21 مع Spring MVC لمضاعفة الإنتاجية دون التحول إلى WebFlux: أضف spring.threads.virtual.enabled=true في application.properties. كل طلب HTTP يُنفَّذ في thread افتراضي خفيف.
نشر Spring Boot بنقرة واحدة من Marketplace ServOrbit
Marketplace ServOrbit يوفر قالب Spring Boot Stack مُهيَّأ مسبقًا: OpenJDK 21 LTS وMaven وNginx وPostgreSQL 16 تُثبَّت تلقائيًا على VPS عند الطلب. لا جلسة SSH للإعداد الأساسي — تصل مباشرةً لرفع JAR.