Развертывание Laravel проекта на сервере Ubuntu 20.04

Развертывание Laravel проекта на сервере Ubuntu 20.04 Хостинг

Предварительная настройка сервера

В первую очередь нам необходимо подключиться к серверу по SSH. Для этого нам необходимо знать IP адрес сервера. Команда для подключения:

При первом входе система выдаст предупреждение:

Развертывание Laravel проекта на сервере Ubuntu 20.04

Принимаем его. После этого мы окажемся на сервере под учетной записью пользователя root. Использовать данную учетную запись является плохой практикой с точки
зрения безопасности сервера, поэтому мы создадим новую учетную запись, с помощью которой будем входить на сервер:

Вас спросят несколько вопросов, а также попросят задать пароль для учетной записи. Следующим шагом нам необходимо дать пользователю возможность выполнять команды
от имени администратора:

Следующим шагом нам нужно настроить базовый UFW файервол. Для того, чтобы просмотреть существующие профиль нужно выполнить команду

ufw app list

Развертывание Laravel проекта на сервере Ubuntu 20.04

Нам нужно убедится, что в UFW разрешено подключение к серверу через SSH, для этого выполним команду

ufw allow OpenSSH

Развертывание Laravel проекта на сервере Ubuntu 20.04

После этого запустим файервол:

Напишите Y и нажмите ENTER для того, чтобы продолжить. Мы можем отслеживать состояние UFW командой:

Наша настройка должна выглядеть следующим образом:

Развертывание Laravel проекта на сервере Ubuntu 20.04

Если вы подключались к root аккаунту через SSH ключи

Если вы вошли в свою учетную запись root с помощью SSH-ключей, то скорее всего проверка подлинности по паролю для SSH отключена. Для успешного
входа в систему вам нужно будет добавить копию вашего локального открытого ключа в файл ~/.ssh
нового пользователя.

Поскольку ваш открытый ключ уже находится в файле ~/.ssh корневой учетной записи на сервере, мы можем скопировать этот файл
в нашу новую учетную запись пользователя. Самый простой способ скопировать файлы с правильным владельцем и разрешениями — это использовать
команду rsync. Это позволит скопировать каталог .ssh корневого пользователя, сохранить разрешения и изменить владельцев файлов.

rsync —archive —chown=sammy:sammy ~/.ssh /home/sammy

Нам осталось только подключиться к серверу по SSH под созданным пользователем:

Настройка главной страницы фреймворка

Открываем файл главного маршрута.

Вносим следующие параметры в наш файл.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Создаем новый файл – экран, на котором будет выполняться рендеринг вывода информации с «БД» для пользователя.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Этот код предназначен для вывода информации. Прописываем его в файл конфигурации.

Сохраняем файл. Открываем браузер и перезагружаем приложение. Сама страничка будет выглядеть в таком формате.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Prerequisites

Файлы конфигурации Laravel располагаются в директории config внутри корневой директории приложения. Также файл .env используется для настройки конфигурации, зависимой от среды, в том числе учетных данных и любой информации, которая может изменяться между операциями развертывания. Этот файл не включен в систему контроля версий.

Предупреждение. Файл конфигурации среды содержит важную информацию о вашем сервере, включая учетные данные базы данных и ключи безопасности. В связи с этим не следует предоставлять этот файл в открытый доступ.

Значения в файле .env имеют приоритет по отношению к значениям в обычных файлах конфигурации, расположенных в директории config. Для каждого случая установки в новую среду требуется персонализированный файл среды, где будут определены такие настройки, как параметры подключения к базе данных, параметры отладки, URL приложения и другие параметры, в зависимости от используемой приложением среды.

Теперь мы создадим новый файл .env для настройки индивидуальных параметров конфигурации для создаваемой нами среды разработки. В комплектацию Laravel входит образец файла .env, который мы скопируем для создания собственного файла:

Откройте этот файл с помощью nano или другого текстового редактора на ваш выбор:

Текущий файл .env из демонстрационного приложения travellist содержит настройки использования локальной базы данных MySQL с адресом хоста базы данных 127.0.0.1. Нам нужно обновить переменную DB_HOST, чтобы она указывала на службу базы данных, которую мы создадим в нашей среде Docker. В этом обучающем руководстве мы присвоим службе базы данных имя db. Замените указанное значение DB_HOST именем службы базы данных:

