انشر موقع PHP وMySQL على استضافة سحابية، خطوة بخطوة
شغّل تطبيق PHP الكلاسيكي بأسلوب اليوم: ضعه في حزمة Docker، واربطه بقاعدة PostgreSQL مُدارة، أو شغّل MySQL بنفسك كتطبيق إن طلبه كودك. نطاق خاص، وشهادة TLS، ونسخ احتياطي. ابدأ مجاناً برصيد تجريبي بقيمة ٥ دولارات.
يعتمد جزء كبير من الويب على PHP وMySQL، من ووردبريس ولارافيل إلى لوحات تحكم مخصّصة لا تُعدّ. في هذا الدليل نأخذ تطبيق PHP من جهازك إلى رابط مباشر على استضافة سحابية مُدارة، ونربطه بقاعدة بيانات. أمام قاعدة البيانات خياران، كلاهما صادق، وسنمشي معك فيهما لتختار الأنسب لتطبيقك.
خياراك في قاعدة البيانات، بصراحة
- المسار المُدار هو PostgreSQL. المنصّة تشغّلها، وتخزّن بياناتها، وتتولّى نسخها الاحتياطي، وتتحدّث إليها PHP عبر مشغّل
pdo_pgsqlالقياسي. إن كان كودك يستخدم PDO أو إطار عمل مثل لارافيل، فالانتقال من MySQL إلى PostgreSQL في الغالب تعديل في الإعدادات لا إعادة كتابة. وهذا هو المسار الذي ننصح به لمعظم التطبيقات. - إن كان تطبيقك يحتاج MySQL تحديداً، فأوضح خيار أن تشغّل MySQL بنفسك كتطبيق داخل حزمة Docker مع وحدة تخزين دائمة. أنت من يشغّلها ويأخذ نسخها الاحتياطي، ويتّصل بها تطبيق PHP عبر الشبكة الخاصة للمشروع.
سنعرض الطريقتين. ابدأ بحزمة PHP، فهي ذاتها في الحالتين.
الخطوة ١: ملف Dockerfile للإنتاج مع PHP
يعمل تطبيقك كحزمة Docker تستمع على المنفذ 8080 (حيث توجّه المنصّة الطلبات) وتعمل بمستخدم غير root. نبنيها فوق حزمة PHP + Apache الرسمية، ونثبّت فيها مشغّلي القاعدتين معاً، فتعمل ذات الحزمة مع PostgreSQL أو MySQL:
FROM php:8.3-apache
# مشغّلا PDO لـ PostgreSQL وMySQL حتى يتحدّث التطبيق إلى أيّ من القاعدتين
RUN apt-get update \
&& apt-get install -y --no-install-recommends libpq-dev \
&& docker-php-ext-install pdo pdo_pgsql pdo_mysql \
&& rm -rf /var/lib/apt/lists/*
# يستمع Apache على المنفذ 8080 (الذي توجّه إليه المنصّة) بدل 80
RUN sed -i 's/80/8080/g' /etc/apache2/ports.conf /etc/apache2/sites-available/000-default.conf
COPY --chown=www-data:www-data ./src /var/www/html
USER www-data
EXPOSE 8080ابنِ الحزمة وشغّلها على جهازك أولاً لتتأكّد أنّها تخدم تطبيقك:
docker build -t my-php-app .
docker run --rm -p 8080:8080 my-php-app
# افتح http://localhost:8080الخطوة ٢: انشر عبر Cloud Studio
افتح Cloud Studio، واختر تطبيقاً، وامنحه اسماً، واجعل وصوله عاماً. سيعمل تطبيقك على نطاق فرعي *.alawadi.cloud بشهادة TLS جاهزة. ولترفع حزمتك الخاصة وتحصل على نشر تلقائي، أنشئ مستودعاً خاصاً واربط مستودع Git عبر GitHub OIDC، تماماً كما في درس النشر خلال 5 دقائق. بعدها يُبنى كلّ رفع إلى main ويُنشر تلقائياً.
الخطوة ٣، الخيار أ: أضف قاعدة PostgreSQL مُدارة
من تبويب قواعد البيانات اختر قاعدة بيانات جديدة، ثم حدّد Postgres واسمها ومواردها. تُنشأ القاعدة داخل بيئة مشروعك المعزولة خلال ثوانٍ. وفي صفحة القاعدة، يحقن إجراء الربط بالتطبيق بيانات الاتصال في تطبيقك كمتغيّر بيئة اسمه DATABASE_URL، فلا تضطرّ إلى لصق كلمة مرور في أيّ مكان.
اقرأها في PHP عبر PDO:
<?php
// تحقن المنصّة DATABASE_URL عند ربط القاعدة بالتطبيق
$url = parse_url(getenv('DATABASE_URL'));
$dsn = sprintf(
'pgsql:host=%s;port=%d;dbname=%s',
$url['host'],
$url['port'] ?? 5432,
ltrim($url['path'], '/')
);
$pdo = new PDO($dsn, $url['user'], $url['pass'], [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$version = $pdo->query('SELECT version()')->fetchColumn();
echo "Connected to: " . $version;تتكفّل المنصّة بتشغيل هذه القاعدة وتخزينها ونسخها الاحتياطي. التفاصيل في مستندات قواعد البيانات المُدارة.
الخطوة ٣، الخيار ب: شغّل MySQL كتطبيق خاص بك
إن كان تطبيقك لا غنى له عن MySQL، فانشر حزمة mysql:8 الرسمية كتطبيق Application ثانٍ في المشروع نفسه. امنحه اسماً مثل db، وأرفق به وحدة تخزين دائمة تحفظ بياناته بعد كلّ إعادة تشغيل أو إعادة نشر. اضبط بيانات الاعتماد كمتغيّرات بيئة على حزمة MySQL (كلمة مرور root والقاعدة الأولية)، وضع القيم ذاتها على تطبيق PHP ليتّصل بها.
التطبيقات داخل المشروع الواحد تتواصل عبر شبكة خاصة، فيصل تطبيق PHP إلى حزمة MySQL بالاسم الذي أعطيته لها:
<?php
$pdo = new PDO(
'mysql:host=' . getenv('DB_HOST') . ';dbname=' . getenv('DB_NAME'),
getenv('DB_USER'),
getenv('DB_PASS'),
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);وبما أنّك تشغّل هذه القاعدة بنفسك، فنسخها الاحتياطي مسؤوليتك أنت: جدوِل mysqldump وارفع الناتج إلى التخزين السحابي، على خطى درس النسخ الاحتياطي الليلي.
الخطوة ٤: نطاقك الخاص
النطاق الفرعي *.alawadi.cloud ممتاز للتجربة، لكنّ موقعك يستحقّ عنواناً خاصاً به. من صفحة التطبيق، أضف نطاقك المخصّص ووجّه سجلّ DNS الذي تعرضه عليك البوابة، وتُدار شهادة TLS تلقائياً.
الخطوة ٥: نسخ احتياطي تثق به
طبقتان تحميان بياناتك:
- المنصّة تأخذ نسخاً احتياطية يومية مشفّرة من وحدات التخزين الدائمة، وتحفظها خارج الخادم مدة ١٤ يوماً، إضافةً إلى نسخ أسبوعية كاملة تبقى ٨ أسابيع.
- أنت تحتفظ بنسختك في مساحة تخزين متوافقة مع S3 بسعر $0.04 لكل GB شهرياً ونقل بيانات مجاني. وتبقى القاعدة الذهبية: النسخة التي لم تجرّب استعادتها ليست نسخة احتياطية.
كم يكلّف، وكيف تبدأ
تُخصم رسوم الاستخدام من سجلّ رصيد بالدولار، وتظهر كلّ خدمة كبند واضح مع عرض اختياري بالدولار أو الليرة أو الدرهم أو الدينار الأردني. قدّر إعداد PHP وMySQL عبر حاسبة الأسعار، ثم سجّل بحساب Google وفعّل رصيداً تجريبياً بقيمة 5 دولارات من دون بطاقة. القسائم مسبقة الدفع المسعّرة بالليرة السورية هي وسيلة التعبئة الوحيدة المتاحة؛ ولا تتوفر تعبئة بالبطاقات أو العملات الرقمية حالياً.
أسئلة شائعة
هل أستطيع نقل تطبيق MySQL إلى PostgreSQL بسهولة؟
غالباً نعم. إن كان كودك يعتمد على PDO أو على مُنشئ الاستعلامات في إطار عمل، فالتغيير في معظمه إعدادات وبعض الفروق في SQL. أمّا التطبيقات المليئة باستعلامات SQL خاصّة بـ MySQL فتحتاج جهداً أكبر، وهنا يصبح تشغيل MySQL كتطبيق خاصّ بك هو الخيار الصادق.
أين أخزّن الأسرار مثل كلمة مرور القاعدة؟
اضبطها كمتغيّرات بيئة على الخدمة من داخل البوابة، لا مدمجةً داخل الحزمة. أمّا القاعدة المُدارة، فتُحقن بيانات الاتصال بها نيابةً عنك عند الربط.
هل يعمل هذا مع ووردبريس أو لارافيل؟
لارافيل يدعم PostgreSQL جاهزاً، فيناسبه المسار المُدار. أمّا مواقع ووردبريس فتتوقّع MySQL، لذا شغّل MySQL كتطبيق خاصّ بك كما في الخيار ب. لديك سؤال آخر؟ افتح تذكرة دعم في البوابة أو راسل [email protected].
الشركة المطوّرة لمنصّة alawadi.cloud
شركة تبني منصّة سحابية عربية الهوية، من الخوادم الفعلية وصولاً إلى تجربة المطوّرين.