Введение: почему VPS — идеальное решение для PHP проекта
Разработка PHP приложения — это лишь половина дела. Вторая, не менее важная часть — грамотный деплой на сервер. Виртуальный выделенный сервер (VPS) предоставляет гибкость, контроль и производительность, недоступные при использовании общего хостинга. Вы получаете root-доступ, возможность тонкой настройки окружения и полную изоляцию ресурсов.
В этом руководстве мы пройдем путь от покупки сервера до рабочего приложения на примере PHP 8.x, Nginx, MySQL и Git. Все шаги описаны для операционной системы Ubuntu 22.04 LTS — наиболее популярного дистрибутива для веб-серверов.
1. Первоначальная настройка VPS и подключение
1.1. Выбор и покупка VPS
Для PHP приложения минимальные требования: 1 vCPU, 1 ГБ RAM, 20 ГБ SSD. Рекомендуем провайдеров с хорошей репутацией: DigitalOcean, Linode, Vultr или отечественные Timeweb, Beget.
После покупки вы получите IP-адрес, root-пароль (или SSH-ключ).
1.2. Подключение по SSH и создание пользователя
Подключаемся к серверу (замените 192.168.1.1 на ваш IP):
ssh root@192.168.1.1
Создаем непривилегированного пользователя для повседневной работы:
adduser deployer
usermod -aG sudo deployer
Настраиваем SSH-ключи для безопасного входа:
mkdir -p /home/deployer/.ssh
cp ~/.ssh/authorized_keys /home/deployer/.ssh/
chown -R deployer:deployer /home/deployer/.ssh
chmod 700 /home/deployer/.ssh
chmod 600 /home/deployer/.ssh/authorized_keys
Отключаем вход root через пароль, редактируем /etc/ssh/sshd_config:
PermitRootLogin prohibit-password
PasswordAuthentication no
Перезапускаем SSH: systemctl restart sshd
1.3. Базовая безопасность сервера
- Обновляем пакеты:
apt update && apt upgrade -y - Устанавливаем fail2ban:
apt install fail2ban -y - Настраиваем UFW (брандмауэр):
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
2. Установка и настройка LEMP-стека (Linux, Nginx, MySQL, PHP)
2.1. Установка Nginx
apt install nginx -y
systemctl enable nginx
systemctl start nginx
Проверьте работу, открыв в браузере IP-адрес сервера. Вы должны увидеть приветственную страницу Nginx.
2.2. Установка PHP 8.x и PHP-FPM
Добавляем репозиторий для актуальной версии PHP:
apt install software-properties-common -y
add-apt-repository ppa:ondrej/php -y
apt update
apt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y
Проверяем статус PHP-FPM:
systemctl status php8.2-fpm
2.3. Установка MySQL (MariaDB)
apt install mariadb-server -y
systemctl enable mariadb
systemctl start mariadb
Запускаем скрипт безопасности:
mysql_secure_installation
Создаем базу данных и пользователя для приложения:
mysql -u root -p
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;
2.4. Настройка виртуального хоста Nginx
Создаем конфигурационный файл для нашего домена (например, myapp.com):
nano /etc/nginx/sites-available/myapp
Содержимое файла:
server {
listen 80;
server_name myapp.com www.myapp.com;
root /var/www/myapp/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Активируем сайт и перезагружаем Nginx:
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
3. Деплой PHP приложения через Git
3.1. Настройка Git на сервере
apt install git -y
cd /var/www
git clone https://github.com/yourusername/your-repo.git myapp
Настраиваем права доступа:
chown -R www-data:www-data /var/www/myapp
find /var/www/myapp -type d -exec chmod 755 {} \;
find /var/www/myapp -type f -exec chmod 644 {} \;
Особые права для директорий с кэшем и загрузками:
chmod -R 775 /var/www/myapp/storage
chmod -R 775 /var/www/myapp/bootstrap/cache
3.2. Настройка переменных окружения
Копируем файл конфигурации:
cp .env.example .env
Редактируем .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