При желании вы также можете изменить название базы данных, имя пользователя и пароль. Эти переменные будут использоваться на последующем шаге, когда мы настроим файл docker-compose.yml для настройки наших служб.

Сохраните файл после завершения редактирования. Если вы использовали nano, нажмите Ctrl+x, а затем Y и Enter для подтверждения.

Шаг 1 — Получение демонстрационного приложения

Для начала работы мы получим демонстрационное приложение Laravel из его репозитория на Github. Нас интересует раздел tutorial-01, содержащий базовое приложение Laravel, которое мы создали в первом обучающем руководстве этой серии.

Чтобы получить код приложения, совместимый с настоящим обучающим руководством, загрузите версию tutorial-1.0.1 в свою домашнюю директорию с помощью следующей команды:

~
https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip travellist.zip

Нам потребуется команда unzip для распаковки кода приложения. Если вы еще не установили этот пакет, сделайте это с помощью следующей команды:

Теперь распакуйте содержимое приложения и переименуйте распакованную директорию для удобства доступа:

travellist.zip
travellist-laravel-demo-tutorial-1.0.1 travellist-demo

Перейдите в директорию travellist-demo:

На следующем шаге мы создадим файл конфигурации .env для настройки приложения.

Подключение базы данных

В этом руководстве по Laravel будем использовать вызываемые контроллеры, так как мне нравиться их использовать. Мне нравиться использовать их, потому что они сохраняют мои маршруты в чистоте, удобны для моей IDE и инкапсулируют каждый маршрут в отдельный класс.

Начиная любой новый проект, вы должны понимать, что вы от него хотите. Как было сказано, мы создаём приложения для хранения закладок, поэтому мы можем предположить, что мы хотим, чтобы наше приложение делало. Напишем несколько требований:

  • Как пользователь, я хочу иметь возможность создавать новые закладки.
  • Как пользователь, я хочу просматривать все свои закладки.
  • Как пользователь, я хочу иметь возможность обновлять или удалять свои закладки.
  • Как пользователь, я хочу иметь возможность кликнуть на одну из своих закладок и посмотреть веб-сайт.
  • Как пользователь, я хочу иметь возможность просматривать закладки, отмеченные определёнными тегами.

Эти требования — почти пользовательские истории, поэтому мы можем их проработать и понять области, которые, возможно, захотим затронуть. Наш первый шаг — проектирование данных, которые нам нужно хранить в базе данных. Мы будем использовать SQLite для хранения данных этого приложения, чтобы наши требования оставались низкими.

Чтобы начать работать с SQLite в нашем Laravel приложении, во-первых, нам нужно создать SQLite файл в database/database.sqlite это можно сделать в терминале или IDE.

