مقدمة: لماذا VPS هو الخيار المثالي لتطبيقات Java
نشر تطبيق Java على خادم خاص افتراضي (VPS) هو المعيار الذهبي للمطورين الذين يرغبون في الحصول على تحكم كامل في بيئة التشغيل. على عكس الاستضافة المشتركة (shared-hosting)، يوفر VPS موارد مخصصة (CPU، RAM، قرص)، ويسمح بتخصيص Java Virtual Machine (JVM)، وتثبيت أي مكتبات، وتكوين الخادم وفقًا لاحتياجات المشروع المحددة.
في هذه المقالة، سنستعرض دورة النشر الكاملة: من إعداد VPS وتثبيت JDK إلى تشغيل التطبيق في وضع الإنتاج (production) باستخدام systemd. جميع الخطوات مصحوبة بأمثلة برمجية وأوامر لنظام Linux (Ubuntu 22.04 LTS).
1. إعداد VPS وتثبيت البرامج الضرورية
1.1. الاتصال بالخادم
بعد شراء VPS، ستحصل على عنوان IP وكلمة مرور الجذر (root). اتصل عبر SSH:
ssh root@عنوان_IP_الخادم_الخاص_بك
يُوصى بإنشاء مستخدم غير مميز (unprivileged user) فورًا للعمل اليومي:
adduser deployer
usermod -aG sudo deployer
1.2. تثبيت Java (JDK 17 LTS)
لتطبيقات Java الحديثة، يعتبر OpenJDK 17 هو الأنسب. نفّذ:
sudo apt update
sudo apt install openjdk-17-jdk -y
تحقق من التثبيت:
java -version
# الإخراج: openjdk version "17.0.10" 2024-01-16 LTS
1.3. تثبيت Git و Maven/Gradle
لبناء المشروع من المستودع:
sudo apt install git maven -y
# أو لـ Gradle:
# sudo apt install gradle -y
2. بناء وإعداد التطبيق
2.1. استنساخ المستودع
لنفترض أن تطبيق Spring Boot الخاص بك موجود على GitHub:
cd /opt
sudo git clone https://github.com/حسابك/my-java-app.git
cd my-java-app
2.2. بناء ملف JAR
لـ Maven:
mvn clean package -DskipTests
نتيجة لذلك، سيظهر ملف my-app-0.0.1-SNAPSHOT.jar في المجلد target/. تأكد من أنه يعمل:
java -jar target/my-app-0.0.1-SNAPSHOT.jar --server.port=8080
تحقق من العمل: افتح في المتصفح http://عنوان_IP_الخادم:8080.
2.3. تحسين JAR للإنتاج
أضف إلى ملف application.properties معلمات الإنتاج:
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=app_user
spring.datasource.password=secure_password
spring.jpa.hibernate.ddl-auto=validate
لا تقم أبدًا بتخزين كلمات المرور الحقيقية في الكود — استخدم متغيرات البيئة أو Vault.
3. إعداد قاعدة البيانات والبيئة
3.1. تثبيت PostgreSQL
sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql
أنشئ قاعدة بيانات ومستخدمًا:
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER app_user WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE mydb TO app_user;
\q
3.2. إعداد متغيرات البيئة
أنشئ ملفًا /etc/environment.d/java-app.conf:
DB_URL=jdbc:postgresql://localhost:5432/mydb
DB_USER=app_user
DB_PASSWORD=secure_password
JAVA_OPTS="-Xms256m -Xmx512m"
أعد تحميل البيئة:
source /etc/environment.d/java-app.conf
4. تشغيل التطبيق كخدمة systemd
4.1. إنشاء ملف الوحدة (unit file)
أنشئ ملفًا /etc/systemd/system/java-app.service:
[Unit]
Description=Java Spring Boot Application
After=network.target postgresql.service
[Service]
User=deployer
WorkingDirectory=/opt/my-java-app
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/my-java-app/target/my-app-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
Rest