Автор оригинала: David Wong.
Аннотация: Как мы все знаем, PHP является самым популярным языком программирования веб-программирования. Если кто-то скажет вам, что существует новый режим бессерверной веб-разработки PHP, вам будет любопытно и интересно? Принимая развертывание проекта WordPress в функции вычислительная среда al в качестве примера в этой статье показано, как использовать вычисления функций Aliyun для быстрого создания или переноса сети на основе PHP-фреймворка и ознакомления с новым подходом к веб-разработке серверов.
Предисловие
Эта статья подходит для всех новых разработчиков PHP, старых птиц и обезьян, которые хотят научиться разрабатывать PHP. Как мы все знаем, PHP является самым популярным языком программирования веб-программирования. Если кто-то скажет вам, что существует новый режим бессерверной веб-разработки PHP, вам будет любопытно и интересно? Прежде чем представить новую модель бессерверной веб-разработки, давайте рассмотрим преимущества создания веб-сервера PHP без сервера:
- Нет необходимости приобретать инфраструктуру, такую как серверы, и управлять ею
- Упругое расширение, динамическое расширение
- Не требует эксплуатации и технического обслуживания, что значительно снижает затраты на рабочую силу
- Оплата по требованию, низкие финансовые затраты
В этой статье рассматривается развертывание проекта WordPress в среде функциональных вычислений в качестве примера, чтобы показать вам, как использовать функциональные вычисления Aliyun для быстрого создания или переноса веб-страниц на основе PHP-фреймворка. Из этой статьи вы узнаете следующее:
- Обзор дел
- Традиционная серверная архитектура ПРОТИВ Бессерверной архитектуры
- Объяснение Бессерверной Архитектуры
- Вычисление функции выполняется по принципу PHP-фреймворка
- Этапы настройки разработки кейса
- Веб-настройка FC Пользовательское Доменное имя
Обзор дел
В этом руководстве мы объясним, как шаг за шагом использовать вычисления функций для создания веб-сервера. Этот случай заключается в развертывании WordPress для работы с вычислениями. Эта статья направлена на то, чтобы показать способность функциональных вычислений выполнять веб-серверную часть. Ниже приведены конкретные проявления:
- Стоимость переноса идеальной PHP – системы в FC невелика
- FC открывает функцию VPC собственной сети. Функции пользователя могут настраивать облачные ресурсы для доступа к собственной сети, такой как MYSQL, в данном случае NAS.
Запись опыта работы с кейсами:
- Адрес для получения опыта: http://1986114430573743.cn-ha…
- Учетная запись: wp-тест
- Пароль: wp-pwd
Традиционная серверная архитектура ПРОТИВ Бессерверной архитектуры
Как правило, пользователи часто сталкиваются с проблемами эффективности разработки, высокой стоимостью эксплуатации и обслуживания, а также гибким масштабированием ресурсов машины при разработке серверных сервисов. Бессерверная архитектура может очень хорошо решить эти проблемы. Ниже приведено сравнение между традиционной архитектурой и бессерверной архитектурой:
Функциональные вычисления Aliyun-это полностью управляемая вычислительная служба, управляемая событиями. При использовании функциональных вычислений вам не нужно управлять инфраструктурой, такой как серверы, просто напишите код и загрузите его. Функциональные вычисления подготовят для вас вычислительные ресурсы, выполнят ваш код гибким и надежным способом и предоставят такие функции, как запрос журнала, мониторинг производительности, оповещение и так далее. С помощью функциональных вычислений вы можете быстро создавать приложения и службы любого типа без управления и обслуживания.
Объяснение Бессерверной Архитектуры
Из приведенного выше примера диаграммы видно, что общая архитектура очень проста и понятна, заменяя веб-сервер на FC, но в обмен на ряд преимуществ, таких как простота в эксплуатации, гибкое расширение, оплата по требованию и т.д.
Вычисление функции выполняется по принципу PHP-фреймворка
Принцип работы традиционного сервера PHP
- Принципиальная схема
- Простой nginx conf
Из приведенной выше принципиальной схемы мы видим, что веб-сервер передает PHP-скрипт php-fpm в соответствии с местоположением в conf для его анализа, а затем возвращает обработанный результат на клиентский сервер.
Принципы разработки FC-движка PHP
- Среда выполнения функциональных вычислений эквивалентна Apache/Nginx традиционных веб – сервисов
- Пользовательские функции эквивалентны местоположениям в conf, реализующим Apache/Nginx
- Пользователь развертывает веб-сайт на NAS, а затем подключает NAS к среде выполнения функции, такой как каталог/MNT/www, в следующем коде
- Для WordPress код функции ввода настолько прост, я предлагаю вам сначала разобраться в среде выполнения PHP
- Функция ввода PHP
- Среда выполнения PHP
getAttribute("requestURI");
$uriArr = explode("?", $uri);
// default php / or /wp-admin/
if (preg_match('#/$#', $uriArr[0]) && !(strpos($uri, '.php'))) {
$uriArr[0] .= "index.php";
$uri = implode($uriArr);
if (startsWith($uri, "/2016-08-15/proxy/share/wp-func/wp-admin/")) {
// wordpress admin entrypoint
$request = $request->withAttribute("requestURI", $uri);
}
}
$proxy = $GLOBALS['fcPhpCgiProxy'];
$root_dir = '/mnt/www';
//php script
if (preg_match('#\.php.*#', $uri)) {
$format = '%s.%s.fc.aliyuncs.com';
$host = sprintf($format, $context['accountId'], $context['region']); // maybe user define domain
$resp = $proxy->requestPhpCgi($request, $root_dir, "index.php",
['SERVER_NAME' => $host, 'SERVER_PORT' => '80', 'HTTP_HOST' => $host],
['debug_show_cgi_params' => false, 'readWriteTimeout' => 15000]
);
return $resp;
} else {
// static files, js, css, jpg ...
$filename = $root_dir . explode("?", $uri)[0];
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$headers = [
'Content-Type' => $proxy->getMimeType($filename),
'Cache-Control' => "max-age=8640000",
'Accept-Ranges' => 'bytes',
];
return new Response(200, $headers, $contents);
}
}Вычисление функций предоставляет пользователям объект $GLOBAL [‘fc Php Cgi Proxy’] для взаимодействия с php-fpm и анализа PHP-файлов в PHP-инженерии. Объект предоставляет два важных интерфейса:
- запрос Php Cgi
requestPhpCgi($request, $docRoot, $phpFile = "index.php", $fastCgiParams = [], $options = [])
- $запрос: соответствует параметрам записи PHP HTTP invoke.
- DocRoot: Корневой каталог веб-проекта
- Php Файл: Параметр по умолчанию для сращивания SCRIPT_FILENAME в параметрах CGI
- Параметры FastCGI: Вычисление функции внутренне пытается построить параметры CGI по умолчанию для вас на основе запроса$. Но если вы этого не хотите, вы можете переопределить некоторые параметры с помощью параметров $FastCGI (ссылка: cgi)
- Параметры: тип массива, необязательный параметр, значение debug_show_cgi_params равно true, которое выводит PHP для каждого запроса Параметр CGI для синтаксического анализа по умолчанию равен false; тайм-аут чтения и записи по умолчанию устанавливает время синтаксического анализа в 5 секунд
Этапы настройки разработки кейса
Подготовка
Поскольку IP-адрес среды выполнения функции не является фиксированным, вам необходимо установить RDS, чтобы разрешить доступ по всем IP-адресам. Но есть риск, и это не рекомендуется. В этом уроке мы создадим базу данных RDS MYSQL и разместим ее в собственной сетевой среде VPC. Вычисление функций поддерживает функции VPC. Пользователи могут безопасно получать доступ к ресурсам в VPC с помощью авторизации (включая NAS в этом примере).
- Создайте базу данных MYSQL RDS, настройте VPC, обратитесь к доступу к экземпляру RDS через VPC
- Создайте точку подключения NAS, настройте VPC (Примечание: Здесь используется тот же VPC, что и RDS), и вычислите пример NAS с использованием определенной справочной функции.
- Необязательная операция для создания журнала в области функции подготовки к отладке функций, расчет конкретной справочной функции для настройки службы журналов
Создать функцию
- Создайте службу (при условии общего доступа), настройте конфигурацию VPC подготовки, конфигурацию NAS и службы журналов, такие как Конфигурация службы для работы с обращениями, как показано ниже:
- Загрузите WordPress и переместите проект WordPress на NAS с указанной выше конфигурацией. www представляет корневой каталог проекта WordPress
|-- index.py |-- www
Index.py код:
# -*- coding: utf-8 -*-
import logging
import os
file = "/mnt/www/2016-08-15/proxy/share/wp-func"
def mkdir(path):
folder = os.path.exists(path)
if not folder:
os.makedirs(path)
def lsDir():
os.system("ls -ll /mnt/www/2016-08-15/proxy/share/wp-func/")
def handler(event, context):
mkdir(file)
os.system("cp -r /code/www/* /mnt/www/2016-08-15/proxy/share/wp-func/")
print(lsDir())
return 'ok'Создайте функцию move-wp-nas на основе приведенного выше кода, выполните эту функцию и переместите пакет проекта WordPress в каталог NAS/mnt/www/2016-08-15/proxy/share/wp-func.
Почему Q1: создал такой странный каталог/2016-08-15/proxy/share/wp-func?
Ответ: Из-за триггера HTTP формат доступа к функциям выглядит следующим образом: http:/${account_id}. ${регион} fc.aliyuncs.com/2016-08-15/proxy/$(имя пользователя}/{имя функции}/. Для того, чтобы убедиться, что при переходе с одной страницы на другую вы можете автоматически вывести/2016-08-15/прокси/$(имя_службы}/{имя_функции}/. Нам нужно создать такой каталог и задать параметры, связанные с C. Число достигает правильной задачи автоматического перехода в рамках PHP.
Вопрос 2: Можете ли вы избежать такого странного каталога, как/2016-08-15/proxy/share/wp-func?
Ответ: Да, и так далее, функция вычисления пользовательского доменного имени онлайн, может решить эту проблему, конкретная операция будет обновлена в этой статье.
- Создайте функцию входа wp-func (соответствующую/mnt/www/2016-08-15/proxy/share/wp-func на приведенном выше шаге), установите триггер HTTP для функции, введите анонимный, выберите тип.
getAttribute("requestURI");
$uriArr = explode("?", $uri);
// default php / or /wp-admin/
if (preg_match('#/$#', $uriArr[0]) && !(strpos($uri, '.php'))) {
$uriArr[0] .= "index.php";
$uri = implode($uriArr);
if (startsWith($uri, "/2016-08-15/proxy/share/wp-func/wp-admin/")) {
// wordpress admin entrypoint
$request = $request->withAttribute("requestURI", $uri);
}
}
$proxy = $GLOBALS['fcPhpCgiProxy'];
$root_dir = '/mnt/www';
//php script
if (preg_match('#\.php.*#', $uri)) {
$format = '%s.%s.fc.aliyuncs.com';
$host = sprintf($format, $context['accountId'], $context['region']); // maybe user define domain
$resp = $proxy->requestPhpCgi($request, $root_dir, "index.php",
['SERVER_NAME' => $host, 'SERVER_PORT' => '80', 'HTTP_HOST' => $host],
['debug_show_cgi_params' => false, 'readWriteTimeout' => 15000]
);
return $resp;
} else {
// static files, js, css, jpg ...
$filename = $root_dir . explode("?", $uri)[0];
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$headers = [
'Content-Type' => $proxy->getMimeType($filename),
'Cache-Control' => "max-age=8640000",
'Accept-Ranges' => 'bytes',
];
return new Response(200, $headers, $contents);
}
}- Посетите домашнюю страницу непосредственно по URL-адресу, при первом посещении вам будет предложено установить WordPress, базу данных, администратора и другую соответствующую информацию, подготовленную перед процессом установки. После успешной установки вы можете успешно посетить домашнюю страницу и войти в фоновый режим для управления сайтом WordPress.
http://${account_id}.${region}.fc.aliyuncs.com/2016-08-15/proxy/$(seevice_name}/{function_name}/
for example:
http://1986114430573743.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/share/wp-func/Веб-настройка FC Пользовательское Доменное имя
Незавершенное обновление…
резюме
Вычисление функций имеет следующие преимущества:
- Нет необходимости приобретать инфраструктуру, такую как серверы, и управлять ею
- Сосредоточьтесь на разработке бизнес-логики
- Обеспечьте функции запроса журнала, мониторинга производительности и сигнализации для быстрого устранения неполадок
- Запуск приложений для реагирования на запросы пользователей в соответствии с событиями
- Миллисекундное эластичное расширение, быстрое расширение дна, чтобы справиться с пиковым давлением
- Платите по требованию. Он оплачивает только фактические вычислительные ресурсы и подходит для сценариев доступа пользователей с очевидными пиками и спадами.
В дополнение к перечисленным выше преимуществам, FC можно использовать в качестве веб-сервера. Ему нужно только написать функцию для реализации логики в conf на традиционном веб-сервере, а затем он может перенести полный веб-проект в FC, тем самым освободив себя от утомительных задач традиционной работы веб-сайта, обслуживания, мониторинга и так далее.
Автор этой статьи:песня
Прочитайте исходный текст
Эта статья является оригинальным контентом сообщества Юньци, который не может быть воспроизведен без разрешения.