Как развернуть PHP-приложение?
В этой статье речь пойдет о PHP, одном из самых популярных скриптовых языков, на которых работает всемирная паутина. Мы рассмотрим его преимущества, недостатки и варианты развертывания.
К концу этой статьи вы сможете загрузить простое PHP-приложение, докеризировать его и развернуть в контейнерах Back4app.
Contents
Обзор PHP
PHP (сокращение от “PHP: HyperText Processor”) – популярный бесплатный скриптовый язык общего назначения. Он был создан в 1993 году Rasmus Lerdorf и позже выпущен в 1995 году.
Изначально PHP был разработан для веб-разработки, но сейчас он также используется для написания скриптов на стороне сервера, командной строки и настольных приложений.
Самое замечательное в PHP то, что его можно напрямую встраивать в HTML. Нет необходимости использовать длинные команды для вывода HTML (как в C или Perl). Вот быстрый пример:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My first PHP website</title>
</head>
<body>
<?php
$cool_scripting_language = "PHP";
echo "$cool_scripting_language is a cool scripting language!";
?>
</body>
</html>
PHP будет выполняться при запросе пользователем этого сайта, а возвращаться будет только обработанный HTML-вывод. В нашем случае – сообщение “PHP – это крутой скриптовый язык!”. PHP выполняется на стороне сервера, а не в браузере (как JavaScript).
Можно спорить о том, является ли PHP полностью объектно-ориентированным языком. Тем не менее, он поддерживает стандартные объектно-ориентированные функции, такие как пространства имен, классы и объекты.
На момент написания статьи самой последней стабильной версией PHP является 8.2, но многие PHP-приложения остаются на более старых версиях.
Некоторые разработчики утверждают, что PHP умирает, но это не так. Согласно исследованию W3Techs, на PHP сейчас работает 77,4 % всех сайтов, для которых известен язык программирования на стороне сервера.
Этот скриптовый язык также используется на таких посещаемых сайтах, как Facebook, Wikipedia, Mailchimp, в различных CMS, а в прошлом даже на YouTube.
Преимущества PHP
Хорошая производительность
PHP более производителен, чем другие языки серверных сценариев, такие как ASP.NET, JSP и Python. Некоторые бенчмарки показывают, что PHP в три раза быстрее, чем Python.
PHP лучше всего справляется с задачами, связанными с веб, такими как создание HTML-страниц, обработка форм и взаимодействие с базой данных.
Напротив, для тяжелых вычислительных задач или сложных алгоритмов есть более оптимальные варианты, чем PHP.
Кросс-платформенный
PHP является платформонезависимым. Он работает на различных платформах, включая Windows, Linux, Unix и Mac. Кроме того, он совместим практически со всеми популярными веб-серверами, такими как Apache HTTP, Caddy, Nginx, LiteSpeed и так далее.
Популярный язык сценариев можно использовать и для разработки настольных приложений благодаря phpdesktop Czarek Tomczak. Эту библиотеку можно представить как Electron, но для PHP. Приложения Phpdesktop могут работать под Windows и Linux, но не под Mac OS X (пока).
Поддержка баз данных
Язык сценариев поддерживает различные базы данных, включая SQL и NoSQL. Наиболее популярной базой данных, используемой с PHP, является MySQL(стек LAMP), но ничто не мешает вам использовать PostgreSQL или любой другой тип базы данных.
Вы можете ознакомиться со всеми слоями абстракции PHP и расширениями баз данных для конкретных производителей на их официальном сайте.
Жизнеспособная экосистема
PHP стал настолько популярным, насколько он есть, благодаря своей яркой экосистеме. Многие замечательные PHP-фреймворки значительно ускоряют процесс разработки, упрощают кодовую базу и позволяют писать более чистый/стандартизированный код.
Самыми популярными PHP-фреймворками на момент написания статьи являются:
Другие потрясающие фреймворки и ресурсы смотрите на awesome-php на GitHub.
Существует также множество CMS, использующих PHP, например WordPress, Joomla, Drupal и Magento.
Легко научиться
PHP – это удобный для начинающих язык с простым синтаксисом. Его относительно легко изучить, если вы знакомы с основами всемирной паутины (WWW), HTML, CSS и JavaScript. Многие разработчики умеют писать на PHP, но лишь немногие могут писать на PHP с поддержкой и соблюдением чистых кодовых соглашений.
Ограничения PHP
Ограниченные средства отладки
PHP плохо справляется с ошибками и не имеет инструментов отладки по сравнению с другими популярными языками программирования. Если ваш проект требует расширенной отладки, вам, скорее всего, придется использовать сторонние программы, такие как Xdebug, Krumo или Kint.
Некоторые популярные IDE, такие как PhpStorm и Visual Studio, также имеют встроенные средства отладки PHP.
Свободно набранный текст
Как уже говорилось выше, PHP – это язык сценариев, а не язык программирования. Одна из наиболее распространенных характеристик скриптовых языков – свободная типизация.
Это означает, что тип переменной не нужно явно объявлять перед ее использованием. Кроме того, он может измениться в любой момент во время выполнения.
Это приводит к тому, что PHP-приложения становятся более подверженными ошибкам и сложными для отладки.
Недостатки безопасности
На протяжении многих лет приложения на PHP становились объектом различных хакерских атак. В первую очередь это связано с тем, что PHP является открытым исходным кодом и не требует больших затрат для начинающих разработчиков.
Среди наиболее известных уязвимостей PHP – инъекции SQL, межсайтовый скриптинг (XSS), подделка межсайтовых запросов (CSRF) и удаленное выполнение кода (RCE).
Помните, что эти уязвимости можно предотвратить, соблюдая правила безопасного кодирования. Обязательно проверяйте вводимые данные и никогда не выполняйте данные, предоставленные пользователем.
Ванильный PHP устарел
Ванильный PHP (то есть PHP без библиотек и фреймворков) может оказаться довольно устаревшим для создания современных приложений. Чтобы быстро создавать безопасные приложения, вам придется использовать фреймворк.
Варианты развертывания PHP
Приложения PHP могут быть развернуты на различных платформах. Наиболее распространенными облачными моделями для развертывания PHP-приложений являются:
- Инфраструктура как услуга (IaaS),
- Платформа как услуга (PaaS),
- Контейнеры как услуга (CaaS).
Лучшей облачной модели для развертывания PHP-приложений не существует. В конечном счете, выбор зависит от требований вашего проекта, бюджета и уровня абстракции.
Обычно команды разработчиков выбирают PaaS или CaaS, поскольку ими проще управлять и они не намного дороже IaaS. Давайте рассмотрим некоторых из лучших поставщиков PHP-хостинга.
Back4app Containers
Back4app Containers – это отличное предложение Containers as a Service (CaaS) от компании Back4app. Платформа позволяет разработчикам создавать, масштабировать и быстро развертывать докеризованные приложения.
Развернуть приложение на Back4app Containers так же просто, как импортировать свой репозиторий GitHub и нажать кнопку. Платформа имеет отличную систему непрерывной интеграции и развертывания, поддерживает развертывание без простоя, отслеживание развертывания в реальном времени и многое другое!
Еще одно преимущество Back4app Containers – бесплатный уровень, который отлично подходит для размещения небольших приложений. По мере расширения приложения вы можете перейти на премиум-уровень, следуя простому и предсказуемому тарифному плану.
Google Cloud Run
Google Cloud Run – это полностью автоматизированная платформа Containers as a Service (CaaS) для развертывания и масштабирования контейнерных приложений. Она стала общедоступной в 2019 году и с тех пор завоевала большую популярность.
Cloud Run относительно прост в использовании, особенно если вы знакомы с другими продуктами GCP. Среди преимуществ Cloud Run – бесплатные SSL-сертификаты, хорошая интеграция с другими решениями GCP и масштабирование до нуля.
На момент написания статьи Google предлагает 300 долларов бесплатных кредитов для новых пользователей.
Heroku
Heroku – одна из передовых платформ как сервис (PaaS). Она была создана в 2007 году и остается очень популярной по сей день.
Она предлагает широкую поддержку различных языков программирования, включая PHP, Java, Node.js, Go, Scala и Python. Платформа обладает удобным пользовательским интерфейсом, обеспечивает отличную масштабируемость и предоставляет широкий выбор дополнительных модулей.
Раньше Heroku предоставляла бесплатный тарифный план и бесплатные экземпляры PostgreSQL и Redis, но в 2022 году решила отказаться от них из-за опасений, связанных с мошенничеством и ботами. Тем не менее, Heroku остается отличной платформой для развертывания приложений.
AWS Elastic Beanstalk
AWS Elastic Beanstalk (EB) – это отличная платформа как услуга (PaaS). Это зрелая и хорошо протестированная платформа, созданная еще в 2011 году. EB поддерживает Go, Java, Node.js, PHP, Python, Ruby и позволяет развертывать докерные приложения.
Самое лучшее в Elastic Beanstalk то, что его можно комбинировать с другими решениями AWS, такими как AWS S3, AWS RDS, AWS CloudFront и так далее. Для новых клиентов AWS предлагает бесплатный уровень.
Процесс развертывания PHP
В этом разделе мы рассмотрим, как загрузить и развернуть простое веб-приложение Laravel в контейнерах Back4app.
Пререквизиты
- Базовое понимание PHP.
- Базовое понимание Docker и технологии контейнеризации.
- Composer вместе с Node.js и Docker установлен на вашей локальной машине.
Если вы не знакомы с технологией контейнеризации, прочитайте статью Что такое контейнеры?
Что такое Laravel?
Laravel – это отличный PHP-фреймворк, который позволяет быстро создавать приложения, используя выразительный и элегантный синтаксис. В результате вы получаете чистый и лаконичный код.
Фреймворк основан на архитектурном паттерне “модель-вид-контроллер” (MVC). Самое главное, что Laravel полностью бесплатен и имеет открытый исходный код.
Он был выпущен в 2011 году и на сегодняшний день является одним из самых популярных PHP-фреймворков. Благодаря своей гибкости он может быть использован для создания любого типа веб-приложений.
Преимущества Laravel
- Исполнительность и гибкость.
- Упрощает работу с базой данных (через Eloquent ORM).
- Встроенная аутентификация и авторизация.
- Интегрированные меры безопасности (CSRF, XSS).
Некоторые альтернативы Laravel включают Symfony, CodeIgniter, CakePHP и Laminas Project.
Создать приложение
Для выполнения следующих шагов вам потребуется установить Composer. Если у вас его нет, загрузите его с официального сайта.
Начните с создания нового проекта Laravel через интерфейс командной строки Composer:
$ composer create-project laravel/laravel sample-app
Не стесняйтесь заменить
sample-app
на собственное имя.
Эта команда создаст новый проект Laravel и структуру каталогов по умолчанию. Кроме того, она установит все зависимости с помощью composer install
. Выполнение команды займет не более трех минут.
После этого вы увидите следующую структуру каталогов:
sample-app/
├── app/ contains the core code of your application
│ ├── Console
│ ├── Exceptions
│ ├── Http
│ ├── Models
│ └── Providers
├── bootstrap is used to bootstrap the framework
├── config contains all your configuration files
├── database contains database factories, migrations, seeders
├── public contains your index.php and static assets (JS, images, CSS)
├── resources contains all your views and templates (along with raw assets)
├── routes is used to define all your application endpoints
├── storage contains logs and other auto-generated stuff
├── tests can be utilized for automatic testing
└── vendor contains your Composer dependencies
Затем запустите сервер разработки с помощью следующей команды:
$ php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server.
Наконец, откройте ваш любимый веб-браузер и перейдите по адресу http://localhost:8000/. Вы должны увидеть стандартную индексную страницу Laravel.
Изменить приложение
В этом разделе мы немного изменим приложение, зарегистрировав новую конечную точку API.
Как уже говорилось в предыдущем разделе, все маршруты определяются в папке routes. Папка routes содержит следующие файлы:
routes/
├── api
├── channels
├── console
└── web
Каталог web определяет маршруты конечных пользователей, api – маршруты API, console – определение консольных команд, и, наконец, channels – каналы трансляции событий.
До версии Laravel 5.3 существовал только один файл routes, расположенный по адресу app/Http/routes.php.
Перейдите в routes/api.php и зарегистрируйте новую конечную точку API следующим образом:
<?php
// routes/api.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
// new endpoint
Route::get('/', function () {
return response()->json([
'detail' => 'Back4app Containers rocks!',
]);
});
Отлично, вот и все.
Снова запустите сервер разработки (если он еще не запущен) и перейдите по адресу http://localhost:8000/. Вы все еще должны видеть стандартную страницу Laravel, но если вы перейдете к /api/, то увидите следующее сообщение:
{
"detail": "Back4app Containers rocks!"
}
Приложение Dockerize
В этом разделе мы выполним докеризацию нашего приложения Laravel с помощью Dockerfile.
Dockerfile
Dockerfile – это обычный текстовый файл, содержащий все инструкции, которые необходимо выполнить движку Docker Engine для сборки и запуска образа Docker. Инструкции обычно пишутся в верхнем регистре и сопровождаются заданным количеством аргументов. Пример:
INSTRUCTION arg1 arg2 ... argn
Создайте в корне проекта файл Dockerfile со следующим содержимым:
FROM php:8.1-apache
# Set the working directory
WORKDIR /var/www/html
# Install the necessary libraries
RUN apt-get update && apt-get install -y \
libonig-dev \
libzip-dev
# Install PHP extensions
RUN docker-php-ext-install \
mbstring \
zip
# Copy over the Laravel project
COPY . .
# Install Composer along with the dependencies
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN composer install
# Change ownership of our applications
RUN chown -R www-data:www-data /var/www/html
# Copy over the .env file and generate the app key
COPY .env .env
RUN php artisan key:generate
# Expose port 80
EXPOSE 80
# Adjusting Apache configurations
RUN a2enmod rewrite
COPY apache/apache-config.conf /etc/apache2/sites-available/000-default.conf
Этот Dockerfile использует php:8.1-apache
в качестве базового образа, устанавливает необходимые зависимости ОС и копирует проект. Затем он устанавливает PHP-зависимости через Composer, генерирует ключ Laravel, открывает порт 80 и, наконец, копирует конфигурацию Apache.
Чтобы узнать больше о Dockerfiles, ознакомьтесь со справочником Dockerfile.
.dockerignore
Мы можем использовать файл .dockerignore, чтобы уменьшить размер образа. Этот файл работает аналогично файлу .gitignore. Он позволяет опустить определенные файлы и каталоги, которые мы не хотим включать в образ.
Создайте в корне проекта файл .dockerignore со следующим содержимым:
/.phpunit.cache
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/vendor
.phpunit.result.cache
auth.json
npm-debug.log
yarn-error.log
/.fleet
/.idea
/.vscode
Не стесняйтесь изменять файл .dockerignore в соответствии с вашими потребностями.
Сборка, запуск и тестирование
Прежде чем приступить к созданию образа, убедитесь, что у вас установлен Docker:
$ docker --version
Docker version 20.10.22, build 3a2c30b
Убедившись в этом, вы можете создавать изображение:
$ docker build -t laravel-sample:1.0 .
Сводка по командам:
- Для создания образа используется
docker build
. -t laravel-sample:1.0
помечает изображение (имена изображений обычно имеют структуруname:version
)..
задает контекст сборки. В нашем случае это корень проекта.
Затем используйте только что созданный образ для создания контейнера:
$ docker run -p 80:80 --name laravel-sample-container -d laravel-sample:1.0
Сводка по командам:
docker run
используется для запуска контейнера.-p 80:80
связывает порт80
на хосте с портом80
в контейнере.--name laravel-sample-container
указывает имя контейнера.-d
запускает изображение в автономном режиме, то есть не занимая терминал.laravel-sample:1.0
указывает движку Docker, какой образ следует использовать.
Если теперь проверить запущенные контейнеры, вы должны увидеть laravel-sample-container
:
$ docker ps
CONTAINER IMAGE COMMAND CREATED PORTS
b0bfbd laravel-sample:1.0 "docker-php..." 2s ago 0.0.0.0:80->80/tcp laravel
И наконец, проверьте, видно ли вам приложение, зайдя на сайт http://localhost/ в вашем любимом веб-браузере.
Отправить на GitHub
Чтобы развернуть свое приложение в Back4app Containers, вы должны сначала загрузить свой исходный код на GitHub. Back4app Containers использует систему CI/CD, которая автоматически развертывает приложение, когда вы фиксируете свой код в определенной ветке.
Следующие шаги потребуют от вас наличия учетной записи GitHub (и установленного Git ).
Начните с перехода на сайт https://github.com и создания нового репозитория:
Далее выберите подходящее имя, а все остальное оставьте по умолчанию. Затем нажмите на кнопку “Создать хранилище”, чтобы создать хранилище:
После создания репозитория возьмите удаленный URL:
Теперь перейдите обратно в локальный проект и откройте командную строку. Чтобы отправить код на GitHub, сначала нужно инициализировать локальный Git-репозиторий следующим образом:
$ git init
Затем создайте VCS всех файлов и новый коммит:
$ git add .
$ git commit -m "init"
И наконец, введите код в пульт:
$ git push origin master
Вот и все! Если вы обновите страницу репозитория GitHub, то увидите, что все файлы были успешно перенесены в удаленный Git-репозиторий.
Развернуть приложение
Чтобы развернуть приложение на Back4app Containers, вам сначала нужно войти в систему (или зарегистрироваться, если у вас еще нет учетной записи). После входа в систему вы будете перенаправлены на страницу панели приложений.
Затем воспользуйтесь кнопкой “Создать новое приложение”, чтобы начать процесс создания приложения:
Выберите “Контейнеры как служба”, поскольку мы развертываем приложение с контейнером:
Далее подключите GitHub к аккаунту Back4app и импортируйте репозиторий, который мы создали в предыдущем шаге.
Дайте своему приложению пользовательское имя, а все остальное оставьте по умолчанию.
Чтобы создать приложение, нажмите на кнопку “Создать приложение”. Back4app автоматически извлечет исходный код из GitHub и запустит процесс создания образа docker, как только вы нажмете на кнопку. Через несколько минут статус приложения изменится на “Готово”.
После этого воспользуйтесь ссылкой слева, чтобы открыть страницу в браузере.
Вот и все!
Заключение
В заключение вы узнали о PHP, его преимуществах, недостатках и вариантах развертывания. Теперь вы знаете, как загрузить и развернуть приложение Laravel на Back4app.
Темы, которые мы рассмотрели в этом уроке, едва ли затронули поверхность фреймворка Laravel. Вы всегда можете узнать больше, изучив документацию Laravel.
Исходный код доступен в репозитории back4app-containers-php на GitHub.
Будущие шаги
- Изучите концепции архитектуры Laravel и Eloquent ORM.
- Разверните управляемую базу данных MySQL и подключите к ней свое приложение Back4app Containers.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Что такое PHP?
PHP — это популярный бесплатный язык скриптов общего назначения. Он был разработан для веба, но также может использоваться для серверного скриптинга, командной строки и настольных приложений. В настоящее время PHP поддерживает примерно 80% веба и используется многими популярными сайтами с высоким трафиком, такими как Facebook, Wikipedia, Slack и другие.
Какие преимущества у PHP?
– Хорошая производительность
– Кроссплатформенность
– Поддержка баз данных
– Активная экосистема
– Легкость в изучении
Какие недостатки у PHP?
– Ограниченные инструменты для отладки
– Слабо типизированный
– Уязвимости безопасности
– Базовый PHP устарел
Как развернуть PHP-приложение?
1. Напишите PHP-приложение.
2. Dockerизируйте приложение и протестируйте его локально.
3. Загрузите исходный код на GitHub.
4. Создайте аккаунт на Back4app Containers.
5. Импортируйте свой репозиторий GitHub и нажмите “Deploy”!