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

Без регистрации и смс