Введение: Почему 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