* [https://www.fordes.top/posts/tutorials/typecho-vercel/ - fordes123's Blog](https://www.fordes.top/posts/tutorials/typecho-vercel/)
* 记录本身, 即已是反抗
* 2024-03-22 07:26:00
Typecho 是一个基于PHP的轻量博客系统,小巧且具备良好的可扩展性。作为动态博客其优点自不必多说,但是却需要部署在服务器, 没法像大部分静态博客一样直接托管在 GitHub Pages 上,运维成本不低。
不过还好,我们还有 Vercel ~
准备工作
既然文章叫做 “Vercel 托管 Typecho” ,那么我们首先就需要一个 Github 账号 👻
fork Typecho,然后 clone 到本地对其进行修改。
创建路由入口
在项目根目录下新建 api
目录,然后在该目录中新建 index.php
文件,内容如下:
<?php
$file= __DIR__ . '/..'.$_SERVER["PHP_SELF"];
if(file_exists($file))
{
return false;
}
else
{
require_once __DIR__ . '/../index.php';
}
添加 Vercel 配置文件
在项目根目录下新建 vercel.json
文件,内容如下:
{
"functions": {
"api/index.php": {
"runtime": "vercel-php@0.6.0"
}
},
"routes": [
{ "src": "/(.*)", "dest": "/api/index.php" }
]
}
这里面 vercel-php@0.6.0
是 Vercel 提供的 PHP 运行环境,如果你需要使用其他版本的 PHP, 可以参考 vercel-php 文档。
移除 上传目录写入检测 相关代码
部署在 Vercel 上的项目是无法写入文件的,所以我们需要移除 Typecho 中的上传目录写入检测相关代码。
全局搜索 “上传目录无法写入” ,然后将相关代码注释掉即可。 以 Typecho 1.2.1 为例,分别有 install.php
773-775 行, 和 Upgrade.php
352-363 行。
创建 Typecho 配置文件
在项目根目录下创建 config.inc.php
文件,内容如下:
<?php
/**
* Typecho Blog Platform
*
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org)
* @license GNU General Public License 2.0
* @version $Id$
*/
/** 开启https */
define('__TYPECHO_SECURE__',true);
/** 定义根目录 */
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));
/** 定义插件目录(相对路径) */
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');
/** 定义模板目录(相对路径) */
define('__TYPECHO_THEME_DIR__', '/usr/themes');
/** 后台路径(相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');
/** 设置包含路径 */
@set_include_path(get_include_path() . PATH_SEPARATOR .
__TYPECHO_ROOT_DIR__ . '/var' . PATH_SEPARATOR .
__TYPECHO_ROOT_DIR__ . __TYPECHO_PLUGIN_DIR__);
/** 载入API支持 */
require_once 'Typecho/Common.php';
/** 程序初始化 */
Typecho_Common::init();
/** 定义数据库参数 */
$db = new Typecho_Db('数据库驱动名称: Pdo_Mysql 或 Pdo_Pgsql', '表前缀 如: myblog_');
$db->addServer(array (
'host' => '数据库地址',
'user' => '数据库用户名',
'password' => '数据库密码',
'charset' => '数据库编码, 推荐:utf8mb4',
'port' => 数据库端口,
'database' => '数据库名',
'engine' => '数据库引擎, 对于MySQL为 InnoDB 或 MyISAM',
'sslCa' => '数据库SSL证书路径',
'sslVerify' => 启用SSL证书验证 true 或 false,
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);
其中 需要关注的只有 定义数据库参数
部分,根据自己的数据库信息进行修改,替换掉提示的内容即可,注意保留引号。 不需要的部分可以直接删除,比如 sslCa
、sslVerify
导入主题
将想要使用的主题文件夹放入 /usr/themes
目录下。
如果你使用的是开源主题,可以将其直接添加为子模块,以便于更新,终端执行以下命令:
git submodule add <主题仓库地址> ./usr/themes/<主题文件夹名>
# 例: git submodule add https://github.com/fordes123/gleaner .\usr\themes\gleaner
完成以上步骤后,提交修改并推送到 Github。
注意: 建议将仓库设为 私有,如果非要公开仓库,建议将 config.inc.php
文件中的数据库密码等敏感信息以环境变量的形式保存, 然后在 Vercel 中进行配置。
部署到 Vercel
登入 Vercel 后,导入上步骤中的仓库,如使用了环境变量可在此时配置进去,最后点击部署即可。
部署完成后,Vercel 会自动为你生成一个域名,域名在后面加上 /install.php
并访问,即可进入安装界面,按照提示进行安装即可。
附录
使用 PlanetScale
既然要托管,一般我们都会选择免费的云数据库,以 PlanetScale 为例,它提供5G免费存储空间并且不限制连接数。 由于 PlanetScale 默认启用了SSL,因此还需要进行一些额外配置。
1. 在 Vercel 中添加 PlanetScale 集成
首先需要保证已经在 PlanetScale 中创建数据库,然后访问 https://vercel.com/integrations/planetscale ,选择 Add Integration
,然后为我们的项目添加 PlanetScale 授权,这时候 Vercel 会自动为我们的项目创建一组环境变量:
- PLANETSCALE_DB: 数据库名
- PLANETSCALE_DB_USERNAME: 数据库用户名
- PLANETSCALE_DB_PASSWORD: 数据库密码
- PLANETSCALE_DB_HOST: 数据库地址
- PLANETSCALE_SSL_CERT_PATH: SSL证书路径
2. 修改 Typecho 配置文件 config.inc.php
还是关注 定义数据库参数
部分,以上述环境变量替代部分内容,例:
/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_Mysql','表前缀');
$db->addServer(array (
'host' => $_ENV["PLANETSCALE_DB_HOST"],
'user' => $_ENV["PLANETSCALE_DB_USERNAME"],
'password' => $_ENV["PLANETSCALE_DB_PASSWORD"],
'charset' => '数据库编码, 推荐:utf8mb4',
'database' => $_ENV["PLANETSCALE_DB"],
'engine' => '数据库引擎, 对于MySQL为 InnoDB 或 MyISAM',
'sslCa' => $_ENV["PLANETSCALE_SSL_CERT_PATH"],
'sslVerify' => true,
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);
修改完成后提交推送,Vercel 会自动部署,后续操作与上述相同。
评论区