رانتایم PHP

هاست PHP 8 با Composer

پروژه‌ی PHP با composer.json شناخته می‌شود و پشت nginx و PHP-FPM اجرا می‌شود. نسخه‌ی PHP از همان require.php در composer.json خوانده می‌شود.

تشخیص
composer.json یا index.php
نسخه‌ها
PHP 8.1 تا 8.4 (پیش‌فرض 8.3)
اجرا
nginx و PHP-FPM
پورت
80
لوگوی PHP

PHP مدرن بدون مدیریت سرور

سکو کلود نسخه‌ی PHP را از require.php در composer.json می‌خواند، وابستگی‌ها را با composer install --no-dev و از میرور داخلی Packagist نصب می‌کند و برنامه را پشت nginx با PHP-FPM اجرا می‌کند.

اکستنشن‌های رایج مثل pdo_pgsql، pdo_mysql، mbstring، gd، curl و intl از قبل نصب‌اند. برای Symfony و Laravel ریشه‌ی وب پوشه‌ی public است؛ برای پروژه‌ی PHP ساده یا WordPress، ریشه‌ی پروژه.

مناسب برای

  • API و سایت با Symfony یا Slim
  • پروژه‌ی PHP بدون فریم‌ورک
  • WordPress با دیتابیس MySQL مدیریت‌شده
  • سرویس‌های قدیمی PHP که باید به PHP 8 برسند

مسیر بیلد PHP

  1. تشخیص

    composer.json یا index.php در ریشه.

    composer.json
  2. نسخه

    از require.php یا config.platform.php.

    "php": "^8.3"
  3. نصب

    وابستگی‌ها بدون بسته‌های توسعه و با autoloader بهینه نصب می‌شوند.

    composer install --no-dev
  4. اجرا

    nginx درخواست‌ها را به PHP-FPM می‌دهد.

    nginx :80 → php-fpm

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 3.5MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [build 1/5] FROM php:8.3-fpm-alpine
#6 [build 3/5] RUN composer install --no-dev --optimize-autoloader
#8 [build 4/5] COPY . /var/www/html
#10 exporting to image
✔ Deployed — app is running.
→ https://my-php.sakooapps.ir

کمترین چیزی که لازم دارید

نسخه‌ی PHP را در composer.json اعلام کنید و composer.lock را کامیت کنید.

{
  "require": {
    "php": "^8.3",
    "ext-pdo": "*"
  }
}

تنظیمات

نسخه‌ی PHP

PHP 8.1 تا 8.4 در دسترس است و بدون اعلام نسخه، 8.3 استفاده می‌شود.

از کجا خوانده می‌شودنمونه
require.php در composer.json"php": "^8.3"
config.platform.php"php": "8.3"
فلگ --runtime-version--runtime-version 8.4

ریشه‌ی وب

پروژهپوشه
Laravel، Symfonypublic/
PHP ساده، WordPressریشه‌ی پروژه

اکستنشن‌های آماده

دستهاکستنشن‌ها
دیتابیسpdo، pdo_pgsql، pdo_mysql
متن و دادهmbstring، json، xml، intl
شبکه و تصویرcurl، openssl، gd

اتصال به دیتابیس

متغیرهای دیتابیس لینک‌شده با getenv خوانده می‌شوند.

sakoocloud apps link-db <db-id> --app my-php

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

خطای ۵۰۳ یا ۵۰۲

علتPHP-FPM بالا نیامده یا خطای fatal در شروع برنامه رخ داده است.

راه‌حللاگ زمان اجرا را با sakoocloud apps runtime-logs ببینید.

composer.lock پیدا نشد

علتفایل قفل کامیت نشده و نصب قابل تکرار نیست.

راه‌حلcomposer update --lock بزنید و composer.lock را کامیت کنید.

اکستنشن PHP پیدا نشد

علتپروژه به اکستنشنی نیاز دارد که در ایمیج پیش‌فرض نیست.

راه‌حلاکستنشن را در require با ext- اعلام کنید یا Dockerfile اختصاصی بنویسید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

WordPress را می‌شود مستقر کرد؟

بله. فایل‌ها را مستقر کنید، یک دیتابیس MySQL یا MariaDB بسازید و برای wp-content/uploads دیسک ماندگار یا فضای S3 استفاده کنید.

نسخه‌ی PHP را چطور عوض کنم؟

require.php را در composer.json تغییر دهید و دوباره مستقر کنید.

Laravel هم با این رانتایم اجرا می‌شود؟

برای Laravel رانتایم laravel انتخاب بهتری است؛ migrate و optimize را هم خودش اجرا می‌کند.

جزئیات بیشتر در راهنمای PHP در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید