Сегодня мы завершим наш курс по PHP важнейшим этапом, это деплоем вашего приложения в интернет. Вы научитесь готовить проект к продакшену, выбирать хостинг, настраивать сервер и автоматизировать процессы. Время превратить ваш код в реальный продукт.
Подготовка приложения к деплою
Перед тем как выкладывать проект в сеть, его нужно оптимизировать и обезопасить. Вот ключевые шаги:
1. Настройка окружения
Убедитесь, что приложение работает в продакшен-режиме. В PHP это можно сделать через файл .env
:
// .env APP_ENV=production APP_DEBUG=false
Практическая задача:
Создайте файл .env
и добавьте переменные окружения для вашего проекта.
2. Управление зависимостями
Используйте Composer для установки пакетов. Удалите ненужные зависимости из composer.json
и выполните:
composer install --no-dev --optimize-autoloader
Флаг --no-dev
исключает пакеты для разработки (например, тесты).
3. Работа с базой данных
- Экспортируйте локальную БД в дамп:
mysqldump -u root -p my_database > database.sql
- Убедитесь, что конфигурация подключения к БД в коде использует переменные окружения, а не хардкод:
$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
. - Настройте права доступа к папкам:
chmod 755 public/ chmod 644 config.php
- Сгенерируйте уникальный ключ для шифрования сессий:
// Используйте password_hash() $secret_key = bin2hex(random_bytes(32));
5. Оптимизация
- Включите кэширование OPcache в
php.ini
:opcache.enable=1 opcache.memory_consumption=128
- Минифицируйте CSS/JS файлы с помощью инструментов вроде Webpack или Gulp.
Размещение на хостинге
Теперь выберем, куда загружать проект. Рассмотрим три варианта:
1. Shared-хостинг
Подходит для небольших проектов.
Пример загрузки через FTP (FileZilla):
- Скачайте и установите FileZilla.
- Введите данные хоста:
ftp.yourhosting.com
, логин и пароль. - Перетащите файлы в папку
public_html
.
Важно: Убедитесь, что версия PHP на хостинге совпадает с вашей локальной. Это можно проверить через панель управления (например, cPanel).
2. VPS/VDS
Для сложных проектов арендуйте виртуальный сервер (например, на Бегет или TimeWeb).
Настройка сервера:
- Установите LAMP-стек:
sudo apt update sudo apt install apache2 mysql-server php libapache2-mod-php
- Настройте виртуальный хост в 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:
- Установите Heroku CLI и войдите:
heroku login heroku create my-php-app
- Добавьте файл
Procfile
:web: vendor/bin/heroku-php-apache2 public/
- Задеплойте:
git push heroku main
Автоматизация деплоя (CI/CD)
Настройте автоматическую сборку через GitHub Actions или GitLab CI.
Пример workflow для GitHub Actions:
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"
Практические задания
- Перенос базы данных
Создайте дамп своей БД и импортируйте его на хостинг через phpMyAdmin. - Настройка .htaccess
Реализуйте редирект с HTTP на HTTPS:RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- Тестирование производительности
Проанализируйте скорость работы через GTmetrix и примените минимум 3 оптимизации.
Поздравляю, теперь ваш PHP-проект доступен всему миру. Не забывайте делать бэкапы и мониторить логи сервера. Если что-то пошло не так, пишите в комментариях, помогу разобраться.
Если что то забыли на курсе по изучению PHP, то переходите по ссылке: полный курс с уроками по PHP для начинающих.