Laravel действительно может похвастаться множеством возможностей, но, чтобы они заработали, нужно правильно настроить сервер. В этой статье мы разберем шаги, которые помогут вам запустить Laravel-приложение на «чистом» сервере с Ubuntu, начиная с его установки и заканчивая настройкой окружения для работы приложения. Процесс разделим на три основные части, чтобы все было понятно и шаг за шагом.
Часть 1 — Подготовка сервера и установка зависимостей
Шаг 1: Подготовка сервера
Подключение по SSH
Предположим, у вас уже есть сервер на Ubuntu. Подключаемся к нему по SSH:
ssh <em>your_user</em>@<em>your_server_ip</em>
Замените your_user на имя вашего пользователя, а your_server_ip — на IP вашего сервера.
Обновление системы
Первым делом обновим пакеты:
sudo apt update && sudo apt upgrade -y
Это обеспечит актуальность всех компонентов системы и избавит от возможных сюрпризов.
Установка необходимых инструментов
Устанавливаем набор полезных утилит:
sudo apt install unzip curl git -y
Git понадобится для клонирования вашего проекта, unzip — для работы с архивами, а curl пригодится на разных этапах настройки.
Шаг 2: Установка веб-сервера (Nginx) и PHP
Установка Nginx
sudo apt install nginx -y
После установки проверим статус:
sudo systemctl status nginx
Если всё ок, увидите сообщение о том, что сервер работает.
Установка PHP и необходимых расширений
Laravel требует PHP версии 8.1 или выше. Устанавливаем:
sudo apt install php8.1 php8.1-fpm php8.1-mbstring php8.1-xml php8.1-curl php8.1-zip php8.1-bcmath php8.1-gd -y
Проверяем версию PHP:
php -v
Настройка PHP-FPM
PHP-FPM обрабатывает PHP-код для Nginx. Убедитесь, что он запущен:
sudo systemctl status php8.1-fpm
Шаг 3: Установка Composer
Laravel использует Composer для управления зависимостями. Устанавливаем его глобально:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Проверяем установку:
composer --version
Шаг 4: Настройка базы данных (MySQL)
Установка MySQL
sudo apt install mysql-server -y
Запускаем и настраиваем базу данных:
sudo mysql_secure_installation
Эта команда поможет задать root-пароль и улучшить безопасность.
Создание базы данных для Laravel
sudo mysql -u root -p
После входа создайте базу данных:
CREATE DATABASE <em>laravel_db</em> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON <em>laravel_db</em>.* TO '<em>laravel_user</em>'@'localhost' IDENTIFIED BY '<em>your_password</em>';
FLUSH PRIVILEGES;
EXIT;
Не забудьте заменить laravel_db, laravel_user и your_password на свои значения!
Часть 2 — Клонирование проекта и настройка окружения
В первой части мы подготовили сервер, установили Nginx, PHP и MySQL. Теперь пришло время заняться самым интересным — развернуть наш Laravel-проект на сервере. Поехали!
Шаг 5: Клонирование проекта
Клонируем репозиторий
Переместимся в директорию, где будут храниться наши проекты. Обычно это /var/www:
cd /var/www
Клонируем ваш проект из репозитория (замените URL на свой):
sudo git clone https://github.com/yourusername/your-laravel-project.git
Переходим в папку проекта:
cd your-laravel-project
Настройка прав доступа
Установим правильные права доступа для папки с проектом:
sudo chown -R www-data:www-data /var/www/your-laravel-project
sudo chmod -R 775 /var/www/your-laravel-project/storage
sudo chmod -R 775 /var/www/your-laravel-project/bootstrap/cache
Это обеспечит корректную работу с файлами и кэшем.
Шаг 6: Установка зависимостей проекта
Запускаем Composer для установки зависимостей Laravel:
composer install --optimize-autoloader --no-dev
Флаг —no-dev исключает пакеты для разработки (если проект в продакшене).
Генерация ключа приложения
Laravel требует уникального ключа для защиты данных:
php artisan key:generate
Шаг 7: Настройка переменных окружения (.env)
Создание файла .env
Скопируем стандартный файл конфигурации:
cp .env.example .env
Редактирование .env
Откройте файл для редактирования:
nano .env
Настройте следующие параметры:
- APP_NAME: имя вашего приложения
- APP_ENV: production для боевого сервера
- APP_KEY: ключ, сгенерированный ранее
- APP_URL: URL вашего сайта
Подключение базы данных:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=your_password
Сохраните изменения (Ctrl + O, затем Ctrl + X для выхода из nano).
Миграции и сиды
Теперь применим миграции для создания таблиц в базе данных:
php artisan migrate --force
Если у вас есть сиды для начальных данных:
php artisan db:seed --force
Шаг 8: Настройка Nginx для Laravel
Создание конфигурационного файла
Создаём новый файл конфигурации:
sudo nano /etc/nginx/sites-available/laravel
Вставьте следующее содержимое, заменив пути на свои:
server {
listen 80;
server_name your_domain_or_ip;
root /var/www/your-laravel-project/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Активация конфигурации
Создаем символическую ссылку:
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
Отключите стандартную конфигурацию Nginx:
sudo rm /etc/nginx/sites-enabled/default
Проверка и перезапуск Nginx
Проверим конфигурацию на ошибки:
sudo nginx -t
Если всё хорошо, перезапускаем Nginx:
sudo systemctl restart nginx
Что дальше? В третьей части мы добавим SSL-сертификат, настроим автоматические задачи и проверим безопасность деплоя. 🔐
Следите за продолжением!
Часть 3 — SSL, автоматизация и безопасность
Теперь, когда у нас есть работающее Laravel-приложение, осталось сделать его защищённым и автоматизировать некоторые процессы. В этой части мы рассмотрим установку SSL-сертификата, настройку cron-заданий и оптимизацию безопасности. Поехали!
Шаг 9: Установка SSL с помощью Let’s Encrypt
Установка Certbot
Let’s Encrypt — это бесплатный и надежный сервис для получения SSL-сертификатов. Устанавливаем Certbot, который поможет нам с этим процессом:
sudo apt install certbot python3-certbot-nginx -y
Получение SSL-сертификата
Запускаем Certbot, чтобы автоматически получить сертификат для вашего домена:
sudo certbot --nginx -d your_domain_or_ip
Вам будет предложено ввести свой email и согласиться с условиями. Certbot автоматически настроит ваш Nginx-конфиг и обновит его с включённым SSL.
Проверка автоматического обновления сертификатов
Certbot настроит автоматическое обновление сертификатов. Для проверки добавим задачу в cron:
sudo crontab -e
Добавьте строку для автоматической проверки сертификатов дважды в день:
0 12 * * * certbot renew --quiet
Это обеспечит, что ваш сертификат всегда будет актуальным.
Перезапуск Nginx для применения изменений
После установки SSL-сертификата, перезапускаем Nginx:
sudo systemctl restart nginx
Теперь ваш сайт доступен по защищённому HTTPS-протоколу! 🔒
Шаг 10: Настройка автоматических задач с помощью cron
Laravel предоставляет удобные возможности для автоматического выполнения задач через artisan. Например, вы можете настроить задачи, которые будут выполняться с определенной периодичностью (например, очистка кэша или выполнение очередей).
Добавление задачи в cron
Откроем cron-редактор для пользователя www-data, который работает с нашим сервером:
sudo crontab -u www-data -e
Добавим задачу для выполнения Laravel-команд. Например, чтобы каждый день в полночь выполнять команду очистки кэша, добавим:
0 0 * * * php /var/www/your-laravel-project/artisan cache:clear
Настройка очередей Laravel
Если вы используете очереди в Laravel (например, для обработки email-сообщений или задач в фоновом режиме), нужно также добавить задачу для запуска worker’ов:
* * * * * php /var/www/your-laravel-project/artisan queue:work --sleep=3 --tries=3
Таким образом, ваши очереди будут обрабатываться автоматически.
Шаг 11: Улучшение безопасности
Защита от атак на Nginx
Добавим дополнительные заголовки безопасности в конфигурацию Nginx, чтобы уменьшить уязвимости.
Откройте конфигурационный файл сайта:
sudo nano /etc/nginx/sites-available/laravel
Добавьте следующие строки в блок server:
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "DENY";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
Эти заголовки помогут защитить ваш сайт от различных типов атак, таких как кликджекинг и атаки через скрипты.
Отключение PHP-ошибок в продакшене
В продакшене вывод ошибок PHP не должен отображаться на экране. В Laravel это можно настроить в файле .env:
APP_ENV=production
APP_DEBUG=false
Теперь ошибки не будут показываться пользователям, а записываться в лог-файлы.
Отключение отображения файлов .env и других скрытых файлов
Убедитесь, что Nginx не может получить доступ к вашему файлу .env или другим скрытым файлам:
location ~ /\. {
deny all;
}
Регулярные обновления системы
Не забывайте регулярно обновлять пакеты на сервере. Настройте уведомления о новых версиях для вашего пакета:
sudo apt update && sudo apt upgrade -y
В этой статье мы прошли весь процесс деплоя Laravel на Ubuntu, от подготовки сервера до настройки безопасности. Если у вас есть вопросы или что-то не работает — не стесняйтесь задавать их в комментариях. Удачи в разработке!
Комментарии
0