chat.kehu.com,解析 A 记录指向服务器公网 IP。LC-7K2M-9QXA-…,并已把你的域名加进白名单。chat.kehu.com;PHP 版本选 纯静态;根目录保持默认。把服务商给你的 livechat(Linux 二进制)上传到 /www/wwwroot/chat.kehu.com/,然后给它执行权限。
cd /www/wwwroot/chat.kehu.com
chmod +x livechat
mkdir -p data/uploads
./livechat --version
# 期望输出:livechat 1.26.0 (linux/amd64)
授权相关配置通过环境变量注入。下面四行在第 5 步的服务文件里填写:
LICENSE_SERVER=https://a.yxsd.top # 授权中心地址,固定不变 LICENSE_KEY=LC-XXXX-XXXX-XXXX-XXXX # 你的授权码 LICENSE_DOMAIN=chat.kehu.com # 必须是白名单里的域名 LICENSE_ENFORCE=1 # 1=强制校验,校验不过不启动
chat.kehu.com 授权却通过 IP 或别的域名访问,会被判定为域名不匹配而拒绝启动。新建 /etc/systemd/system/livechat.service,内容如下(把域名、授权码换成自己的):
[Unit] Description=LiveChat Server After=network.target [Service] Type=simple WorkingDirectory=/www/wwwroot/chat.kehu.com Environment=ADDR=:8095 Environment=DB_PATH=data/app.db Environment=UPLOAD_DIR=data/uploads Environment=LICENSE_SERVER=https://a.yxsd.top Environment=LICENSE_KEY=LC-XXXX-XXXX-XXXX-XXXX Environment=LICENSE_DOMAIN=chat.kehu.com Environment=LICENSE_ENFORCE=1 ExecStart=/www/wwwroot/chat.kehu.com/livechat Restart=always RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl enable --now livechat sleep 2 systemctl is-active livechat # 期望:active curl -s http://127.0.0.1:8095/api/health # 期望:{"ok":true,...}
宝塔 → 网站 → 点站点名 → 反向代理 → 添加:
livechathttp://127.0.0.1:8095$hostWebSocket 需要额外的 Upgrade 头,宝塔默认已带;如果客服端连不上实时消息,检查站点配置里是否有下面两行:
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s;
打开 https://chat.kehu.com/wh606612/(超管路径,不是 /admin/)。
admin,初始密码见服务商给你的交付说明;第一次登录后立刻改掉。https://chat.kehu.com/agent/ 登录只回复会话。把安装包发给客户,客服手机上安装后,在登录页的「服务器地址」里填自己的域名:
https://chat.kehu.com
不需要 /api、不需要末尾斜杠。填完点「连接服务器」,成功后用客服账号登录即可收发消息。
livechat 二进制并重启服务。备份(建议每天定时执行,宝塔「计划任务」里加一条 shell):
cd /www/wwwroot/chat.kehu.com TS=$(date +%Y%m%d) tar czf backup/data-$TS.tar.gz data/ ls -lh backup/ | tail -3
升级(拿到新版本二进制后):
cd /www/wwwroot/chat.kehu.com
cp -a livechat backup/livechat.$(date +%Y%m%dT%H%M%S) # 先留退路
cp -f livechat.new livechat && chmod +x livechat
systemctl restart livechat
sleep 2 && systemctl is-active livechat
data/ 已备份。数据库结构会在启动时自动迁移,迁移不可回退。chat.kehu.com、
LC-XXXX-… 换成你自己的值即可。一台 Linux 服务器(1核2G 起,Ubuntu 22.04 / Debian 12 / CentOS 7+),装好宝塔面板; 域名 A 记录解析到服务器 IP;拿到授权码,且域名已加入授权白名单。
宝塔 → 网站 → 添加站点 → 域名填 chat.kehu.com,PHP 选「纯静态」。
建好后进站点设置 → SSL → Let's Encrypt → 申请 → 开启强制 HTTPS。
cd /www/wwwroot/chat.kehu.com
chmod +x livechat
mkdir -p data/uploads
./livechat --version
# 输出 livechat 1.26.0 (linux/amd64) 即为正常
LICENSE_SERVER=https://a.yxsd.top LICENSE_KEY=LC-XXXX-XXXX-XXXX-XXXX LICENSE_DOMAIN=chat.kehu.com LICENSE_ENFORCE=1
LICENSE_DOMAIN 必须与浏览器访问的域名完全一致;用 IP 或其它域名访问会被拒绝。 授权中心每 6 小时校验一次;断网时按最后一次成功校验的结果离线宽限 7 天。
cat > /etc/systemd/system/livechat.service <<'EOF' [Unit] Description=LiveChat Server After=network.target [Service] Type=simple WorkingDirectory=/www/wwwroot/chat.kehu.com Environment=ADDR=:8095 Environment=DB_PATH=data/app.db Environment=UPLOAD_DIR=data/uploads Environment=LICENSE_SERVER=https://a.yxsd.top Environment=LICENSE_KEY=LC-XXXX-XXXX-XXXX-XXXX Environment=LICENSE_DOMAIN=chat.kehu.com Environment=LICENSE_ENFORCE=1 ExecStart=/www/wwwroot/chat.kehu.com/livechat Restart=always RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now livechat sleep 2 systemctl is-active livechat curl -s http://127.0.0.1:8095/api/health
宝塔 → 网站 → 站点 → 反向代理 → 添加:目标 URL http://127.0.0.1:8095,
发送域名 $host。确认配置里含以下三行(WebSocket 必需):
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s;
浏览器打开 https://chat.kehu.com/wh606612/,
账号 admin,初始密码见交付说明。登录后:
/agent/ 地址和客服账号发给客服。
客服手机安装 APK,登录页「服务器地址」填 https://chat.kehu.com,
点「连接服务器」,再用客服账号登录。
# 备份 cd /www/wwwroot/chat.kehu.com tar czf backup/data-$(date +%Y%m%d).tar.gz data/ # 升级(先备份,再替换) cp -a livechat backup/livechat.$(date +%Y%m%dT%H%M%S) cp -f livechat.new livechat && chmod +x livechat systemctl restart livechat # 看日志 journalctl -u livechat -n 60 --no-pager tail -f /www/wwwroot/chat.kehu.com/data/*.log 2>/dev/null
说明 LICENSE_DOMAIN 写的域名与授权中心登记的不一致。检查三处:① 环境变量里是否带 https:// 或路径(不该带);② 授权中心后台该授权码的域名列表;③ 是否用了 www. 前缀而授权的是裸域名(反之亦然)。确认后让服务商在后台把域名补上,保存后 1 分钟内生效。
不会丢数据。到期后进程拒绝启动,网页和 App 都打不开,但 data/ 目录完好。续期后执行 systemctl restart livechat 即可恢复,所有会话记录都在。
不需要。授权绑定的是域名不是 IP。把 livechat 和 data/ 整个拷到新服务器,域名解析改到新 IP,启动即可。首次校验会自动记录新的实例指纹。
联系服务商在授权中心把新域名加进白名单(可以同时保留旧域名),然后修改 LICENSE_DOMAIN 并重启。换域名不需要换授权码。
按顺序排查:① curl http://127.0.0.1:8095/api/health 本机是否通;② 浏览器打开 https://你的域名/api/health 是否通;③ 反向代理是否带 Upgrade / Connection 头(WebSocket 必需);④ 宝塔防火墙与云厂商安全组是否放行 443。
几十个坐席、日均几千条消息没问题。建议 1 核 2G 起,data/ 放 SSD。并发再高时优先加内存,Go + SQLite 对 CPU 要求不高。
不会。成功校验一次后会本地缓存,授权中心不可达时按缓存继续运行,宽限期 7 天。宽限期内恢复连接会自动续上;超过 7 天仍连不上才停服。
访问 https://你的域名/api/health,返回体里的 license 字段就是当前授权状态;服务端日志(journalctl -u livechat)也会在校验失败时打印具体原因。
停机备份最稳:systemctl stop livechat && tar czf backup/data.tar.gz data/ && systemctl start livechat。不停机时用 sqlite3 data/app.db ".backup 'backup/app.db'",这是 SQLite 官方的在线一致性快照,比直接 cp 安全。