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
تشخیص
composer.jsonیاindex.phpدر ریشه.composer.jsonنسخه
از
require.phpیاconfig.platform.php."php": "^8.3"نصب
وابستگیها بدون بستههای توسعه و با autoloader بهینه نصب میشوند.
composer install --no-devاجرا
nginx درخواستها را به PHP-FPM میدهد.
nginx :80 → php-fpm
خروجی یک استقرار واقعی
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
header("Content-Type: application/json");
echo json_encode(["ok" => true]);
composer update --lock
sakoocloud apps create --name my-php --runtime php --port 80
sakoocloud deploy
تنظیمات
نسخهی 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، Symfony | public/ |
| 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
$pdo = new PDO(
sprintf("pgsql:host=%s;port=%s;dbname=%s", getenv("DATABASE_HOST"), getenv("DATABASE_PORT"), getenv("DATABASE_NAME")),
getenv("DATABASE_USER"),
getenv("DATABASE_PASSWORD"),
);
همراه هر استقرار
اینها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعالاند. بعضی، مثل مقیاسدهی خودکار و کرانجاب، به پلن بستگی دارند.
- دامنهی اختصاصی و SSLدامنه را اضافه کنید؛ گواهی خودکار صادر و تمدید میشود.
- متغیرهای محیطی و سکرتمقادیر رمزگذاریشده فقط در زمان اجرا به اپ میرسند.
- مرحلهی انتشارmigration بعد از بیلد و پیش از جایگزینی نسخهی قبلی اجرا میشود.
- لاگ زندهلاگ بیلد و زمان اجرا، در CLI و کنسول.
- بازگشت به نسخهی قبلهر استقرار قبلی با یک دستور برمیگردد.
- مقیاسدهیمنابع و تعداد نمونهها را تغییر دهید یا خودکارش کنید.
- دیسک ماندگاربرای فایلهایی که باید بعد از هر استقرار بمانند.
- کرانجابدستور زمانبندیشده با همان ایمیج و متغیرها.
- استقرار خودکار با گیتهر push روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
خطای ۵۰۳ یا ۵۰۲
علتPHP-FPM بالا نیامده یا خطای fatal در شروع برنامه رخ داده است.
راهحللاگ زمان اجرا را با sakoocloud apps runtime-logs ببینید.
composer.lock پیدا نشد
علتفایل قفل کامیت نشده و نصب قابل تکرار نیست.
راهحلcomposer update --lock بزنید و composer.lock را کامیت کنید.
اکستنشن PHP پیدا نشد
علتپروژه به اکستنشنی نیاز دارد که در ایمیج پیشفرض نیست.
راهحلاکستنشن را در require با ext- اعلام کنید یا Dockerfile اختصاصی بنویسید.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
WordPress را میشود مستقر کرد؟
بله. فایلها را مستقر کنید، یک دیتابیس MySQL یا MariaDB بسازید و برای wp-content/uploads دیسک ماندگار یا فضای S3 استفاده کنید.
نسخهی PHP را چطور عوض کنم؟
require.php را در composer.json تغییر دهید و دوباره مستقر کنید.
Laravel هم با این رانتایم اجرا میشود؟
برای Laravel رانتایم laravel انتخاب بهتری است؛ migrate و optimize را هم خودش اجرا میکند.
جزئیات بیشتر در راهنمای PHP در مستندات و مرجع CLI.