نشر تطبيق Kotlin على VPS: دليل خطوة بخطوة للمتقدمين
\n\nالتطوير بلغة Kotlin هو نصف المهمة فقط. تظهر البراعة الحقيقية عندما يبدأ تطبيقك في العمل في بيئة الإنتاج على خادم VPS خاص بك. في هذه المقالة، سنستعرض التقنيات المتقدمة لنشر تطبيقات Kotlin: من بناء fat JAR إلى إعداد التشغيل المستمر مع systemd، والوكيل العكسي عبر Nginx، والأتمتة عبر CI/CD. المادة موجهة للمطورين الذين هم على دراية بأساسيات Kotlin ويريدون الوصول إلى المستوى الاحترافي.
\n\n1. تحضير بناء الإنتاج لتطبيق Kotlin
\n\nالخطوة الأولى هي إنشاء بناء مُحسّن. نستخدم إضافة shadow لـ Gradle، والتي ستُغلف جميع التبعيات في ملف JAR واحد قابل للتنفيذ (fat JAR).
أضف في build.gradle.kts:
plugins {\n kotlin("jvm") version "1.9.22"\n id("com.github.johnrengelman.shadow") version "8.1.1"\n application\n}\n\napplication {\n mainClass.set("com.example.MainKt")\n}\n\ntasks.shadowJar {\n archiveBaseName.set("app")\n archiveClassifier.set("")\n archiveVersion.set("")\n minimize()\n}\n\nقم ببناء JAR باستخدام الأمر:
\n\n./gradlew shadowJar\n\nستحصل على ملف build/libs/app.jar. للإنتاج، يُنصح بتعطيل سجلات التصحيح وضبط مستوى التسجيل عبر متغيرات البيئة.
مثال على تكوين logback.xml للإنتاج:
<configuration>\n <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">\n <file>/var/log/app/app.log</file>\n <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">\n <fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern>\n <maxHistory>30</maxHistory>\n </rollingPolicy>\n <encoder>\n <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>\n </encoder>\n </appender>\n\n <root level="INFO">\n <appender-ref ref="FILE"/>\n </root>\n</configuration>\n\n2. إنشاء خدمة systemd للتشغيل التلقائي
\n\nلضمان تشغيل التطبيق تلقائياً عند بدء تشغيل النظام وإعادة تشغيله عند حدوث أعطال، نستخدم systemd. أنشئ ملف /etc/systemd/system/kotlin-app.service:
[Unit]\nDescription=Kotlin Application Service\nAfter=network.target\n\n[Service]\nType=simple\nUser=appuser\nGroup=appuser\nWorkingDirectory=/opt/kotlin-app\nExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/kotlin-app/app.jar\nRestart=on-failure\nRestartSec=10\nStandardOutput=journal\nStandardError=journal\nEnvironment="APP_ENV=production"\nEnvironment="DB_URL=jdbc:postgresql://localhost:5432/mydb"\n\n[Install]\nWantedBy=multi-user.target\n\nبعد إنشاء الملف، نفذ:
\n\nsudo systemctl daemon-reload\nsudo systemctl enable kotlin-app\nsudo systemctl start kotlin-app\n\nتحقق من الحالة:
\n\nsudo systemctl status kotlin-app\n\nيمكنك مشاهدة السجلات عبر journalctl -u kotlin-app -f.
3. إعداد Nginx كوكيل عكسي مع SSL
\n\nسيوفر Nginx موازنة التحميل والتخزين المؤقت و HTTPS. قم بتثبيت Nginx و Certbot:
\n\nsudo apt update\nsudo apt install nginx certbot python3-certbot-nginx\n\nأنشئ تكوين /etc/nginx/sites-available/kotlin-app:
server {\n listen 80;\n server_name yourdomain.com;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name yourdomain.com;\n\n ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;\n ssl_certificate_key /etc/letse