Затем нам нужно открыть .env файл и изменить блок database, что бы наше приложение знало о нашей базе данных. Laravel использует env файл для настройки локальной среды, которая будет загружена через различные файлы конфигурации в config/*.php. Каждый файл настраивает определённые части вашего приложения, поэтому не стесняйтесь потратить немного времени на изучение этих файлов и посмотрите как работает конфигурация.

На данный момент в вашем .env файле будет блок который выглядит следующим образом:

Теперь нам нужно внести в этот блок следующие изменения. Изменить DB_DATABASE на полный путь к SQLite файлу database/database.sqlite. В DB_CONNECTION указать sqlite и добавить строку DB_FOREIGN_KEYS=true. Остальное можно удалить, у вас должно получиться что-то вроде:

Мы установили соединение с базой данных SQLite. Установили путь к файлу базу и указали, что хотим, чтобы SQLite включил внешние ключи.

Для этого приложения будем использовать Breeze, который представляет базовую основу аутентификации. Но есть и другие варианты, такие как Jetstream позволяющие использовать 2FA и модель команд, в которой могут сотрудничать несколько человек. Существует ещё один пакет под названием Sociality, который позволяет настраивать вход через социальные сети от множества поставщиков. Однако нам это не нужно, поэтому становите Laravel Breeze с помощью следующей команды:

Это делает Laravel Breeze зависимостью разработки для приложения, и это зависимость разработки, потому что её нужно установить. После установки, пакет копирует файлы в ваше приложение для маршрутизации, представлений, контроллеров и прочего. Итак, давайте установим пакет, используя следующую команду artisan:

Читайте также:  Упрощенная установка Proxmox: упрощенный метод флэш-накопителя

php artisan breeze:install

Наконец, нам нужно установить и собрать фронтенд ресурсы с помощью npm:

Этот процесс займёт некоторое время, так как необходимо загрузить все пакеты JavaScript или CSS, затем запустить процесс сборки. Как только это будет сделано скрипт завершит свою работу.

Всё установлено и готово. Нужно запустить миграцию базы данных, что бы наша база находилась в определённом состоянии, с которым мы могли бы начать работать. Вы можете сделать это выполнив команду artisan:

php artisan migrate

Эта команда выполнит каждую миграцию, которая содержится в каталоге database/migrations, и применит их к базе данных. Таким образом, состояние базы данных можно напрямую связать с системой управления версиями, что сделает ваше приложение более умным и устойчивым.

Давайте на минуту задумаемся о том, как мы хотим хранить закладки. Каждая закладка должна принадлежать пользователю, иметь уникальный идентификатор, URL-адрес, который можно посетить, и необязательно описание на случай, если вы хотите написать заметку о том, для чего она нужна.

Установка Laravel 9

Это руководство по Laravel предназначено для тех, кто только начал изучать Laravel. Может быть, они знают, что это такое, или пытались установить его пару раз и остановились, потому что почувствовали себя ошеломлёнными. Мы собираемся создать новое приложение Laravel с самого начала, и единственное, что вам нужно, это:

  • Терминал
  • Установленный и доступный в вашей директории Composer
  • Установленный и доступный в вашей директории NPM
  • Установленный SQLite

Так что же мы будем создавать? Мы собираемся сделать хранитель закладок, чтобы вы могли брать ссылки, которые вам интересны и сохранять их. Наряду с этим мы также позволим добавлять тэги к закладкам, для их классификации.

Как начать работу с Laravel? Первое, что нужно сделать, это, конечно же, создать новый проект и сделать это можно несколькими способами: через установщик Laravel, используя Laravel Sail Build или просто с помощью composer create-project. В этом руководстве по Laravel будем использовать composer create-project: хочу, чтобы требования оставались минимальными. Поэтому выберите каталог, в котором вы хотите разместить своё приложение, и выполните команду composer:

create-project laravel/laravel bookmarker

Теперь откройте новый каталог bookmarker в вашем редакторе кода, чтобы мы могли начать. Это пустой Laravel проект, наша отправная точка. Не буду делать никаких предположений о том, как вы хотите рассматривать этот проект локально, так как есть много разных вариантов. Вместо этого будем использовать artisan для обслуживания приложения. Запустите следующую команду artisan:

php artisan serve

Вы получите сообщение о том по какому адресу доступно ваше приложение. Откройте его в браузере. Это должен быть экран Laravel по умолчанию. Поздравляю, вы сделали первый шаг с Laravel! Далее мы перейдём к том, как работает это приложение.

Создание workflow

Рабочий процесс (workflow) GitHub Action — это набор инструкций, состоящий из различных заданий и шагов, которые могут быть запущены при возникновении событий, упомянутых выше.

Рабочие процессы репозитория хранятся внутри .github/workflows в корневом каталоге ваших приложений.

Создадим файл deploy.yaml внутри каталога .github/workflows со следующим содержимым:

Step 2 — Configuring MySQL

Laravel supports a variety of database servers. Because this tutorial uses the LEMP stack, MySQL will store data for the application.

mysql root

You will be prompted for the password you set for the MySQL root account during installation.

Start by creating a new database called laravel, which is what we’ll use for the website. You can choose a different name, but make sure to remember it because you’ll need it later.

CREATE DATABASE laravel DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

Flush the privileges to notify the MySQL server of the changes.

And exit MySQL.

Установка Let’s Encrypt

Важно, чтобы сайт работал по протоколу HTTPS. Для установки бесплатного SSL сертификата нам потребуется программный продукт Certbot. Установим его командой:

sudo apt install certbot python3-certbot-nginx

Далее нам нужно разрешить HTTPS трафик в нашем файерволе. Для этого выполним команды:

sudo ufw allow «Nginx Full»

sudo ufw delete allow «Nginx HTTP»

Теперь выполните команду

sudo ufw status

Ответ должен быть таким:

Развертывание Laravel проекта на сервере Ubuntu 20.04

Далее запускаем процесс получения сертификата:

sudo certbot —nginx -d ваш_домен -d www.ваш_домен

Система задаст несколько вопросов, в том числе о том, нужно ли настраивать автоматический редирект трафика на HTTPS протокол. Отвечаем утвердительно на этот
вопрос и после установки снова заходим на наш домен. Мы должны увидеть, что он стал работать по HTTPS протоколу.

Создание сценария развёртывания Laravel приложения

Первое, что мы сделаем, это создадим сценарий развёртывания содержащий все необходимые команды для развёртывания и запуска нашего приложения.

В корневом каталоге приложения создадим папку .scripts.

Внутри папки .scripts создаём файл deploy.sh со следующим содержимым:

# если уже в режиме обслуживанияphp artisan down # Загрузить последнюю версию приложения pull origin production# Установить зависимости Composer —no-dev —no-interaction —prefer-dist —optimize-autoloader# Очистить старый кэшphp artisan clear-compiled# Пересоздать кэшphp artisan optimize# Скомпилировать ресурсы run prod# Запустить миграцию базы данныхphp artisan migrate # Выход из режима обслуживанияphp artisan up

Финальная настройка

Нам осталось настроить всего несколько мелочей. Во-первых переходим в папку с проектом:

cd /var/www/название проекта

И создаем .env файл командой:

cp .env.example .env

Далее выполняем команду для генерации уникального ключа проекта.

php artisan key:generate

После этого открываем .env файл для редактирования:

И устанавливаем значения для базы данных, пользователя и пароль, которые мы задали на этапе настройки MySQL. Далее выполняем команду для формирования баз данных
из файлов миграций.

Дальнейшая настройка будет специфична для каждого отдельного проекта, но уже на данном этапе в большинстве случаев вы должны увидеть работающий проект. Надеемся,
что у вас все получилось!

Рефакторинг кода контроллера

Код хорош и делает именно то, что нам нужно, но можем ли мы его улучшить? Я думаю да.

Выносим валидацию в запрос формы

Первый шаг в рефакторинге кода — вынести валидацию из контроллера. Нет ничего плохого в том, чтобы хранить её в контроллере. Однако мы можем сэкономить немного времени, не создавая экземпляр контроллера в случае сбоя проверки. Для этого мы можем создать новый запрос формы, используя следующую команду artisan:

php artisan make:request Bookmarks/StoreRequest

Это создаст новый класс в app/Http/Requests/Bookmarks/StoreRequest.php. Давайте откроем его, добавим код и пройдёмся по нему:

Мы используем метод authorize() для проверки является ли авторизированным запрос. На данный момент это нормально, но если вы добавите уровень ролей и разрешений, позже вы сможете гарантировать, что аутентифицированному пользователю разрешено выполнять действие store в закладках. Затем у нас есть метод rules, массив правил проверки, подобный тому, как был у нас в контроллере. Что Laravel будет делать сейчас, используя контейнер DI, когда приходит запрос — прежде чем он создаст экземпляр нового контроллера, он попытается создать запрос формы. Это проверит запрос. Если валидация не пройдёт, будет выдано исключение, которое Laravel поймает, преобразует для вас в ErrorBagи вернутся к предыдущему представлению с этим пакетом ошибок, доступным для отображения любых ошибок валидации. Очень полезная функция Laravel. Но, прежде чем это произойдёт, нам нужно указать нашему контроллеру использовать новый запрос формы, поэтому изменим сигнатуру метода __invoke, следующим образом:

Неудачная валидация нас не затронет. Поэтому мы можем удалить расширение базового контроллера Laravel и удалить ручную проверку:

Внезапно наш контроллер стал намного меньше и его легче понять. Если вам нужно добавить примечания в комментариях, чтобы напомнить о выполнении валидации, не стесняйтесь, пока это не войдёт в рабочий процесс, в котором вы будете помнить что здесь происходит.

Выносим логику в Action

Мы могли бы оставить всё как есть, так как это разумное решение, но стандарт Laravel состоит в том, чтобы переместить логику создания в новый класс, называемый Action.

Не существует специальной команды для создания Action, нужно сделать это вручную. Создайте в каталоге app/Actions/Bookmarks/ новый файл CreateBookmarkAndTags.php.

Затем откройте этот файл в редакторе и добавьте следующий код:

У нас есть один метод handle() принимающий данные запроса и идентификатор, который мы будем использовать в качестве идентификатора пользователя, затем копируем логику из контроллера и вносим несколько незначительных изменений. Мы можем использовать этот action класс в любом месте нашего приложения, из пользовательского интерфейса, из командной строки, или даже API, если это необходимо. Мы создали модульно действие, которое можно легко вызвать, протестировать и получить предсказуемые результаты.

Читайте также:  Упрощенный вход в систему администратора Bitrix: упростите работу пользователя

Итак, теперь мы можем ещё больше облегчить контроллер:

Теперь у нас есть один action класс, который мы вызываем внутри контроллера, а затем возвращаем перенаправление. Намного чище и с хорошим названием. Конечно, мы можем пойти дальше, если захотим. Используя контейнер Laravel для внедрения action в конструктор — это позволит нам вызывать action класс. Это будет выглядеть следующим образом.

Этот последний метод полезен, если у вашего action класса есть требования к его конструктору. Скажем вы используете шаблон Репозитория или другой шаблон — вы можете добавить его в конструктор своего action и Laravel решит это автоматически, если сможет.

Step 6 — Securing your Application with TLS

To complete the production setup it is recommended to serve the application through secure HTTPS using TLS. This will make sure that all communication between the application and its visitors will be encrypted, which is especially important if the application asks for sensitive information such as login or password.

The only changes will be:

Specifically, the command to obtain the certificate will be:

certbot certonly —webroot-path/var/www/html/quickstart example.com www.example.com

And the final version of the /etc/nginx/sites-available/example.com configuration file will look like this

Make sure to check that there are no syntax errors in the configuration.

If all changes were successful, you will get a result that looks like this:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

If that is the case, you can safely restart Nginx to put the changes in effect.

systemctl restart nginx

The Let’s Encrypt TLS/SSL certificate will be fully in place and the application will be available through a secure connection. To verify if everything works as expected, simply visit https://example.com. You should see the same application form as before, but this time the connection will be fully secured.

Шаг 4 — Настройка Laravel

Файлы конфигурации Laravel располагаются в директории config внутри корневой директории приложения. При установке Laravel с помощью Composer создается файл среды. Этот файл содержит настройки текущей среды, где выполняется приложение, и имеет приоритет перед обычными файлами конфигурации, расположенными в каталоге config. Для каждого случая установки в новую среду требуется персонализированный файл среды, где будут определены такие настройки, как параметры подключения к базе данных, параметры отладки, URL приложения и другие параметры, в зависимости от используемой приложением среды.

Теперь мы изменим файл .env для настройки конфигурации текущей среды приложения.

Откройте файл .env, используя предпочитаемый редактор командной строки. Здесь мы будем использовать nano:

Хотя в этом файле содержится много переменных конфигурации, вам не нужно настраивать их все. В следующем списке содержится обзор переменных, требующих внимания:

  • APP_NAME: имя приложения, используется для уведомлений и сообщений.
  • APP_ENV: текущая среда приложения.
  • APP_KEY: используется для генерирования солей и хэш-сумм, этот уникальный ключ создается автоматически при установке Laravel с помощью Composer, изменять его не нужно.
  • APP_DEBUG: указывает, нужно ли отображать данные отладки на стороне клиента.
  • APP_URL: базовый URL приложения, используется для генерирования ссылок на приложение.
  • DB_DATABASE: имя базы данных.
  • DB_PASSWORD: пароль для подключения к базе данных.

По умолчанию эти значения настроены для локальной среды разработки, которая использует Homestead, упакованный комплект Vagrant, который предоставляется Laravel. Мы изменим эти значения, чтобы отразить текущие настройки среды нашего приложения.

Если вы устанавливаете Laravel на систему, предназначенную для разработки или тестирования, вы можете оставить опцию APP_DEBUG включенной, чтобы получать важные данные отладки при тестировании приложения в браузере. В этом случае для переменной APP_ENV следует задать значение development или testing.

Если вы устанавливаете Laravel в производственной среде, вам необходимо будет отключить опцию APP_DEBUG, потому что она показывает конечному пользователю важные данные о вашем приложении. В этом случае для APP_ENV следует задать значение production.

Следующий файл .env содержит настройки нашего приложения-примера для разработки:

Примечание. Переменная APP_KEY содержит уникальный ключ, который был автоматически сгенерирован при установке Laravel с помощью Composer. Это значение изменять не нужно. Если вы хотите сгенерировать новый ключ безопасности, вы можете воспользоваться командой php artisan key:generate.

Измените переменные соответствующим образом. Завершив редактирование, сохраните и закройте файл для сохранения изменений. Если вы используете nano, то можете выйти, введя CTRL+X, а затем Y и Enter для подтверждения.

Теперь наше приложение Laravel настроено, но нам еще нужно настроить веб-сервер для доступа к нему через браузер. На следующем шаге мы настроим Nginx для обслуживания вашего приложения Laravel.

Шаг 2 — Создание базы данных для приложения

Чтобы продемонстрировать основы установки и использования Laravel, мы создадим приложение travel list, показывающее список мест, куда хотят поехать пользователи, и места, где они уже побывали. Эти данные можно хранить в таблице places с полем для мест, которому мы присвоим имя name, а также с полем visited, где мы можем отметить места, которые пользователи посещали или не посещали. Также мы добавим поле id для уникальной идентификации каждой записи.

Чтобы подключиться к базе данных из приложения Laravel, мы создадим отдельного пользователя MySQL и предоставим этому пользователю полные права доступа к базе данных travellist.

На момент написания этого руководства собственная библиотека MySQL PHP mysqlnd не поддерживает метод аутентификации caching_sha2_authentication, используемый по умолчанию в MySQL 8. Для подключения к базе данных MySQL из кода PHP необходимо создать нового пользователя с помощью метода аутентификации mysql_native_password.

Для начала войдите в консоль MySQL как пользователь root базы данных:

Чтобы создать новую базу данных, запустите следующую команду в консоли MySQL:

CREATE DATABASE travellist

Теперь нам нужно предоставить этому пользователю разрешение для базы данных travellist:

После этого выйдите из оболочки MySQL:

Теперь вы можете проверить наличие у нового пользователя необходимых разрешений, выполнив повторный вход в консоль MySQL, на этот раз используя учетные данные вашего собственного пользователя:

Результат будет выглядеть следующим образом:

Создайте таблицу places в базе данных travellist. Из консоли MySQL запустите следующее выражение:

CREATE TABLE travellist.places INT AUTO_INCREMENT,
name VARCHAR,
visited BOOLEAN,
PRIMARY KEYid

Заполните таблицу places определенными образцами данных:

INSERT INTO travellist.places name, visited
VALUES , ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
,

Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:

SELECT * FROM travellist.places

Вы увидите примерно следующий вывод:

Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MySQL:

Вы готовы создать приложение и настроить его для подключения к новой базе данных.

Настройка веб-сервера

Перемещаем папку нашего приложения в каталог «/var/www», где обычно хранят все приложения, которые функционируют на веб-севере.

sudo mv ~/yourproject /var/www/yourproject

Развертывание Laravel проекта на сервере Ubuntu 20.04

Выдал доступ к папкам, куда фреймворк сохраняет созданные приложением файлы.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Приступим к настройке веб сервера. Создаем файл настроек виртуального хоста.

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

Вставляем следующие настройка для веб-сервера.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Теперь, запускаем новый файл с настройками виртуального хоста, создаем ссылку на ваш проект в «sites-enabled».

sudo ln -s /etc/nginx/sites-available/yourproject /etc/nginx/sites-enabled/

Проверяем на синтаксис ошибок в настройках.

sudo nginx -t

systemctl reload nginx

Создание моделей Eloquent

Теперь мы можем сгенерировать новую Eloquent модель и выполнить миграцию с помощью командной строки artisan. Выполните в терминале следующее:

php artisan make:model Bookmark

Мы говорим Laravel создать новую модель Eloquent с названием Bookmark, а флаг -m указывает также сгенерировать миграцию. Если вам когда-нибудь понадобится создать новую модель и выполнить миграцию, рекомендуется использовать этот подход, поскольку он выполняет и то, и другое одновременно. Вы так же можете добавить к этой команде другие флаги для создания фабрик моделей, наполнителей и т.д., но мы не будем использовать их в этом руководстве по Laravel.

Это создаст новую миграцию внутри database/migrations, у неё будет временная метка, за которой следует create_bookmarks_table. Откройте её в своей IDE, что бы мы могли структурировать данные. В методе up замените содержимое следующим блоком:

Читайте также:  Хостинг ИСПДн (152-ФЗ о персональных данных) — INVS.RU

Из приведённого выше фрагмента кода вы можете увидеть описательный характер миграции базы данных, то, как мы создадим новую таблицу, и описание того, как мы хотим, чтобы она была создана. Теперь мы можем применить эти изменения к нашей базе данных, вновь запустив команду миграции artisan:

Затем, давайте перейдём к нашей Eloquent Модели и добавим код, что бы она знала о полях базы данных и любых отношениях, которые они могут иметь. Откройте app/Models/Bookmark.php и замените содержимое следующим кодом:

strict_types Authenticatable

Наконец, мы можем создать модель Тэг. Мы хотим, что бы с каждой закладкой было связано много тэгов tags. Возьмём в качестве примера Laravel News. Мы могли бы поставить следующие тэги:

  • Laravel
  • News
  • Tutorials
  • Jobs

Таким образом, каждый раз когда мы хотим посмотреть закладки отмеченные любым из этих тэгов, должна появиться закладка Laravel News. Как и раньше, мы собираемся запустить команду artisan для создания модели Tag:

php artisan make:model Tag

Теперь откройте файл миграции в текстовом редакторе и снова замените содержимое метода up:

У наших тэгов есть name и slug, на этот раз нам не нужны временные метки, так как это не важная информация. Я называю это мета моделью, используемой для категоризации и, в основном, системой, пользователь создаёт их, но они не в центре внимания.

Итак, давайте поработаем над Eloquent моделью Tag:

Пока никаких отношений не настраиваем, нам понадобится сводная таблица, для связывания тэгов с закладками. Запустите команду генерации миграции в терминале:

php artisan makemigration create_bookmark_tag_table

В Laravel есть соглашение, согласно которому для названия для сводных таблиц вы задаёте имя указав связываемые таблицы в алфавитном порядке и единственном числе. Итак, мы хотим объединить таблицы bookmarks и tags, поэтому мы называем сводную таблицу bookmark_tag поскольку теги могут принадлежать множеству разных закладок, а закладки могут иметь много тегов.

Давайте заполним эту миграцию, чтобы увидеть, чем она отличается, снова сосредоточившись на методе up:

Эта таблица должна содержать внешние ключи для закладок и первичные ключи тэгов. Теперь у нас есть Eloquent модель для этой таблицы, поэтому мы добавляем отношения в модель ‘Tag’ и Bookmark.

Теперь ваша Модель Tag должна выглядеть следующим образом:

Ваша Модель Bookmark должна выглядеть так:

Наконец выполните миграцию для обновления состояния базы данных:

Создание пользовательского интерфейса

Теперь, когда наши модели Bookmark и Tag знакомы друг с другом, мы можем приступить к созданию пользовательского интерфейса! Мы не будем сосредотачиваться на отточенном пользовательском интерфейсе, поэтому не стесняйтесь проявлять творческий подход. Однако мы будем использовать tailwindcss.

Мы собираемся сделать большую часть нашей работы для закладок в маршруте панели управления (dashboard), созданном Laravel Breeze, поэтому, если вы посмотрите в routes/web.php вы должны увидеть следующее:

Маршрут панели управления в настоящее время замыкание, и мы, вероятно, хотим преобразовать его в контроллер. Итак, давайте создадим новый контроллер, чтобы сохранить логику для панели управления, запустив следующую команду artisan:

php artisan make:controller DashboardController

Теперь давайте реорганизуем файл маршрутов, чтобы он стал немного чище:

Мы упростили маршрут home до view маршрута, а маршрут dashboard теперь указывает на контроллер. Откройте этот контроллер в редакторе, чтобы можно было вставить логику из приведённого ниже кода:

Как и раньше, всё что нам нужно сделать это прямо сейчас вернуть представление. Теперь давайте проверим это, запустив следующую команду artisan, для запуска вашего приложения:

Теперь, если вы откроете своё приложение в браузере, вверху справа вы должны увидеть две ссылки Login и Register (Вход и Регистрация). Попробуйте зарегистрировать учётную запись и подождите пока она перенаправит в панель управления. Вы должны увидеть сообщение You’re logged in! — Вы вошли!.

Фантастическая работа продолжается! У вас есть приложение Laravel обрабатывающее аутентификацию и модели данных в фоновом режиме, которые можно использовать для создания закладок и управления ими.

Laravel blade

Когда дело доходит до фронтэнда, могут появиться затруднения в выборе, так как существуют миллионы библиотек на JavaScript, есть обычный PHP и Blade, которые вы можете использовать. В этой части руководства мы сосредоточимся на использовании Laravel Blade, поскольку не хотим лишних сложностей или дополнительных пакетов на раннем этапе обучения.

Когда мы установили Laravel Breeze, мы получили несколько дополнительных файлов представления, и это здорово, поскольку он уже настроен. Для новой формы закладок я создам новый компонент Blade, который представляет собой отдельное представление view, которое мы можем использовать в нескольких местах.

Создайте анонимный компонент Blade, который является просто файлом представления, выполнив следующую команду:

php artisan make:component bookmarks.form

Затем внутри нашего resources/views/dashboard.blade.php проведём рефакторинг, что бы он выглядел следующим образом:

xapplayout xslot name h2 «font-semibold text-xl text-gray-800 leading-tight» h2 xslot div div «max-w-7xl mx-auto sm:px-6 lg:px-8» div «bg-white overflow-hidden shadow-sm sm:rounded-lg» xbookmarksform bookmarks div div divxapplayout

Создание контроллера

Итак, теперь мы должны сохранить данные формы, скорее всего, ваша страница не загрузится, потому что маршрут ещё не определён — и это нормально. Мы собираемся его создать. Однако сначала нам нужно создать контроллер, в который мы собираемся сохранить эти данные. С помощью следующей команды artisan создайте новый контроллер:

php artisan makecontroller BookmarksStoreController invokable

Затем добавим в файл маршрутов следующее:

Теперь внутри контроллера нужно сделать несколько вещей, Во-первых, мы хотим проверить запрос, чтобы мы могли передать информацию обратно с сообщением валидации. Затем мы хотим выполнить действие для создания новой закладки, и наконец, перенаправить пользователя обратно в панель управления, где он увидит только что созданную закладку.

Внутри app/Http/Controllers/Bookmarks/StoreController.php добавим следующий код:

Предпосылки

Я состою в небольшой команде, работающей над Laravel проектом, развёрнутым на VPS. Каждый из членов нашей команды работает над определённой задачей, и когда она готова к продакшену, всегда требуется, чтобы получил доступ к серверу для развёртывания каждого изменения, отправляемого в наш GitHub репозиторий.

Это стало часто повторяющейся и неприятной задачей для всех нас, м требовалось решение в рамках нашего масштаба и бюджета. Поэтому мы обратились к могущественным GitHub Actions для автоматизации наших рабочих процессов.

Давайте погрузимся в упрощённую версию нашего руководства по настройке рабочего процесса.

Создаём ветку развёртывания и отправляем на GitHub

Если вы заметили, что в наших файлах deploy.sh и deploy.yaml мы ссылаемся на ветку production. Мы будем использовать эту ветвь для добавления коммитов готовых к продакшену, с помощью push или pull request.

Создаём эту ветку для своего репозитория с помощью следующих команд и пушим на GitHub:

checkout production push origin production

Настройка фреймворка

Настройка фреймворка расположена в каталоге “config” вашего главного каталога. Когда мы устанавливали фреймворк через утилиту “Composer” то создался файл среды.

Файл среды записаны настройки вашей среды, где находится приложение, и ставит свой файл по приоритету выше перед другими файлами настроек, которые находятся в каталоге «config».

Открываем файл “.env”.

Хоть и в файле на первый взгляд много конфигураций, но я буду настраивать лишь те, которым нам понадобятся. Дальше я напишу и опишу, какие параметры я буду менять.

  • APP_NAME: Имя вашего проекта, в основном пользуется для уведомления;
  • APP_ENV: Актуальная среда вашего приложения;
  • APP_KEY: Специальный ключ для генерации хэш-сумм, создается сразу после установки фреймворка, его не трогаем;
  • DB_DATABASE: имя вашей «БД»;
  • DB_PASSWORD: пароль к «БД» чтобы подключаться к ней.

Изменяем следующие ключи в  файле приложения.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Шаг 1 — Установка необходимых модулей PHP

Прежде чем выполнить установку Laravel, необходимо установить несколько модулей PHP, требующихся для инфраструктуры. Мы будем использовать apt для установки модулей PHP php-mbstring, php-xml и php-bcmath. Эти расширения PHP предоставляют дополнительную поддержку при работе с кодированием символов, кодом XML и точными математическими операциями.

Если вы впервые используете apt в этом сеансе, необходимо запустить команду update, чтобы обновить кэш диспетчера пакетов:

Теперь вы можете установить требуемые пакеты с помощью следующей команды:

php-mbstring php-xml php-bcmath

Теперь ваша система готова к установке Laravel через Composer, но перед этим нам потребуется база данных для нашего приложения.

Оцените статью
Хостинги