نشر تطبيق Kotlin على VPS: المستوى المتقدم

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

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

ابدأ الدورة

نشر تطبيق Kotlin على VPS: دليل خطوة بخطوة للمتقدمين

\n\n

التطوير بلغة Kotlin هو نصف المهمة فقط. تظهر البراعة الحقيقية عندما يبدأ تطبيقك في العمل في بيئة الإنتاج على خادم VPS خاص بك. في هذه المقالة، سنستعرض التقنيات المتقدمة لنشر تطبيقات Kotlin: من بناء fat JAR إلى إعداد التشغيل المستمر مع systemd، والوكيل العكسي عبر Nginx، والأتمتة عبر CI/CD. المادة موجهة للمطورين الذين هم على دراية بأساسيات Kotlin ويريدون الوصول إلى المستوى الاحترافي.

\n\n

1. تحضير بناء الإنتاج لتطبيق Kotlin

\n\n

الخطوة الأولى هي إنشاء بناء مُحسّن. نستخدم إضافة shadow لـ Gradle، والتي ستُغلف جميع التبعيات في ملف JAR واحد قابل للتنفيذ (fat JAR).

\n\n

أضف في build.gradle.kts:

\n\n
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. للإنتاج، يُنصح بتعطيل سجلات التصحيح وضبط مستوى التسجيل عبر متغيرات البيئة.

\n\n

مثال على تكوين logback.xml للإنتاج:

\n\n
<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\n

2. إنشاء خدمة systemd للتشغيل التلقائي

\n\n

لضمان تشغيل التطبيق تلقائياً عند بدء تشغيل النظام وإعادة تشغيله عند حدوث أعطال، نستخدم systemd. أنشئ ملف /etc/systemd/system/kotlin-app.service:

\n\n
[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\n
sudo systemctl daemon-reload\nsudo systemctl enable kotlin-app\nsudo systemctl start kotlin-app
\n\n

تحقق من الحالة:

\n\n
sudo systemctl status kotlin-app
\n\n

يمكنك مشاهدة السجلات عبر journalctl -u kotlin-app -f.

\n\n

3. إعداد Nginx كوكيل عكسي مع SSL

\n\n

سيوفر Nginx موازنة التحميل والتخزين المؤقت و HTTPS. قم بتثبيت Nginx و Certbot:

\n\n
sudo apt update\nsudo apt install nginx certbot python3-certbot-nginx
\n\n

أنشئ تكوين /etc/nginx/sites-available/kotlin-app:

\n\n
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                

المدونات

توصيات الكتب