- PVSM.RU - https://www.pvsm.ru -
Всем привет! В преддверии старта курсов «Framework Laravel» [1] и «Backend-разработчик на PHP» [2], продолжаем делиться интересным материалом по теме. Поехали.
Google Cloud Run [5] является бессерверным и полностью управляется Google. Вы получаете супер-масштабирование, посекундную оплату, HTTPs URL и собственный маппинг домена.
Если вы хотите запустить stateless контейнеры, Cloud run – самый простой способ это сделать. В этой статья я подробно расскажу, как заставить ваше приложение Laravel 6 работать на Google cloud run с Continous Integration (CI).
По двум причинам, которые я опишу ниже:
Ниже приведено руководство по настройке и развертыванию Laravel 6 в Cloud Run:
1. Клонируйте Laravel или новый проект Laravel
Начните с клонирования Laravel или используйте composer или Laravel CLI, как указано в официальном руководстве по установке [7].
Я использую composer, чтобы получить последнюю версию Laravel, как показано ниже:
composer global require laravel/installer
Я запустил следующую команду, чтобы получить последнюю версию Laravel:
composer create-project --prefer-dist laravel/laravel laravel6-on-google-cloud-run
2. Сначала протестируйте локально
Затем запустите cd laravel6-on-google-cloud-run
, а потом php artisan serve
. Чтобы увидеть, что все работает, я перешел по адресу http://localhost:8000 [8] в браузере и у меня все заработало. У меня был локально установлен PHP 7.2.
3. Создайте новый репозиторий на GitHub
Создайте новый репозиторий на GitHub, как показано ниже:
4. Добавьте репозиторий и README
Теперь после того, как вы создали репозиторий, добавьте его в локальную копию Laravel и добавьте README-файл.
Для этого выполните следующие команды в консоли:
git init
code . # I used VS code to change the readme
git add readme.md
git commit -m "Initial commit -- App Readme"
git remote add origin git@github.com:geshan/laravel6-on-google-cloud-run.git
git push -u origin master
После выполнения команды в моем репозитории на GitHub оказалось следующее:
5. Добавьте полный Laravel, откройте Pull Request
Теперь давайте отправим все приложение как pull request в репозиторий GitHub, выполнив следующие команды:
После этого откройте Pull Request в репозитории, подобно этому [9]. Возможно, вы думаете, зачем мне нужен pull request, если я работаю над проектом один?
Ну, что ж, я считаю, что нужно всегда соблюдать системный подход, даже если вы работаете один.
После этого смерджите ваш pull request.
6. Настройка тестов с GitHub actions [10]
Не самая веселая часть. После того как вы смерджите свой pull request, GitHub будет знать, что это проект Laravel. Нажмите на вкладку Actions на странице своего репозитория и вы увидите что-то вроде того, что изображено ниже:
Щёлкните Set up this workflow под Laravel, а на следующей странице нажмите кнопку Start commit в правом верхнем углу. После этого добавьте сообщение коммита, как показано ниже и нажмите Commit new file.
Вот так у вас появилась ваша установка CI. Тесты Laravel по умолчанию теперь будут запускаться при каждом git push. Разве сложно?
Спасибо Великому Разуму GitHub!
Больше никакого создания .myCIname.yml
файлов!
7. Добавьте docker и выполните docker-compose для запуска приложения локально
А теперь давайте добавим docker и сделаем docker-compose, чтобы запустить приложение локально без PHP или artisan serve.
Эта часть руководства вдохновлена статьей Laravel on Google Cloud Run [11] от Nicolas.
Если вы хотите узнать больше о Docker [12] и Laravel, обратитесь к этой статье [13].
Для начала выполните следующие команды, чтобы обновить ветку master, так как мы добавили новый workflow-файл с помощью интерфейса GitHub:
git checkout master
git fetch
git pull --rebase origin master # as we added the workflow file from github interface
git checkout -b docker
Добавьте ключ в файл .env.example
, скопируйте его из файла .env
, как показано ниже:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:DJkdj8L5Di3rUkUOwmBFCrr5dsIYU/s7s+W52ClI4AA=
APP_DEBUG=true
APP_URL=http://localhost
Поскольку это всего лишь демо, так делать можно, но в реальных приложениях будьте осторожны с секретами. Для production-ready приложений, отключите дебаг и другие вещи, связанные с разработкой.
Добавьте такой Dockerfile в корень проекта:
FROM composer:1.9.0 as build
WORKDIR /app
COPY . /app
RUN composer global require hirak/prestissimo && composer install
FROM php:7.3-apache-stretch
RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 8080
COPY --from=build /app /var/www/
COPY docker/000-default.conf /etc/apache2/sites-available/000-default.conf
COPY .env.example /var/www/.env
RUN chmod 777 -R /var/www/storage/ &&
echo "Listen 8080" >> /etc/apache2/ports.conf &&
chown -R www-data:www-data /var/www/ &&
a2enmod rewrite
Добавьте следующий файл в docker/000-default.conf
:
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/public/
<Directory /var/www/>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
После этого добавьте docker-compose.yml
:
version: '3'
services:
app:
build:
context: ./
volumes:
- .:/var/www
ports:
- "8080:8080"
environment:
- APP_ENV=local
Сведем все к главному.
Если вы пытаетесь понять все здесь написанное, это может быть исчерпывающе, поэтому давайте я расскажу вам о главных частях:
000-default.conf
, чтобы это сконфигурировать. http://localhost:8080
, в этом случае вы поймете, что Laravel 6 запущен локально в Docker.
Ниже вы видите выходные данные после работы docker-compose up
до самого конца:
Если у вас Laravel заработал с Docker, откройте новый pull-request (например, такой [14]) и добавьте Docker в свой проект.
Следующие команды я запустил в корне проекта перед открытием Pull Request:
git status
Вы получите что-то в таком роде:
On branch docker
Untracked files:
(use "git add <file>..." to include in what will be committed)
Dockerfile
docker-compose.yml
docker/
nothing added to commit but untracked files present (use "git add" to track)
И запустите следующие команды:
git add .
git commit -m "Add docker and docker compose"
git push origin docker
В качестве бонуса они запустят тест Laravel по умолчанию после push, как видно ниже:
Только владелец репозитория имеет доступ к вкладке Actions, поэтому другим людям не обязательно знать результаты ваших тестовых сборок
8. Добавляем деплой в Google Cloud button [15].
Теперь давайте развернем эту установку Laravel в Google Cloud Run простым способом. На данном этапе считается, что вы смерджили свой pull-request из ветки docker.
Давайте выполним следующие команды:
git checkout master
git fetch
git pull --rebase origin master
git checkout -b cloud-run-button
Добавьте следующее в свой файл readme.md
:
### Run on Google cloud run
[](https://console.cloud.google.com/cloudshell/editor?shellonly=true&cloudshell;_image=gcr.io/cloudrun/button&cloudshell;_git_repo=https://github.com/geshan/laravel6-on-google-cloud-run.git)
Внимательно замените последнюю часть HTTPs URL вашего репозитория, например, если ваш репозиторий находится по адресу [16] он изменится на [17], затем сделайте коммит и push.
Ваш Pull Request должен выглядеть примерно так [18].
9. Деплой на Google Cloud Run
После мерджа вашего pull request перейдите на страницу репозитория и нажмите кнопку Run on Google Cloud.
После этого, если вы вошли в аккаунт Google и у вас есть Google cloud setup с одним проектом, нажмите кнопку «Продолжить». Возможно, вам придется немного подождать, после этого:
Если все идет хорошо, то на Google Cloud Shell вы увидите HTTPs URL, на который вы можете нажать, чтобы увидеть, что ваше приложение на Laravel работает, как показано ниже:
То, что случилось выше это:
10. Ура! Ваше приложение работает!
После того, как вы получите URL, вы увидите ваше приложение, работающее на Google Cloud Run, как показано ниже:
Если вы хотите развернуть другую версию, вы можете изменить свой pull request в master и снова нажать кнопку для деплоя.
Цены на Google Cloud Run очень щедрые. Вы можете запустить любое приложение в контейнере или веб-приложение в Google Cloud Run.
Я запускал домашний проект, который получал 1 запрос в минуту, и мне не нужно было ничего платить.
Под капотом он использует Knative и Kubernetes. Он также может быть запущен в вашем кластере Kubernetes, но кто захочет управлять кластером K8s, если можно просто сделать push и поучить масштабируемое бессерверное полностью управляемое приложение
Чтобы запустить Laravel 6 на Google Cloud Run быстро, следуйте следующим шагам:
Надеюсь, запуск приложения Laravel на Google cloud run оказался для вас простой задачей. Вы даже смогли запустить тесты с помощью Github actions. Надеюсь, эта статья оказалась для вас полезной.
Чтобы применить подход CI/CD, вы можете прочитать эту статью [21], в ней рассказывается об использовании сборки в облаке. Поскольку один и тот же контейнер работает локально и на продакшене (Google Cloud Run), вам не нужно изучать новый фреймворк, чтобы перейти на бессерверную архитектуру.
Любое веб-приложение в контейнере может запуститься на Google Cloud Run, поэтому я считаю его отличным сервисом!
На этом все, а мы напоминаем о том, что уже 21 и 22 января все желающие могут посетить бесплатный онлайн-интенсив [2], в рамках которого мы создадим Telegram-бота для заказа кофе в заведении и оплаты онлайн. Записаться на второй день интенсива можно тут [22].
Автор: MaxRokatansky
Источник [23]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/343907
Ссылки в тексте:
[1] «Framework Laravel»: https://otus.pw/lkbE/
[2] «Backend-разработчик на PHP»: https://otus.pw/dUJP/
[3] резко возросла: https://trends.google.com/trends/explore?date=2014-10-22%202019-10-21%5E_%5Eamp%5E_%5Eq=laravel,symfony
[4] интересных функций: https://laracasts.com/series/whats-new-in-laravel-6
[5] Google Cloud Run: https://cloud.google.com/run/
[6] кредит в 300$: https://cloud.google.com/free/
[7] установке: https://laravel.com/docs/5.8/installation
[8] http://localhost:8000: http://habr.com/ru/users/rodinvv
[9] этому: https://github.com/geshan/laravel6-on-google-cloud-run/pull/1
[10] GitHub actions: https://github.com/features/actions
[11] Google Cloud Run: https://nsirap.com/posts/010-laravel-on-google-cloud-run/
[12] Docker: https://www.docker.com/
[13] этой статье: https://geshan.com.np/blog/2015/10/getting-started-with-laravel-mariadb-mysql-docker/
[14] такой: https://github.com/geshan/laravel6-on-google-cloud-run/pull/2/files
[15] Google Cloud button: https://github.com/GoogleCloudPlatform/cloud-run-button
[16] адресу: https://github.com/ghaleroshan/laravel6-on-google-cloud-run
[17] на: https://github.com/ghaleroshan/laravel6-on-google-cloud-run.git
[18] так: https://github.com/geshan/laravel6-on-google-cloud-run/pull/3/files
[19] Google Cloud: https://console.cloud.google.com/
[20] https://github.com/geshan/laravel6-on-google-cloud-run: https://github.com/geshan/laravel6-on-google-cloud-run
[21] статью: https://medium.com/google-cloud/simplifying-continuous-deployment-to-cloud-run-with-cloud-build-including-custom-domain-setup-ssl-22d23bed5cd6
[22] можно тут: https://otus.pw/tOe7b/
[23] Источник: https://habr.com/ru/post/484738/?utm_campaign=484738&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.