Loading... ## 前言 相信很多人会和我一样 what? Vercel 什么时候能部署 PHP 了?我怎么不知道?(我用 Vercel 也有一年时间了,我居然不知道,之前的 Vercel 文档白看了?) 然后我就去查 [Vercel 文档](https://vercel.com/docs/runtimes?query=php#advanced-usage/community-runtimes),果然发现了能部署 PHP Vercel-PHP 地址:[juicyfx/vercel-php](https://github.com/juicyfx/vercel-php) 本文 Github 仓库: [https://github.com/lete114/Vercel-Typecho](https://github.com/lete114/Vercel-Typecho) [](#准备工作 "准备工作")准备工作 -------------------------------- 1. Github 账号 2. Vercel 账号 3. 下载 Typecho 程序 ([官网](https://typecho.org/)) 4. 自己喜欢的 Typecho 主题 ([主题官网](https://typecho.me/)) 5. 数据库 (MySQL、PostgreSQL、SQLite) ## Vercel 依赖 在 bulid 目录下新建`vercel.json` ``` { "functions": { "api/index.php": { "runtime": "vercel-php@0.4.0" } }, "routes": [{ "src": "/(.*)", "dest": "/api/index.php" }] } ``` 在 bulid 目录下新建`config.inc.php` ``` <?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' => '数据库地址', 'user' => '数据库用户名', 'password' => '数据库密码', 'charset' => 'utf8mb4', 'port' => '3306', 'database' => '数据库昵称', 'engine' => 'MyISAM', ), Typecho_Db::READ | Typecho_Db::WRITE); Typecho_Db::set($db); ``` 在 bulid 目录下新建`api/index.php` ``` <?php $file= __DIR__ . '/..'.$_SERVER["PHP_SELF"]; if(file_exists($file)) { return false; } else { require_once __DIR__ . '/../index.php'; } ``` ### [](#自定义主题 "自定义主题")自定义主题 到 Typecho 官网下载自己喜欢的主题解压放到`bulid/usr/themes/`目录下即可 (本文只提供部署教程,则使用默认主题) ![](https://blog.imlete.cn/img/Vercel-Typecho/2.png) ### [](#准备数据库 "准备数据库")准备数据库 > GearHost 数据库现已不可用 > 目前推荐: (我没用过) > > 1. [FreeDB](https://freedb.tech/) > 2. [ElephantSQL](https://www.elephantsql.com/) 数据库渠道有很多,你可以选择花钱买数据库,也可以白嫖 (当然你不怕你文章丢失的话 (白嫖有风险)) 我这里推荐一个平台,算是比较稳的,这个平台我用了差不多快一年了吧,记不太清了,但是速度不是很快、而且存储只有 5MB,我 hexo 博客文章有 70 + 文章,目前占用 400+kb,5MB 因该够写好几百篇的文章了 ~GearHost: [GearHost](https://www.gearhost.com/)~ 具体注册就不多说了 (需要科学上网,大陆 IP 会被拦截) 这个平台支持 PHP 程序,可以直接部署 Typecho,而且还提供数据库,且数据库支持非本平台连接,我觉得速度不行 ## 数据库连接问题 某些数据库是需要证书才可以连接的,比如tidb的数据库,https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-clusters#root-certificate-issuance-and-validity > If you are using a GUI client, such as DBeaver, which does not accept a certificate file with multiple certificates inside, you must download the [ISRG Root X1](https://letsencrypt.org/certs/isrgrootx1.pem) certificate. 包括某些redis数据库也是,连接头host需要带上协议`tls2://`之类的。详细可以看博客:https://blog.qixing1217.top/8879698e363b407a9ec472f713c4e0bd#384599c69b8e4088a260770e6a63d967 某些数据库则需要带上特殊的字符才可以连接,比如neon和vercel自带的pgsql就需要带上特殊字符才可以连接:https://neon.tech/docs/connect/connection-errors#c-set-verify-full-for-golang-based-clients ## 加速网站 如果感觉卡顿可以试一下套cdn,这里推荐一下[tanglu](https://blog.tanglu.me/)大佬为博客等公益站点提供免费的三网优化高防CDN,申请地址:https://blog.tanglu.me/blogcdn/ ## 关于零成本的部署Typecho 曾经想过很多种办法来零成本部署typecho,没办法谁让自己是一个喜欢白嫖的白嫖党呢? 包括但不限于: - 通过dockerfile或者docker-compose构建typecho博客然后部署在一些免费的云容器化部署平台。并且docker也可以很好的在服务器上方便将来一键拉取镜像重启博客,也能够很方便的一键打包镜像备份整个博客 - 寻找市面上的免费虚拟主机,虽然说没有永远免费的主机,但是永远有主机免费!比如[彩绘云](https://www.kvm.gs/index.php),我在上面部署了一个Typecho站点:https://jiejaitt.top;还有诸如[Vmhost 免费主机永久托管在线¥ 0.00 / 终身](https://www.vmhost.cc/)和[千斧云互联-免费公益虚拟主机](https://idc.qqfy.cn/)和[阿贝云](https://www.abeiyun.com/),注意阿贝云也提供免费的服务器,不过需要发文章推广五天一续,如果忘记续费了需要支付一块钱重开。但是他们家的虚拟主机是可以免费开的 - 基于函数,serverless云函数,前端云等方式搭建typecho,这种方式一般函数计算服务提供php运行,额外需要一个数据库容器 - 纯IPV6服务器安装宝塔面板 – 搭建网站实现IPV4访问/ipv6,ipv4皆可访问,因为ipv6免费服务器更多,并且ipv6便宜 - 旧电脑旧手机改装成服务器搭配内网穿透实现访问,但是这样不仅电费相当于服务器的费用了,而且特别折腾,遂放弃。 ## 备份 ```php <?php // site root path define('__TYPECHO_ROOT_DIR__', dirname(__FILE__)); // plugin directory (relative path) define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins'); // theme directory (relative path) define('__TYPECHO_THEME_DIR__', '/usr/themes'); // admin directory (relative path) define('__TYPECHO_ADMIN_DIR__', '/admin/'); // define('__TYPECHO_DEBUG__', true); // register autoload require_once __TYPECHO_ROOT_DIR__ . '/var/Typecho/Common.php'; // init \Typecho\Common::init(); // config db $db = new \Typecho\Db('Pdo_Pgsql', 'typecho_'); $db->addServer(array ( 'host' => 'ep-snowy-term-42771532-pooler.us-east-1.aws.neon.tech', 'port' => 5432, 'user' => 'default', // 'password' => 'oUD9KbsTVx7H', 'password' => 'Sj9izsoex5qp', 'charset' => 'utf8', // 将选项添加到 dbname 字段中 'database' => 'verceldb options=endpoint=ep-snowy-term-42771532-pooler', // 'database' => 'postgres', ), \Typecho\Db::READ | \Typecho\Db::WRITE); \Typecho\Db::set($db); ``` ## php拓展失效问题 因为vercel仍然在不断的更新`PHP Runtime for ▲ Vercel Serverless Functions `,详细地址:https://github.com/vercel-community/php 所以一旦出现什么拓展不支持之后,应该去这里更换vercel的PHP Runtime:https://github.com/vercel-community/php#-versions 同时有关PHP Runtime在vercel的用法之类的也可以在这个仓库学习和查看 ## 参考教程 - https://blog.imlete.cn/article/Vercel-Deploy-Typecho.html - https://blog.qixing1217.top/8879698e363b407a9ec472f713c4e0bd#384599c69b8e4088a260770e6a63d967 最后修改:2024 年 02 月 27 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