Деплой PHP приложения на VPS: пошаговое руководство от А до Я

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

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

Начать курс

Введение: Почему VPS — лучший выбор для PHP-проекта?

Разработка веб-приложения на PHP — это только половина дела. Вторая, не менее важная часть — это грамотный деплой. Если вы переросли общий хостинг с его ограничениями и хотите полного контроля над окружением, виртуальный выделенный сервер (VPS) — идеальное решение. В этой статье мы пройдем путь от покупки сервера до запуска вашего PHP-приложения в production-режиме. Вы узнаете, как настроить связку Nginx + PHP-FPM + MySQL, настроить домен, SSL-сертификат и автоматизировать обновления кода.

Шаг 1: Начальная настройка VPS и подключение

1.1 Выбор ОС и первичный вход

Рекомендуем использовать Ubuntu 22.04 LTS — стабильную и с долгосрочной поддержкой. После покупки VPS вы получите IP-адрес и root-пароль.

Подключаемся через SSH:

ssh root@ваш_IP_сервера

1.2 Создание пользователя и настройка безопасности

Работать под root — плохая практика. Создадим отдельного пользователя с sudo-правами:

adduser deployer
usermod -aG sudo deployer

Теперь настроим SSH-ключи для удобного и безопасного входа. На локальной машине сгенерируйте ключ (если его нет):

ssh-keygen -t rsa -b 4096

Скопируйте публичный ключ на сервер:

ssh-copy-id deployer@ваш_IP_сервера

После проверки входа по ключу отключите вход по паролю и root-доступ:

sudo nano /etc/ssh/sshd_config
# Измените:
PermitRootLogin no
PasswordAuthentication no
# Перезапустите SSH:
sudo systemctl restart sshd

Шаг 2: Установка и настройка стека LEMP (Nginx, PHP, MySQL)

2.1 Установка Nginx

Обновляем пакеты и устанавливаем веб-сервер:

sudo apt update && sudo apt upgrade -y
sudo apt install nginx -y

Проверяем статус:

sudo systemctl status nginx

2.2 Установка PHP 8.x и необходимых расширений

Добавим репозиторий с актуальной версией PHP:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-zip -y

2.3 Установка MySQL (MariaDB)

sudo apt install mariadb-server mariadb-client -y
sudo mysql_secure_installation

Создаем базу данных и пользователя для вашего приложения:

sudo mysql -u root
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Шаг 3: Настройка виртуального хоста (Server Block) в Nginx

Создадим конфигурационный файл для нашего домена (например, myapp.ru):

sudo nano /etc/nginx/sites-available/myapp

Вставьте следующий шаблон для PHP-FPM:

server {
    listen 80;
    server_name myapp.ru www.myapp.ru;
    root /var/www/myapp/public;
    index index.php index.html;

    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;
    }

    location ~ /\.ht {
        deny all;
    }
}

Активируем сайт и перезагружаем Nginx:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t  # Проверка конфигурации
sudo systemctl reload nginx

Шаг 4: Деплой кода приложения (Git + Composer)

4.1 Клонирование репозитория

Создаем директорию для проекта и клонируем код (например, с GitHub):

sudo mkdir -p /var/www/myapp
sudo chown -R deployer:deployer /var/www/myapp
cd /var/www/myapp
git clone git@github.com:ваш_username/ваш_репозиторий.git .

4.2 Установка зависимостей через Composer

Установим Composer глобально:

cd ~
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

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

cd /var/www/myapp
composer install --no-dev --optimize-autoloader

4.3 Настройка окружения (.env)

Создаем файл .env на основе примера:

cp .env.example .env
nano .env

Заполняем данные для подключения к базе данных:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp_db
DB_USERNAME=myapp_user
DB_PASSWORD=strong_password

Генерируем ключ приложения (для Laravel или аналогичных фреймворков):

php artisan key:generate

4.4 Установка прав доступа

Важно дать веб-серверу права на запись в некоторые директории (storage, bootstrap/cache для Laravel):

sudo chown -R www-data:www-data /var/www/myapp/storage
sudo chown -R www-data:www-data /var/www/myapp/bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

Шаг 5: Настройка

Блоги

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