Урок 40: Деплой PHP-приложения

Сегодня мы завершим наш курс по PHP важнейшим этапом, это деплоем вашего приложения в интернет. Вы научитесь готовить проект к продакшену, выбирать хостинг, настраивать сервер и автоматизировать процессы. Время превратить ваш код в реальный продукт.

Подготовка приложения к деплою

Перед тем как выкладывать проект в сеть, его нужно оптимизировать и обезопасить. Вот ключевые шаги:

1. Настройка окружения

Убедитесь, что приложение работает в продакшен-режиме. В PHP это можно сделать через файл .env:

// .env
APP_ENV=production
APP_DEBUG=false

Практическая задача:
Создайте файл .env и добавьте переменные окружения для вашего проекта.

2. Управление зависимостями

Используйте Composer для установки пакетов. Удалите ненужные зависимости из composer.json и выполните:

bash
composer install --no-dev --optimize-autoloader

Флаг --no-dev исключает пакеты для разработки (например, тесты).

3. Работа с базой данных

  • Экспортируйте локальную БД в дамп:
    bash
    mysqldump -u root -p my_database > database.sql
  • Убедитесь, что конфигурация подключения к БД в коде использует переменные окружения, а не хардкод:
    php
    $db_host = getenv('DB_HOST');
    $db_name = getenv('DB_NAME');
    $db_user = getenv('DB_USER');
    $db_password = getenv('DB_PASSWORD');

Создайте скрипт переноса БД на чистом SQL или используйте инструменты вроде Phinx.

4. Безопасность

  • Удалите файлы вроде phpinfo.php или test.php.
  • Настройте права доступа к папкам:
    bash
    chmod 755 public/
    chmod 644 config.php
  • Сгенерируйте уникальный ключ для шифрования сессий:
    php
    // Используйте password_hash()
    $secret_key = bin2hex(random_bytes(32));

5. Оптимизация

  • Включите кэширование OPcache в php.ini:
    ini
    opcache.enable=1
    opcache.memory_consumption=128
  • Минифицируйте CSS/JS файлы с помощью инструментов вроде Webpack или Gulp.

Размещение на хостинге

Теперь выберем, куда загружать проект. Рассмотрим три варианта:

1. Shared-хостинг

Подходит для небольших проектов.
Пример загрузки через FTP (FileZilla):

  1. Скачайте и установите FileZilla.
  2. Введите данные хоста: ftp.yourhosting.com, логин и пароль.
  3. Перетащите файлы в папку public_html.

Важно: Убедитесь, что версия PHP на хостинге совпадает с вашей локальной. Это можно проверить через панель управления (например, cPanel).

2. VPS/VDS

Для сложных проектов арендуйте виртуальный сервер (например, на Бегет или TimeWeb).

Настройка сервера:

  1. Установите LAMP-стек:
    bash
    sudo apt update
    sudo apt install apache2 mysql-server php libapache2-mod-php
  2. Настройте виртуальный хост в Apache:
    apache
    <VirtualHost *:80>
        ServerName yourdomain.com
        DocumentRoot /var/www/html/public
        <Directory /var/www/html/public>
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>

Разверните тестовый проект на бесплатном тариме VPS (например, Oracle Cloud).

3. Облачные платформы

Используйте Timeweb Cloud или Yandex Cloud для масштабируемости.

Пример деплоя на Heroku:

  1. Установите Heroku CLI и войдите:
    bash
    heroku login
    heroku create my-php-app
  2. Добавьте файл Procfile:
    procfile
    web: vendor/bin/heroku-php-apache2 public/
  3. Задеплойте:
    bash
    git push heroku main

Автоматизация деплоя (CI/CD)

Настройте автоматическую сборку через GitHub Actions или GitLab CI.

Пример workflow для GitHub Actions:

yaml
name: Deploy PHP App

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Install dependencies
        run: composer install --no-dev --optimize-autoloader

      - name: Upload to server via SSH
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          password: ${{ secrets.SSH_PASSWORD }}
          source: "."
          target: "/var/www/html"

Практические задания

  1. Перенос базы данных
    Создайте дамп своей БД и импортируйте его на хостинг через phpMyAdmin.
  2. Настройка .htaccess
    Реализуйте редирект с HTTP на HTTPS:

    apache
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  3. Тестирование производительности
    Проанализируйте скорость работы через GTmetrix и примените минимум 3 оптимизации.

Поздравляю, теперь ваш PHP-проект доступен всему миру. Не забывайте делать бэкапы и мониторить логи сервера. Если что-то пошло не так, пишите в комментариях, помогу разобраться.

Если что то забыли на курсе по изучению PHP, то переходите по ссылке: полный курс с уроками по PHP для начинающих.