小声BB
Serv00上部署Artalk并连接NotionNext
1、解决外部NotionNext连接serv00数据库问题
2、实现同步博客评论
部署教程如下
安装go
# 创建安装4. 4. 目录
mkdir -p ~/local/soft && cd ~/local/soft
# 下载编译好的 go1.22.7 的程序包
wget https://dl.google.com/go/go1.22.7.freebsd-amd64.tar.gz
# 解压
tar -xzvf go1.22.7.freebsd-amd64.tar.gz
# 删除压缩文件
rm go1.22.7.freebsd-amd64.tar.gz
# 修改 .profile 文件
echo 'export PATH=~/local/soft/go/bin:$PATH' >> ~/.profile
# 使 .profile 的修改生效
source ~/.profile
# 检查 go 版本
go version
#提示 go version go1.22.7 freebsd/amd64
基本操作(新手来看)
此文本将被隐藏
1、拉取项目
#进入创建域名的`public_html` 文件下
cd domains/这里创建.域名绑定端口.com/public_html
#拉取artalk官方最新项目
git clone https://github.com/ArtalkJS/Artalk.git
2、编译项目
不想自行构建的可以直接下载 ~
#进入项目文件夹
cd Artalk
#编译项目
##这里构建项目时间较长,不要使用webssh会断线,使用正常SSH软件
go build
构建完成后在serv00的File Manager中可以看到一个名叫 artalk 的文件

3、获取配置文件(环境)
#依然在Artalk文件夹中
wget -O artalk.yml https://raw.githubusercontent.com/ArtalkJS/Artalk/master/conf/artalk.example.zh-CN.yml
获取后在serv00的File Manager中可以看到一个名叫 artalk.yml 的文件

4、新建MySQL数据库
- 点击 MySQL
Add database
输入Database name(数据库名)、Username(用户名)、Password(密码)、Confirm password(确认密码)

注意:输入完成后先不要添加+Add


