应 bill 小朋友的需求分享如何使用 Vercel 免费托管 Typecho 博客教程。因杜老师近期出差时间紧张,没有精力细致整理排版,但确保可成功部署,需要的小伙伴可以参考,如有建议可在评论区中留言!
写在前面
Typecho 是由 type 和 echo 两个词合成的,来自于开发团队的头脑风暴。Typecho 基于 PHP 开发,支持多种类型的数据库,是款内核强健﹑扩展方便﹑体验友好﹑运行流畅的轻量级开源博客程序。
Vercel 是一个用来部署前端应用的云平台,但也可以用来构建轻量级的事件驱动,并部署到它的全球边缘网络。很多小伙伴喜欢使用 Vercel 部署博客,但大家可能不知道,Vercel 还支持 PHP 源码的部署。今天我们就用 Vercel 免费部署 Typecho 博客!
准备工作
Typecho 非最新版本源码「1.2.0 版会检测目录是否能写入,推荐使用 这个 源码,感谢小伙伴的提醒」
GitHub 账号及相关工具「推荐用 GitHub Desktop」
MySQL 或其它类型数据库的托管平台「本文用 FreeDB 演示」
Vercel 的账号「推荐用 GitHub 账号登录」
操作步骤
在 FreeDB 申请免费 MySQL 数据库:
在 Typecho 源码目录下新建文件 config.inc.php
、vercel.json
和 api/index.php
等文件,效果如下:
其中 config.inc.php
文件的内容如下「注意 host/user/password/database 请根据实际信息修改」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php 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__); require_once 'Typecho/Common.php'; Typecho_Common::init(); $db = new Typecho_Db('Pdo_Mysql', 'typecho_'); $db->addServer(array ( 'host' => 'sql.freedb.tech', 'port' => 3306, 'user' => 'freedb_dusays', 'password' => 'sPyT&R#5NyFPSnP', 'charset' => 'utf8mb4', 'database' => 'freedb_dusays', 'engine' => 'MyISAM', ), Typecho_Db::READ | Typecho_Db::WRITE); Typecho_Db::set($db);
|
vercel.json
文件的内容如下:
1 2 3 4 5 6 7 8
| { "functions": { "api/index.php": { "runtime": "vercel-php@0.4.0" } }, "routes": [{ "src": "/(.*)", "dest": "/api/index.php" }] }
|
api/index.php
文件的内容如下:
1 2 3 4 5 6 7 8 9 10
| <?php $file= __DIR__ . '/..'.$_SERVER["PHP_SELF"]; if(file_exists($file)) { return false; } else { require_once __DIR__ . '/../index.php'; }
|
在 GitHub Desktop 新建项目,并上传 Typecho 源码:
在 Vercel 导入刚新建的项目,部署后即可通过域名访问 Typecho 安装页面:
访问 Vercel 提供的域名,记得在域名结尾添加 /install.php
:
写在最后
杜老师首先要提醒使用这种方式的小伙伴,用于短期体验折腾没有问题,长期的话建议还是用服务器托管。
该种方式源码端的变更「例如上传文件」无法同步至 GitHub 仓库,这就会造成数据的丢失。