通常搭建一个动态博客都要有自己的服务器,今天介绍一下如何利用Vercel+Railway免费部署动态博客Typecho。

1. 利用Railway建立数据库

在Railway中新建项目,类型选择Provision MySQL,建好后在变量中获取相关数据库信息备用。

2. 配置Typecho

Typecho 官网下载正式版安装文件,解压到本地文件。
a. 编辑 install.php文件,注释掉第773行至775行;

#    if (!$writeable) {//第773行
#        $errors[] = _t('上传目录无法写入, 请手动将安装目录下的 %s 目录的权限设置为可写然后继续升级', $uploadDir);
#    }//第775行

b. 根目录添加 vercel.json文件;

{
  "functions": {
    "api/index.php": {
      "runtime": "vercel-php@0.6.0"
    }
  },
  "routes": [{ "src": "/(.*)", "dest": "/api/index.php" }]
}

注意:runtime 这里vercel-php如使用旧版本会因为与 Vercel 网站上设置的 Node.js 版本不兼容导致部署时报错,需更新至适配版本。
c. 根目录创建 api 目录并在目录下添加 index.php文件;

<?php
$file= __DIR__ . '/..'.$_SERVER["PHP_SELF"];

if(file_exists($file))
{
   return false;
}
else
{
    require_once __DIR__ . '/../index.php';
}
#echo $_SERVER["PHP_SELF"];

d. 根目录添加 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', 'typecho_');
$db->addServer(array (
  'host' => '数据库地址',
  'user' => '数据库用户名',
  'password' => '数据库密码',
  'charset' => 'utf8mb4',
  'port' => '数据库端口号',
  'database' => '数据库名称',
  'engine' => 'MyISAM',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

根据第一步中得到的Railway 数据库信息更新对应的数据库参数。

3. 利用 Vercel 部署

a. 本地电脑安装并配置 vscode、node.js 和 npm,项目文件下通过 npm 安装 Vercel CLI,
npm -g install vercel
b. CLI登录Vercel,
vc login
c. 登录成功后部署,
vc
一路回车,

Vercel CLI 28.10.1
? Set up and deploy “部署路径”? [Y/n] y (直接回车)
? Which scope do you want to deploy to? 用户名(直接回车)
? Link to existing project? [y/N] n(直接回车)
? What’s your project’s name? 项目名称(直接回车)
? In which directory is your code located? ./(直接回车)
Local settings detected in vercel.json:
No framework detected. Default Project Settings:
- Build Command: `npm run vercel-build` or `npm run build`
- Development Command: None
- Install Command: `yarn install`, `pnpm install`, or `npm install`
- Output Directory: `public` if it exists, or `.`
? Want to modify these settings? [y/N] n (直接回车)
🔗  Linked to 用户名/项目名称 (created .vercel and added it to .gitignore)
🔍  Inspect: https://vercel.com/用户名/项目名称/部署事件唯一码 [3s]
✅  Production: Vercel 自动分配的以 vercel.app 结尾的网址 [24s]
📝  Deployed to production. Run `vercel --prod` to overwrite later (https://vercel.link/2F).
💡  To change the domain or build command, go to https://vercel.com/用户名/项目名称/settings

如果出现 Production 即可,如显示 Preview 时候需要运行,
vc --prod
重点:由于 *.vercel.app 在国内无法访问,需在vercel内绑定域名。
CNAME cname-china.vercel-dns.com

4. 安装 Typecho

地址栏输入域名 /install.php进入Typecho安装界面。