Products
GG网络技术分享 2025-03-18 16:13 1
摘要: 众所周知,PHP 是 Web 编程最流行的编程语言,如果有人告诉你,有 Serverless 的 PHP WEB 开发新模式,你是不是会感到好奇和兴奋?本文以部署 WordPress 工程在函数计算环境中为例,向您讲解如何使用阿里云函数计算快速构建或移植基于 PHP 框架开发的 Web, 体验 serverless 开发web 的新姿势。
这篇文章适合所有的PHP开发新手、老鸟以及想准备学习开发 PHP 的程序猿。众所周知,PHP 是 Web 编程最流行的编程语言,如果有人告诉你,有 Serverless 的 PHP WEB 开发新模式,你是不是会感到好奇和兴奋?在介绍 Serverless Web 开发新模式之前,我们先了解下将 PHP Web Serverless 化的好处:
本文以部署 WordPress 工程在函数计算环境中为例,向您讲解如何使用阿里云函数计算快速构建或移植基于 PHP 框架开发的 Web ,通过本文,您将会了解以下内容:
在本教程中,我们讲解如何利用函数计算一步一步来构建 Web 的 Server 端,该案例是把一个 WordPress 部署到函数计算,本文旨在展示函数计算做 Web Backend 能力,具体表现为以下几点:
案例体验入口:
正常来说,用户开发 Server 端服务,常常面临开发效率,运维成本高,机器资源弹性伸缩等痛点,而使用 Serverless 架构可以很好的解决上述问题。下面是传统架构和 Serverless 架构的对比:
阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询,性能监控,报警等功能。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。
从上面的示例图中,整体架构十分简单明了, 用 FC 替代了 Web 服务器,但是换来的是免运维,弹性扩容,按需付费等一系列优点
函数计算运行 PHP 框架原理
传统服务器 PHP 运行原理
从上面原理示意图我们可以看出,Web 服务器根据conf 中 location将 PHP 脚本交给 php-fpm 去解析,然后将解析后的结果返回给 client 端
FC 驱动 PHP 工程原理
<?php
use RingCentral\\Psr7\\Response;
function startsWith($haystack, $needle) {
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
function handler($request, $context): Response{
$uri = $request->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);
}
}
其中函数计算为用户提供了一个 $GLOBALS[\'fcPhpCgiProxy\'] 对象用来和 php-fpm 进行交互,对
PHP 工程中的 php 文件进行解析,该对象提供了两个重要的接口:
requestPhpCgi($request, $docRoot, $phpFile = \"index.php\", $fastCgiParams = [], $options = [])
准备工作
由于函数运行时的 IP 是不固定的,您需要设置 RDS 允许所有 IP 访问。但是这样会有风险,不建议这样做。在本教程中,我们将创建一个 RDS MYSQL 数据库,并将它置于一个专有网络 VPC 环境内,函数计算支持 VPC 功能,用户可以通过授权的方式安全地访问 VPC 中的资源(同时包含本示例中的 NAS )。
1. 创建 RDS MYSQL 数据库, 配置 VPC , 具体参考通过 VPC 访问 RDS 实例
2. 创建 NAS 挂接点,配置 VPC (注意:这里跟 RDS 采用相同的 VPC), 具体参考函数计算nas使用示例
3. 可选操作,在准备函数的 region 创建日志,用于函数的调试, 具体参考函数计算配置日志服务
创建函数
1. 创建 Service (假设是 share ), 配置准备 vpc config , nas config 和日志服务,比如案例体验的Service配置如下图:
2. 下载 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 目录。
3. 创建入口函数 wp-func (对应上面步骤中的 /mnt/www/2016-08-15/proxy/share/wp-func ), 给函数设置 http trigger ,类型为 anonymous , 类型都选上。
<?php
use RingCentral\\Psr7\\Response;
function startsWith($haystack, $needle) {
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
function handler($request, $context): Response{
$uri = $request->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);
}
}
4. 直接通过 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 Web 设置自定义域名
未完待更新...
函数计算有如下优势:
除了上面所列的优势,FC 可以做为 Web Backend,只需要编写一个函数实现传统 Web 服务器中的 conf 中的逻辑,就可以将一个完整的 Web 工程迁移到 FC ,从而从传统的 Web 网站运维,监控等繁琐的事务中解放出来。
作者:rsong
阿里云轻量应用服务器一键部署wordpress功能很强大,很多新手在使用过程中会遇到无法登陆的情况,那么阿里云轻量应用服务器一键部署wordpress后密码无法登陆的解决方法是什么?我们一起探讨一下。
一、找回 wordpress 登录密码失败过程
阿里云轻量应用服务器提供了找回 wordpress密码的命令如下:
sudo grep wordpress admin passwd
不过在 wordpress后台显示:为用户名 admin指定的密码不正确。
因为对方是新手也讲不清楚问题到底出在哪里了,只知道图方便用一键部署 wordpress建站后就这样了。新手最怕连续出现问题,这时候就有种丈二和尚摸不着头脑的感觉,不知道从哪里下手解决,很苦恼。同时命令行的部署方式对新手很不友好,后期出现问题维护起来也很麻烦。
二、重置Wordpress密码办法
网友试过在 wordpress后台用邮件找回密码,但是提示:电子邮件未能发送,可能原因您的主机禁用了mail()函数。这时候别怕还有别的方法。
直接在 phpmyadmin中修改登录密码。
1、进入PhpMyAdmin管理界面。
2、进入后点击 wp_users 。
3、点击修改用户参数。
注意:user_login是登录名,默认的是admin,如果你之前改过用户名,显示的就是其它的。
4、把user_pass值改成:5d41402abc4b2a76b9719d911017c592,保存。这密码是MD5加密后的数值,这样密码就变成了 hello。
5、再次登录 wordpress后台,用账号密码登录成功。
6、为了提高网站安全性,记得在后台把 hello 修改成复杂的密码。
进入用户 > 所有用户,找到 admin,点击下面的 编辑 按钮。找到 账户管理 部分,点击 生成密码,按照提示输入密码,并点击 更新个人资料。
以上就是小编简单分析阿里云轻量应用服务器一键部署wordpress后密码无法登陆的解决方法,希望能够帮助到大家。
Demand feedback