Вступление: как не утонуть в море вариантов?
Вы написали крутой PHP-сайт. Он работает на локальной машине, радует глаз и не падает. Но вот наступает момент истины — пора показывать проект миру. И тут начинается самое интересное: выбор способа деплоя. VPS? Docker? Облако (Cloud)? А может, всё вместе? Глаза разбегаются, а время поджимает.
На самом деле, каждый из этих путей — как разный инструмент в арсенале разработчика. Лопата, экскаватор и бульдозер — все копают, но с разной скоростью и ценой. В этой статье мы разберем три основных подхода к деплою PHP приложений, дадим рабочие примеры кода и поможем выбрать то, что нужно именно вам. Поехали!
1. Классика жанра: VPS (Virtual Private Server)
VPS для PHP — это как собственная квартира. У вас есть выделенные ресурсы (CPU, RAM, диск), полный root-доступ и полная свобода действий. Вы сами решаете, что ставить: Apache или Nginx, какую версию PHP и какие расширения. Это идеальный вариант для тех, кто хочет контролировать каждую мелочь и не боится командной строки.
Плюсы и минусы VPS
- Плюсы: Полный контроль, предсказуемая цена (фикс в месяц), можно настроить под любые требования.
- Минусы: Вы сами отвечаете за безопасность, обновления и бэкапы. Нужно уметь настраивать сервер.
Как деплоить PHP на VPS (пошагово с кодом)
Предположим, у вас есть сервер на Ubuntu 22.04. Вот минимальный набор команд для запуска типичного PHP-приложения (например, Laravel или Symfony).
# Подключаемся к серверу
ssh root@your-server-ip
# Обновляем пакеты
apt update && apt upgrade -y
# Устанавливаем Nginx, PHP 8.2 и MySQL
apt install nginx php8.2-fpm php8.2-mysql php8.2-cli php8.2-curl php8.2-mbstring php8.2-xml php8.2-zip mysql-server -y
# Настраиваем Nginx для PHP
cat > /etc/nginx/sites-available/your-site << 'EOF'
server {
listen 80;
server_name your-domain.com;
root /var/www/your-site/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}
EOF
# Активируем сайт и перезапускаем Nginx
ln -s /etc/nginx/sites-available/your-site /etc/nginx/sites-enabled/
systemctl restart nginx
# Копируем файлы приложения (через Git или SCP)
cd /var/www
git clone https://github.com/your-repo/your-site.git
cd your-site
composer install --no-dev
php artisan key:generate # для Laravel
Готово! Ваше PHP приложение уже доступно по IP-адресу. Теперь осталось добавить SSL-сертификат (через Certbot) и настроить базу данных.
2. Современный стандарт: Docker
Если VPS — это квартира, то Docker PHP — это контейнер для перевозки вещей. Вы упаковываете всё приложение (код, зависимости, настройки сервера) в один образ и запускаете его где угодно. Никаких проблем с "на моей машине работало" — контейнер гарантирует идентичное окружение.
Почему Docker — это круто для PHP?
- Изоляция: каждое приложение живёт в своём контейнере.
- Воспроизводимость: один раз настроили — используем везде.
- Масштабирование: легко поднять 10 экземпляров приложения.
Пример: Docker-compose для PHP + Nginx + MySQL
Создадим файл docker-compose.yml в корне проекта:
version: '3.8'
services:
app:
image: php:8.2-fpm
container_name: php_app
working_dir: /var/www
volumes:
- ./:/var/www
networks:
- app-network
web:
image: nginx:alpine
container_name: nginx_web
ports:
- "80:80"
volumes:
- ./:/var/www
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- app-network
db:
image: mysql:8.0
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: app_db
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
networks:
- app-network
volumes:
db_data:
networks:
app-network:
driver: bridge
Теперь создадим nginx.conf для обработки PHP-файлов:
server {
listen 80;
index index.php;
server_name localhost;
root /var/www/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Запускаем: docker-compose up -d. Всё! Ваше PHP приложение работает в контейнерах. Для продакшена добавьте SSL через reverse proxy (например, Traefik).
3. Облачная эра: Cloud (PaaS и Serverless)
Облачные технологии — это как отель "всё включено". Вы просто загружаете свой код, а провайдер сам заботится о серверах, масштабировании и безопасности. Самые популярные сервисы для PHP: Heroku, DigitalOcean App Platform, AWS Elastic Beanstalk, Google Cloud Run.
Когда выбирать Cloud?
- Вы не хотите администрировать серверы.
- Нагрузка скачет: то 10 пользователей, то 10 000.
- Нужен быстрый деплой без настройки инфраструктуры.
Пример: Деплой на Heroku (PaaS)
Heroku — один из самых простых способов. Всё, что нужно — Procfile в корне проекта.
# Procfile
web: heroku-php-apache2 public/
Деплой через Git:
heroku create your-app-name
git push heroku main
heroku open
Готово! Если вы используете Laravel, добавьте composer.json с правильными скриптами и настройте базу данных через аддон ClearDB.
Для серверлесс (serverless) подхода (например, Bref для AWS Lambda) код выглядит так:
// index.php
require __DIR__ . '/vendor/autoload.php';
return function ($event) {
return [
'statusCode' => 200,
'body' => json_encode(['message' => 'Hello from PHP on