Деплой PHP приложений: VPS, Docker, Cloud — выбираем идеальный путь

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Вступление: как не утонуть в море вариантов?

Вы написали крутой 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                

Блоги

Рекомендаций по книгам