新手可以像我一样,统一设置成m12634_Artalk,以防止后面配置文件出错
- 点击
Advanced settings
Collation 选择 utf8mb4_general_ci
- 点击
Add 即可完成新建 MySQL数据库
5、File Manager配置文件(环境)
- 进入对应域名项目 Artalk 文件夹,右击
artalk.yml选择 View/Eidt→Choose other… →Source Eidtor 打开文件
- 根据自己配置修改配置文件
详细参考官方配置方法
主要配置参考
# 第5行
# 服务器端口(改成自己的)
port: 23366
# 第8行
# 加密密钥(设置成自己喜欢的)
app_key: ""
# 第20行
# 默认站点名(如果你没改过NotionNext配置,填入 NotionNext,
# 改过请将其他配置好后去NotionNext博客前端查看会有提示)
site_default: 默认站点
# 第28-47行
# 数据库
db:
# 数据库类型 ["sqlite", "mysql", "pgsql", "mssql"]
type: mysql # 把这里改成mysql
# 数据库文件 (仅 SQLite 数据库需填写)
file: ./data/artalk.db
# 数据库名称
name: m12634_Chat #填入刚才新建的m12634_Chat
# 数据库地址
host: localhost
# 数据库端口
port: 3306
# 数据库账户
user: m12634_Chat #填入刚才新建的m12634_Chat
# 数据库密码
password: "m12634_Chat" #引号中填入刚才新建的m12634_Chat
# 编码格式
charset: utf8mb4
# 表前缀 (例如:"atk_")
table_prefix: "atk_" #引号中填入atk_
# 第92行
# 可信域名
# -- 例如:["https://artalk.example.com:23366"] --
trusted_domains: [“https://www.example①.com”,“https://www.example②.com”] # 填入你的博客域名
# 第111行
# 管理员账户 # 也可以通过命令行创建管理员
# --
# - name: "admin"
# email: "[email protected]"
# password: "" # 支持 bcrypt 或 md5 加密,如:"(bcrypt)$2y$10$ti4vZYIrxVN8rLcYXVgXCO.GJND0dyI49r7IoF3xqIx8bBRmIBZRm"
# badge_name: "管理员"
# badge_color: "#0083FF"
# -- # 记得删除中括号[]哦!!
admin_users:
- name: admin
email: [email protected]
password: admin
badge_name: 管理员
badge_color: '#0083FF'
- name: admin2
email: [email protected]
password: admin2
badge_name: 小管理员
badge_color: '#0083FF'
6、赋权
# 进入项目文件夹
cd ~/domains/这里创建.域名绑定端口.com/public_html/Artalk
# 赋权 artalk文件和 artalk.yml配置文件
chmod +x artalk artalk.yml
7、创建管理员
如果你没有在配置文件中创建管理员也可以通过命令行创建管理员。
# 执行命令并根据命令行提示快速创建管理员。
./artalk admin
8、启动测试
# 启动命令并指定配置文件artalk.yml,指定配置文件必须使用绝对路径(二选一)
./artalk server -c ~/domains/这里创建.域名绑定端口.com/public_html/Artalk/artalk.yml
# 也可以使用这个绝对路径命令(二选一)
cd ~/domains/这里创建.域名绑定端口.com/public_html/Artalk && ./artalk server -c ~/domains/这里创建.域名绑定端口.com/public_html/Artalk/artalk.yml
可以看到启动成功了,先不要Ctrl+C关闭!
9、连接NotionNext
Vercel部署的NotionNext看这里
- serv00免费账户不支持远程连接数据库,只能从本地连接数据库,所以需要创建一个PHP中间件,代替我们访问数据库!
- 回到serv00主页,创建域名,默认的PHP网站类型
- 进入File Manager →进入刚刚创建的PHP网站 public_html文件夹
- 右键点击 New floder 新建一个名为api的文件夹(名称随意)
- 进入 api 文件夹,创建 proxy.php

- 打开 proxy.php,粘贴以下代码并保存(或者直接下载上传
)
<?php
header('Access-Control-Allow-Origin: *'); // 允许所有来源的请求访问资源,如需精准指定前端域名把 * ,改为域名即可
header('Access-Control-Allow-Methods: *'); // 允许所有的 HTTP 方法,可将 * 替换成这些(全部替换):GET, POST, PUT, DELETE, OPTIONS
header('Access-Control-Allow-Headers: *'); // 允许所有的请求头,可将 * 替换成这些(全部替换):Content-Type, Authorization, X-Requested-With
header('Access-Control-Allow-Credentials: true'); // 允许跨域请求携带 Cookie
// 如果是 OPTIONS 请求(浏览器发送的预检请求)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200); // 返回状态码 200
exit; // 返回 200 状态码,且终止脚本执行
}
// 获取请求的 URI,去除代理脚本部分,得到实际的 API 路径
$requestUri = $_SERVER['REQUEST_URI'];
$apiPath = preg_replace('/^\/[^\/]+\/proxy\.php/', '', $requestUri); // 去掉任意前缀的 '/proxy.php',,得到实际请求路径
// 初始化 cURL 请求
$ch = curl_init();
$targetUrl = 'http://localhost:20638' . $apiPath; // 设置目标 URL,即 Artalk 后端 API 的地址,修改端口即可,其他不要动!
curl_setopt($ch, CURLOPT_URL, $targetUrl);
//存储响应头的变量
$responseHeaders = [];
curl_setopt($ch, CURLOPT_HEADERFUNCTION,
function($curl, $header) use (&$responseHeaders) {
$len = strlen($header);
$header = explode(':', $header, 2);
if (count($header) < 2) return $len;
$name = strtolower(trim($header[0]));
$value = trim($header[1]);
if ($name === 'content-type') { // 捕获 Content-Type
$responseHeaders['content-type'] = $value;
}
return $len;
}
);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $_SERVER['REQUEST_METHOD']); // 设置 HTTP 方法,使用客户端的请求方法(GET, POST, PUT, DELETE 等)
// 处理文件上传(multipart/form-data)
if (!empty($_FILES)) {
$postData = [];
foreach ($_FILES as $key => $file) {
$postData[$key] = new CURLFile($file['tmp_name'], $file['type'], $file['name']);
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
} else {
// 处理普通 JSON 请求
$input = file_get_contents('php://input');
curl_setopt($ch, CURLOPT_POSTFIELDS, $input);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: ' . ($_SERVER['HTTP_AUTHORIZATION'] ?? '')
]);
}
curl_setopt($ch, CURLOPT_COOKIE, $_SERVER['HTTP_COOKIE'] ?? ''); // 传递客户端(前端评论插件)的 Cookie 到后端
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置 cURL 返回结果,而不是直接输出
$response = curl_exec($ch); // 执行 cURL 请求并获取响应
/* //可选功能(没啥用)
检查 cURL 请求是否成功
if ($response === false) {
// 如果请求失败,返回错误信息
$error = curl_error($ch);
http_response_code(500); // 设置服务器错误状态码
echo json_encode(['error' => 'cURL error: ' . $error]);
curl_close($ch);
exit;
}
*/ //如需使用删除两头(/*和*/)
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 获取 HTTP 响应码
// 自动设置 Content-Type
if (isset($responseHeaders['content-type'])) {
header('Content-Type: ' . $responseHeaders['content-type']);
}
// 返回响应内容和相应的 HTTP 状态码
http_response_code($httpCode);
echo $response;
// 关闭 cURL 资源
curl_close($ch);
?>


