在Azure上部署Ghost和Node的教训

作为一名开发者,有许多密码用于各种服务,但有时也会因为各种原因忘记或输错密码。当意识到自己被锁在了自己的账户外,本以为这没什么大不了的,可以简单地发送一个"重置密码"的邮件然后继续。这通常是可行的,除非忘记了配置Ghost的邮件服务来实现这一点。

所以被困在了这里,被锁在了自己的博客外面,无法重置密码。想,为什么不趁这个机会升级Ghost到最新版本,并尝试通过数据库解锁自己呢?

在Azure上更新Ghost

如果还没有在Azure上使用过Ghost,开始使用它非常简单。Felix Rieseberg实际上有一个名为Ghost-Azure的GitHub项目,它基本上是一键部署到云的方法:

如果通过这种方式部署到Azure,会发现通过Azure门户的同步按钮可以完全管理Ghost部署的同步:

点击同步将针对当前的Ghost-Azure仓库,并为处理升级过程。非常简单,对吧?但如果这不起作用呢?

显然,对于大多数人来说,之前的同步方法效果很好。但遗憾的是,不属于这个独家俱乐部。在重启Web服务器并尝试访问网站时,遇到了一个空白屏幕:

这可不好。幸运的是,开发者工具告诉抛出了一个通用的500错误,这总是非常有帮助的。所以需要深入挖掘。

遇见Kudu

在排除500错误时,手头并没有太多信息。由于网站运行在Azure上,不能简单地远程桌面进入它并查看事件查看器或堆栈跟踪。

幸运的是,Azure站点提供了一个名为Kudu的服务。Kudu是Azure上基于Git部署的引擎,但它做了更多:

Kudu可以告诉几乎所有需要知道的关于应用程序的信息,并提供了许多伟大和有用的功能:

  • 调试控制台 - Web门户提供了一个普通的和Powershell驱动的控制台,允许在应用程序中执行命令,运行通过FTP上传到网站的安装程序以及需要从控制台做的任何其他事情。
  • 环境信息 - Kudu将为提供关于网站的几乎所有信息。连接字符串、路径、HTTP头、服务器变量、系统和架构信息等。
  • 进程资源管理器 - 还有一个功能齐全的进程资源管理器和分析器,允许查看应用程序上运行的所有当前进程。CPU使用率、线程、内存分配等。
  • 错误日志和转储 - 提供对应用程序日志、诊断转储等的完全访问。这对于找出幕后可能出错的东西以及为提供修复的路径非常有用。

所有这些都是通过Azure网站自动为提供的。可以通过以下URL访问自己的网站:

https://{your-azure-site-name}.scm.azurewebsites.net/

探索Kudu的日志

在Kudu中挖掘了一段时间后,试图找出到底出了什么问题,遇到了以下行:

$ npm install sqlite3 --save

错误:找不到模块 'D:\home\site\wwwroot\node_modules\sqlite3\lib\binding\node-v46-win32-> ia32\node_sqlite3.node'

解决这个谜题的第一步是意识到实际的node-v46-win32-ia32文件夹在项目文件夹中根本不存在。

假设更新版本的Node正在寻找与该版本相对应的SQLite依赖项。所以决定通过更新位于wwwroot目录中的package.json文件来明确告诉Node使用哪个版本:

"engines": { "node": "0.10.40 || ~0.12.0 || ^4.2.0", }

这将迫使Node检查与现有的位置~\sqlite3\lib\binding\node-v11-win32-ia32相匹配的更适当的SQLite模块版本,这个位置实际上是存在的。

仍然被锁定

好消息是,网站实际上正在运行,坏消息是,仍然无法登录。

所以决定将ghost.db数据库下载到本地机器上,并使用DB Browser for SQLite来深入了解数据是什么样子的。

幸运的是,Ghost让这变得非常容易理解,只需要查看users表:

如所见,status字段设置为locked。这可不好。在查看了Ghost的文档之后,似乎一个快速的SQL查询可以修复这个问题:

UPDATE users SET locked = 'active'

在做出这个改变后,通过FTP上传了这个数据库副本并重新启动了网站,发现一切都按预期工作。

在将近两个月后,终于能够登录自己的博客了。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485