نشر تطبيق Swift على VPS: دليل خطوة بخطوة للمتقدمين
\nلقد قمت بإنشاء تطبيق خادم رائع باستخدام Swift مع إطار عمل Vapor. الآن تحتاج إلى تشغيله في بيئة الإنتاج. يتطلب نشر تطبيق Swift على VPS فهم خصوصية عمل Swift على Linux، وإعداد بيئة الخادم، واستخدام الأدوات الصحيحة لضمان الاستقرار والأداء. في هذا الدليل المتقدم، سنشرح الدورة الكاملة: بدءًا من التجميع لنظام Linux وصولاً إلى إعداد CI/CD، والعمل مع Docker و Supervisor.
\n\n1. إعداد الخادم وتجميع Swift لنظام Linux
\nأول شيء يجب فهمه: Swift على macOS و Linux هما بيئتان مختلفتان. للنشر على VPS (Ubuntu 22.04 LTS) يلزم إما التجميع المتقاطع أو البناء مباشرة على الخادم. يُوصى بالبناء على الخادم لتجنب مشاكل المكتبات.
\n\n1.1 تثبيت Swift على Ubuntu
\nنتصل بالخادم عبر SSH ونقوم بتثبيت التبعيات اللازمة:
\nsudo apt update\nsudo apt install -y curl git clang libicu-dev libcurl4-openssl-dev libssl-dev \\\n libsqlite3-dev libxml2-dev pkg-config uuid-dev\n\n# تحميل أحدث إصدار من Swift Toolchain\nwget https://download.swift.org/swift-5.9.2-release/ubuntu2204/swift-5.9.2-RELEASE/swift-5.9.2-RELEASE-ubuntu22.04.tar.gz\ntar -xzf swift-5.9.2-RELEASE-ubuntu22.04.tar.gz\nsudo mv swift-5.9.2-RELEASE-ubuntu22.04 /usr/share/swift\n\n# إضافة إلى PATH\necho 'export PATH=/usr/share/swift/usr/bin:$PATH' >> ~/.bashrc\nsource ~/.bashrc\nswift --version\n\n1.2 استنساخ وبناء المشروع
\nنقوم باستنساخ المستودع وبناء نسخة الإصدار من التطبيق:
\ngit clone https://github.com/your-username/your-swift-app.git\ncd your-swift-app\nswift build --configuration release\nبعد البناء الناجح، سيكون الملف الثنائي في .build/release/YourApp. تحقق من تشغيله يدويًا:
./.build/release/YourApp serve --hostname 0.0.0.0 --port 8080\n\n2. إعداد بيئة الإنتاج: Nginx و Supervisor
\nتشغيل تطبيق Swift مباشرة على المنفذ 80 هو ممارسة سيئة. نستخدم مجموعة Nginx (وكيل عكسي) + Supervisor (مدير العمليات).
\n\n2.1 تكوين Nginx
\nنقوم بتثبيت Nginx وإنشاء تكوين لتوجيه الطلبات إلى تطبيق Swift الخاص بنا:
\nsudo apt install nginx\nsudo nano /etc/nginx/sites-available/yourapp\nمحتوى الملف:
\nserver {\n listen 80;\n server_name yourdomain.com www.yourdomain.com;\n\n location / {\n proxy_pass http://127.0.0.1:8080;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection 'upgrade';\n proxy_set_header Host $host;\n proxy_cache_bypass $http_upgrade;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n\n # إعداد الملفات الكبيرة (إذا لزم الأمر)\n client_max_body_size 50m;\n}\nنقوم بتفعيل التكوين والتحقق منه:
\nsudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/\nsudo nginx -t\nsudo systemctl restart nginx\n\n2.2 إعداد Supervisor لإعادة التشغيل التلقائي
\nسيراقب Supervisor العملية ويعيد تشغيلها في حالة تعطلها. نقوم بتثبيته وإنشاء التكوين:
\nsudo apt install supervisor\nsudo nano /etc/supervisor/conf.d/yourapp.conf\nمحتوى التكوين:
\n[program:yourapp]\ncommand=/home/ubuntu/your-swift-app/.build/release/YourApp serve --hostname 0.0.0.0 --port 8080\ndirectory=/home/ubuntu/your-swift-app\nuser=ubuntu\nautostart=true\nautorestart=true\nstartretries=3\nstderr_logfile=/var/log/yourapp.err.log\nstdout_logfile=/var/log/yourapp.out.log\nenvironment=ENVIRONMENT="producti