注意,记得在Artalk评论插件的 artalk.yml 环境配置文件添加信任这个代理域名,并重启Artalk,即:
# 第92行
# 可信域名
# -- 例如:["https://artalk.example.com:23366"] --
trusted_domains: [“https://www.刚刚创建的PHP网站.com/api/proxy.php”] # 填入这个PHP中间件代理域名
- 去Vercel配置环境变量,并 Redeploy
# Vercel配置环境变量
NEXT_PUBLIC_COMMENT_ARTALK_SERVER=https://www.刚刚创建的PHP网站.com/api/proxy.php
-
去博客测试评论插件
-
管理员登录(如果完全按照我的方式):账户:admin ,邮箱:[email protected],密码:admin
serv00部署的NotionNext看这里
- serv00部署需要修改好代码后自行构建
- 将 .env.exampl 文件重命名为 .env.local 并修改代码
# 修改.env.local代码
NEXT_PUBLIC_COMMENT_ARTALK_JS=https://unpkg.com/[email protected]/dist/Artalk.js
NEXT_PUBLIC_COMMENT_ARTALK_CSS=https://unpkg.com/[email protected]/dist/Artalk.css
NEXT_PUBLIC_COMMENT_ARTALK_SERVER=https://www.这里直接填Artalk评论插件的域名.com
- 修改好打包完成后上传至serv00对应博客域名文件夹


注意,记得在Artalk评论插件的 artalk.yml 环境配置文件添加信任你的博客域名,并重启Artalk- 进入对应博客域名文件夹解压打包的文件并启动
# 进入博客域名文件夹
cd ~/domains/这里创建.博客的域名.com/public_html
# 解压打包好的NotionNext
unzip NotionNext.zip
# 进入博客项目文件夹
cd NotionNext
# 指定端口启动
yarn start -p 博客端口
- 此时稍等片刻便可以看到与Vercel部署的同一篇文章下评论是同步的(Artalk根据站点名来判断)
10、配置Artalk保活
- 在Artalk项目文件夹下创建一个名为start.sh的文件并粘贴以下启动命令
# 使用绝对路径
cd ~/domains/这里创建.域名绑定端口.com/public_html/Artalk && ./artalk server -c ~/domains/这里创建.域名绑定端口.com/public_html/Artalk/artalk.yml
- 赋权start.sh 文件
# 进入Artalk项目文件夹
cd ~/domains/这里创建.域名绑定端口.com/public_html/Artalk
# 赋权start.sh
chmod +x start.sh
- 设置Cron job
# 配置Cron job
/usr/home/你的serv00名字/domains/这里创建.域名绑定端口.com/public_html/Artalk/start.sh
11、腾出空间
- 因为刚刚 go build 构建占用了一些内存,所以将四个文件下载下来 artalk、 artalk.yml、 proxy.php、start.sh 先保存到自己电脑上
- 使用重置命令清空一下系统
- 重置完成后,重新创建域名,并在域名 public_html 文件夹下新建名叫 Artalk 文件夹
- 将四个文件上传到 Artalk 文件夹中即可 (Artalk进程可能还活着,记得重启一下)
效果如下(我的博客)
配置完成后只要博客站点名一样,Vercel和serv00同一篇文章的评论就是同步的,可以当作一主一备
serv00日常内存占用,只有在加载评论的一瞬间会飙升一下,加载完就正常了
Vercel效果:Serv00应用包下载导航 | Mystery Q
serv00效果:Serv00应用包下载导航 | Mystery Q








