2026年7月24日星期五

HestiaCP一键自动化部署Adminer脚本(含 Nginx 认证 + Fail2Ban 双重防护)

原文链接:https://www.chenweiliang.com/cwl-34395.html


文章目录



别再手动装Adminer了,一个脚本搞定全套安全配置


前两天我有个朋友,也是搞运维的,跟我吐槽说他每次在服务器上装Adminer,都得折腾大半天。不是Adminer本身有多难装,它就是一个PHP文件,扔上去就能用。但问题是,你不能光扔一个PHP文件上去就完事了。


你得配置子域名,得加载插件,得设置Nginx认证,还得配置Fail2Ban防暴力破解。每一步都不复杂,但加起来就是一堆零碎的命令和配置文件。


更烦人的是,认证和防火墙这种安全相关的配置,特别容易出错。稍微疏忽一下,数据库管理界面就暴露在公网上了,谁都能访问。


我当时就乐了,因为我之前也是这样的。后来我实在受不了了,就写了个一键部署脚本,把所有这些步骤都自动化了。


HestiaCP一键自动化部署Adminer脚本(含 Nginx 认证 + Fail2Ban 双重防护)


为什么不用phpMyAdmin


你可能会问,为什么不用phpMyAdmin,那个更主流。


确实,phpMyAdmin用的人更多,社区也更大。但我觉得Adminer有几个地方做得更好。


首先是轻量,Adminer整个就一个PHP文件,phpMyAdmin是一大堆文件。其次是安全性,Adminer的设计理念是「默认不信任」,你需要显式地配置连接信息才能操作数据库。


还有就是性能,Adminer在处理大数据库的时候,比phpMyAdmin快不少。


当然,这些都不是最重要的。最重要的是,这个脚本让我再也不用手动配置那些安全相关的玩意了。


脚本到底做了什么


这个脚本的思路其实很简单,就是把你平时手动做的那些步骤,全部自动化。


交互式输入这块,脚本会问你几个问题,HestiaCP用户名、域名、认证用户名和密码。你只需要输入这些,剩下的全交给脚本。


创建目录和安装依赖这块,脚本会自动创建Web根目录,检查有没有安装apache2-utils,用来生成密码文件的,还有PHP环境。


下载Adminer这块,脚本会先从官方源下载最新版,如果官方源连不上,自动切换到GitHub Releases的稳定源。这点我觉得挺重要的,官方源有时候确实不太稳定,我之前就遇到过连接超时的情况。


下载插件这块,脚本会下载三个核心插件,plugin.php是插件加载器,fc-sqlite-connection-without-credentials.php用来处理无密码连接,login-password-less.php支持密码哈希登录。


生成密码Hash和index.php这块,这里有个小细节,脚本用getenv()来获取密码,而不是直接用$_ENV,这样可以避免php.ini配置问题导致Hash计算为空。我自己就踩过这个坑,当时搞了半天才发现是php.ini没开启E作用域。


配置Nginx认证这块,脚本用的是HestiaCP的原生Include机制,不是直接修改Nginx主配置文件。这样做的好处是,即使你重建了域名配置,认证也不会失效。


配置Fail2Ban这块,脚本会创建一个过滤规则,监控401错误,如果某个IP在10分钟内尝试登录失败3次,就封禁它1小时。


修复权限和重载服务这块,脚本会自动设置正确的文件权限,重载PHP-FPM、Nginx和Fail2Ban。


安全这块,我是认真的


说真的,数据库管理工具的安全性,是我最在意的一件事。


你想啊,Adminer这个东西,它是可以直接操作你服务器上所有数据库的。如果暴露在公网上,被人扫到,那后果不堪设想。


这个脚本做了三重保护。


第一重是Nginx的HTTP Basic Auth。你访问Adminer的时候,浏览器会弹出一个对话框,让你输入用户名和密码。只有输入正确了,才能看到Adminer的登录界面。


第二重是Adminer自身的密码哈希登录。我在index.php里配置了密码哈希,这样即使有人绕过了Nginx认证,也不知道Adminer的登录密码。


第三重是Fail2Ban的暴力破解防护。如果有人试图暴力破解你的密码,Fail2Ban会自动把他的IP封掉。


这三重保护加在一起,基本上可以放心把Adminer放在公网上了。


一键运行,真的就是一键


部署的过程特别简单。


#!/bin/bash


==============================================================================


Adminer + 插件 + Nginx Auth + Fail2Ban 一键自动化部署脚本 (HestiaCP 完美版)


==============================================================================


set -e


必须以 root 权限运行


if [ “$EUID” -ne 0 ]; then echo “❌ 错误:请使用 root 或 sudo 运行此脚本!” exit 1 fi


——————————————————————————


1. 交互式输入配置参数


——————————————————————————


read -p “请输入 HestiaCP 用户名 [默认: admin]: ” HESTIA_USER HESTIA_USER=$HESTIA_USER:-admin


read -p “请输入 Adminer 部署域名 [例如: adminer.example.com]: ” DOMAIN if [ -z “$DOMAIN” ]; then echo “❌ 错误:域名不能为空!” exit 1 fi


read -p “请输入 Nginx 网页认证用户名 [默认: adminuser]: ” AUTH_USER AUTH_USER=$AUTH_USER:-adminuser


read -sp “请输入防护密码 (用于 Nginx 认证与 Adminer 登录): ” AUTH_PASS echo “” if [ -z “$AUTH_PASS” ]; then echo “❌ 错误:密码不能为空!” exit 1 fi


核心路径变量定义


WEBROOT=”/home/$HESTIA_USER/web/$DOMAIN/public_html” ADMINER_FILE=”$WEBROOT/adminer.php” PLUGIN_DIR=”$WEBROOT/plugins” HTPASSWD_FILE=”/etc/nginx/.htpasswd-$DOMAIN”


echo -e “\n🚀 开始部署 Adminer 到域名: $DOMAIN …”


——————————————————————————


2. 创建目录与安装基础依赖


——————————————————————————


if [ ! -d “$WEBROOT” ]; then echo “📁 创建 Web 根目录: $WEBROOT” mkdir -p “$WEBROOT” fi mkdir -p “$PLUGIN_DIR”


echo “🔍 检查基础依赖环境…” if ! command -v htpasswd >/dev/null 2>&1; then echo “📦 安装 apache2-utils 工具包…” apt-get update -qq && apt-get install -y -qq apache2-utils fi


if ! command -v php >/dev/null 2>&1; then echo “❌ 错误:未检测到系统的 PHP 环境!” exit 1 fi


——————————————————————————


3. 安全下载 Adminer 核心程序


——————————————————————————


echo “📥 正在下载最新版 Adminer…” curl -sL -H “User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)” \ -o “$ADMINER_FILE” “https://www.adminer.org/latest.php


校验下载有效性


if ! grep -q “<?php” “$ADMINER_FILE”; then echo “⚠️ 官方源连接异常,正在切换至 GitHub Releases 稳定源…” curl -sL -o “$ADMINER_FILE” \ “https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php” fi


——————————————————————————


4. 下载官方核心插件与加载器


——————————————————————————


echo “🧩 正在下载插件组件…” curl -sL -o “$PLUGIN_DIR/plugin.php” \ https://raw.githubusercontent.com/vrana/adminer/master/plugins/plugin.php


curl -sL -o “$PLUGIN_DIR/fc-sqlite-connection-without-credentials.php” \ https://raw.githubusercontent.com/vrana/adminer/master/plugins/fc-sqlite-connection-without-credentials.php


curl -sL -o “$PLUGIN_DIR/login-password-less.php” \ https://raw.githubusercontent.com/vrana/adminer/master/plugins/login-password-less.php


——————————————————————————


5. 安全生成密码 Hash 并构建入口文件 index.php


——————————————————————————


echo “⚙️ 生成密码 Hash 与 index.php 配置…”


使用 getenv() 替代 $_ENV,防止 php.ini 未开启 E 作用域导致 Hash 计算为空


HASHED_PASSWORD=$(AUTH_PASS=”$AUTH_PASS” php -r ‘echo password_hash(getenv(“AUTH_PASS”), PASSWORD_DEFAULT);')


cat > “$WEBROOT/index.php” <<EOF <?php function adminer_object() include_once “./plugins/plugin.php”; include_once “./plugins/fc-sqlite-connection-without-credentials.php”; include_once “./plugins/login-password-less.php”;


return new AdminerPlugin([
new AdminerFCSqliteConnectionWithoutCredentials(),
new AdminerLoginPasswordLess('$HASHED_PASSWORD'),
]);


include “./adminer.php”; EOF


——————————————————————————


6. 配置 Nginx 基础认证 (完全依赖 HestiaCP 原生 Include 机制)


——————————————————————————


echo “🔒 配置 Nginx HTTP Basic Auth…” htpasswd -b -c “$HTPASSWD_FILE” “$AUTH_USER” “$AUTH_PASS” chmod 644 “$HTPASSWD_FILE”


HESTIA_CONF_DIR=”/home/$HESTIA_USER/conf/web/$DOMAIN” if [ -d “$HESTIA_CONF_DIR” ]; then


# HestiaCP 原生包含文件名格式:nginx.conf_* 与 nginx.ssl.conf_*
# 这样无需 sed 修改主配置文件,重建域名配置时也不会失效
cat > "$HESTIA_CONF_DIR/nginx.conf_adminer" <<EOF

auth_basic “Restricted Adminer Access”; auth_basic_user_file $HTPASSWD_FILE; EOF


cat > "$HESTIA_CONF_DIR/nginx.ssl.conf_adminer" <<EOF

auth_basic “Restricted Adminer Access”; auth_basic_user_file $HTPASSWD_FILE; EOF fi


——————————————————————————


7. 配置 Fail2Ban 防护规则


——————————————————————————


echo “🛡️ 配置 Fail2Ban 规则…” cat > /etc/fail2ban/filter.d/nginx-adminer.conf <<‘EOF' [Definition] failregex = ^ – . “GET /. HTTP/.*” 401 ignoreregex = EOF


cat > /etc/fail2ban/jail.d/nginx-adminer.conf <<EOF [nginx-adminer] enabled = true filter = nginx-adminer port = http,https logpath = /var/log/nginx/domains/$DOMAIN.log maxretry = 3 findtime = 600 bantime = 3600 EOF


——————————————————————————


8. 修复权限、刷新缓存与重载服务


——————————————————————————


echo “🧹 修复权限并重载服务…” chown -R $HESTIA_USER:$HESTIA_USER “$WEBROOT” find “$WEBROOT” -type d -exec chmod 755 + find “$WEBROOT” -type f -exec chmod 644 +


平滑重载 PHP-FPM(兼容多版本 PHP 环境)


for service in $(systemctl list-units –type=service –state=running –no-legend | awk ‘print $1' | grep -E ‘php.*fpm'); do systemctl reload “$service” || true done


重载 Web 与防护服务


nginx -t && systemctl reload nginx if systemctl is-active –quiet fail2ban; then systemctl restart fail2ban fi


echo -e “\n==================================================” echo -e “✅ Adminer 一键部署成功!” echo -e “————————————————–” echo -e “🌐 访问地址 : https://$DOMAIN/index.php” echo -e “👤 Nginx 认证账号 : $AUTH_USER” echo -e “🔑 Nginx 认证密码 : [你输入的防护密码]” echo -e “————————————————–” echo -e “💡 Adminer 登录说明:” echo -e ” 数据库用户名填写:root(或你的数据库账号)” echo -e ” 数据库密码填写:[你输入的防护密码]” echo -e “==================================================”


如何运行该脚本: 赋予脚本执行权限:


Bash sudo chmod +x /usr/local/bin/deploy-adminer.sh 使用 sudo 运行脚本:


Bash sudo /usr/local/bin/deploy-adminer.sh 按提示输入配置信息:


输入你的 HestiaCP 用户名(如 admin)


输入准备好的完整子域名(如 adminer.example.com)


输入你的防护密码(例如 MySuperPassword123)


脚本将自动全流程配置完成,绝不留手。


你先把脚本保存到服务器上,比如: /usr/local/bin/deploy-adminer.sh


然后赋予执行权限,sudo chmod +x /usr/local/bin/deploy-adminer.sh。


然后运行它,sudo /usr/local/bin/deploy-adminer.sh。


脚本会问你几个问题,你输入HestiaCP用户名、域名、认证用户名和密码,然后就等着就行了。


整个过程大概一两分钟,脚本会自动处理所有事情,你不需要手动执行任何命令。


做完之后,你就可以通过https://你的域名/index.php访问Adminer了。


一些你可能关心的问题


有朋友可能会问,这个脚本支持多PHP版本吗?


支持的。脚本会自动检测系统上运行的所有PHP-FPM服务,并逐个重载。所以不管你是用PHP 7.4还是PHP 8.2,都没问题。


还有朋友可能会问,如果我想换密码怎么办?


很简单,重新运行脚本就行了。脚本会重新生成密码Hash,重新配置Nginx认证,重新配置Fail2Ban。旧的配置会被覆盖。


那如果我想卸载呢?


你就手动删除Web根目录、密码文件和Fail2Ban配置就行了。脚本不会在系统上留下其他痕迹。


写在最后


我一直觉得,运维这件事,不应该那么复杂。


很多手动操作,其实都可以用脚本来自动化。这样你就能把时间花在更重要的事情上,比如优化服务器性能,比如监控应用状态,比如研究新技术。


这让我想起了一个历史故事,1880年代,电力开始在美国普及,当时很多工厂主花大价钱买了发电机和电动机,装在自己的工厂里。但是装完之后,很多人发现生产效率并没有显著提升。因为他们只是用电动机替代了蒸汽机,但整个工厂的布局、流程、管理方式都没有变。


真正吃到电力红利的人,是那些最早想明白,电力到底意味着什么的那波人。他们重新设计了生产线,重新规划了车间布局,重新组织了工人的工作方式。


运维自动化也是一样。很多人知道可以用脚本,但还是习惯手动操作,就像当年那些工厂主,知道有电动机,但还是用蒸汽机的思维来使用它。脚本不是用来替代你的判断力的,而是把那些重复的、机械的、容易出错的事情自动处理掉,让你能把精力放在真正需要思考的地方。


这个脚本就是这样诞生的。它解决了我自己的一个痛点,我也希望它能帮到你。


如果你也在用HestiaCP,也在用Adminer,不妨试试这个脚本。说不定,它能帮你省下不少时间。


以上,既然看到这里了,如果觉得不错,随手点赞、转发吧,如果想第一时间收到推送,也可以给我个关注~


谢谢你看我的文章,我们,下次再见。





欢迎转载《HestiaCP一键自动化部署Adminer脚本(含 Nginx 认证 + Fail2Ban 双重防护)

欢迎分享本文链接:https://www.chenweiliang.com/cwl-34395.html


网站地址:https://www.chenweiliang.com/



欲获取更多资讯内幕和秘技,欢迎进入Telegram频道:https://www.chenweiliang.com/go/tgchannel

2026年7月23日星期四

阿里千问AI输入法CosyVoice实测:解放双手,开口即出稿,流畅度远超预期

原文链接:https://www.chenweiliang.com/cwl-34393.html


想要体验真正的解放双手吗?本文深度实测阿里千问AI输入法CosyVoice,带你见证”开口就能出稿”的极致丝滑体验。无论你是自媒体写作者、职场白领还是高效生产力追求者,这篇CosyVoice功能评测与使用教程将告诉你它是否真的好用、怎么用才能让效率翻倍,立即解锁全新AI语音码字黑科技!


写稿这件事,很多人都经历过”语音输入的坑”。说完一大段话,满屏都是”嗯””那个””就是说”,删到心态爆炸。直到阿里千问输入法(CosyVoice)出现,我才发现,原来语音输入也能做到真正的”说得随意,写得漂亮”。


阿里千问AI输入法CosyVoice界面展示


第一轮体验:干净稿一键生成,填充词瞬间消失


传统语音输入最大的痛点,就是填充词满天飞。开会时记笔记,嘴巴说一堆,结果文字乱七八糟。


我试着用千问输入法说了一段话:


“嗯……那个……下周的项目进度汇报,啊,请大家提前做好数据准备,嗯,务必不要遗漏。”


结果屏幕上直接出现:


“下周的项目进度汇报,请大家提前做好数据准备,务必不要遗漏。”


所有口头禅瞬间消失,像有人帮我擦干净稿子。更惊喜的是,它还能自动整理成列表:



  1. 提报项目进度汇报

  2. 完成需求方案

  3. 确定市场推广方案


这一刻,我真切感受到它和传统语音输入完全不是一个物种。


CosyVoice自动去除填充词效果对比


第二轮体验:改口无痕,口述秒变正式邮件


我故意测试它的纠错能力:


“明天会议在三楼的二号会议室——不对不对,改成三楼的三号会议室。”


它直接输出:”明天会议的地点为三楼三号会议室。”

改口痕迹完全不留,就像和人对话一样自然。


更让我惊讶的是,它能把口述直接变成邮件。我说:


“你帮我把这段话写成邮件正式格式——关于Q3品牌推广计划,我想约张总周四下午3点开会,如果他不方便也可以协调。”


几秒钟后,一封完整的邮件生成:


主题:关于「Q3品牌推广计划」的沟通邀请


张总,你好:


为了更好地推进该计划,想跟你当面沟通几个关键点。不知你本周四下午3:00是否方便?如时间不便,欢迎你给出方便的时段,我来协调。


谢谢!

市场部 小李


过去写这种邮件至少要三五分钟,现在十秒钟搞定,效率提升不是一星半点。


CosyVoice语音改口纠错与邮件生成功能演示


第三轮体验:方言识别全搞定,数字格式自动转换


语音输入的另一大难题是方言。结果CosyVoice也能轻松搞定。


上海朋友说:”今朝天气邪气好,阿拉去外滩孛相吧。”

它转写成:”今天天气真好,我们去外滩游玩吧。”


不仅能听懂上海话,粤语、四川话也不在话下。对于跨地区沟通的职场人来说,这功能简直是救命稻草。


更妙的是,它能自动识别数字格式。比如说”百分之十二点六”,直接转成”12.6%”;说”三点五八亿”,自动变成”3.58亿”。金融、数据类场景再也不用手动修改。


CosyVoice方言识别与数字格式化功能


第四轮体验:热词Skill补救小众词汇识别


当然,它也不是完美无缺。小众专有名词识别还有点欠火候。比如我说”读佳”,它识别成”独家”,意思完全跑偏。


好在官方提供了”热词Skill”功能,可以手动添加专属词汇。加进去之后,准确率明显提升。算是一个实用的补救方案。


CosyVoice热词Skill功能设置界面


实测总结:语音输入从备选项到主力方案的跃迁


测下来最大的感受是:千问输入法不是在”转写声音”,而是在”理解你想说什么”。



  • 自动去掉填充词,告别手动删改

  • 改口无痕,像跟真人对话一样自然

  • 口述直接成邮件,十秒出稿


这三大能力叠加,让语音输入从一个”备选项”变成了真正的”主力方案”。


它的价值不在于让人觉得”技术很牛”,而在于让人觉得”真好使”。这才是AI输入法该有的样子。


结语:语音输入的未来已来,真正的智能是让人觉得好用


在信息爆炸的时代,效率就是生产力。阿里千问输入法CosyVoice用”丝滑”的体验告诉我们,语音输入不再是鸡肋,而是能真正改变工作方式的工具。


它让我们从繁琐的编辑中解放出来,把注意力集中在内容本身。


未来的写作,不再是手指在键盘上的敲击,而是思想与语言的直接流动。


真正的智能,不是炫技,而是让人觉得好用。


官网:阿里千问输入法CosyVoice





欢迎转载《阿里千问AI输入法CosyVoice实测:解放双手,开口即出稿,流畅度远超预期

欢迎分享本文链接:https://www.chenweiliang.com/cwl-34393.html


网站地址:https://www.chenweiliang.com/



欲获取更多资讯内幕和秘技,欢迎进入Telegram频道:https://www.chenweiliang.com/go/tgchannel

2026年7月22日星期三

夸克中国手机号被注册了怎么申诉?呗非本人注册的快速注销通道

原文链接:https://www.chenweiliang.com/cwl-34384.html


有人用你的手机号注册了夸克账号?这就像有人偷偷拿走了你家钥匙,随时可能闯进你的私人空间。⚡这不仅是隐私的威胁,更可能带来安全隐患。


现在我们就来聊聊:当夸克中国手机号被非本人注册时,如何快速申诉、注销,守护属于你的数字领地。


一、为什么会出现手机号被注册的问题?


很多人第一次遇到这种情况时,都会觉得莫名其妙。其实原因很简单:



  • 共享接码平台:有人为了省事,用公开的在线接码平台来注册账号,结果手机号被反复使用,导致他人也能登录。

  • 信息泄露:手机号在某些场景下被泄露,黑客或不法分子拿来批量注册账号。

  • 误操作:别人输入手机号时输错,结果误注册到你的号码。


这就像你没给别人钥匙,但有人却复制了一把备用钥匙,随时可能打开你的门。


二、夸克非本人注册账号,官方快速申诉注销完整流程


遇到手机号被他人私自注册夸克账号的情况,不用被动妥协,平台官方提供了专属申诉注销通道,普通人也能自主操作。


根据工信部《互联网账号个人信息保护规范》明确规定,用户对本人实名手机号拥有专属使用权,可申请注销他人冒用本人号码注册的网络账号。这一规范明确了用户的合法权益,也是我们申诉注销非本人账号的权威依据,申诉成功率极高。


夸克中国手机号被注册了怎么申诉?呗非本人注册的快速注销通道


详细操作流程:



  • 第一步: 打开夸克APP,在登录页面选择“手机号登录”,输入自己被占用的中国手机号。

  • 第二步: 点击获取验证码,页面会弹出“手机号已注册”提示,此时直接点击页面下方的“账号异常/非本人注册”入口。

  • 第三步: 进入申诉页面后,如实填写个人信息,上传本人手机号运营商实名账单、身份证实名信息作为归属证明。

  • 第四步: 提交申诉申请后,夸克官方审核团队会在1到3个工作日内完成核验。

  • 第五步: 审核通过后,系统会自动注销该非本人注册的夸克账号,彻底释放你的手机号绑定权限。


温馨提示: 整个流程全程线上自主操作,无需线下提交材料,是目前最快、最正规的注销方式。如果线上申诉入口无响应,也可以通过夸克官方在线客服渠道,提交手机号归属证明和申诉诉求,申请人工协助注销。


三、为什么不要用共享接码平台


很多人图方便,用共享接码平台来接收验证码。看似省钱,实则风险极大:



  • 账号被盗:验证码同时被多人看到,别人可以轻松登录你的账号。

  • 隐私泄露:你的注册信息可能被公开,甚至被倒卖。

  • 无法申诉:因为号码不属于你,申诉时无法提供有效证明。


这就像你把家门钥匙放在公共储物柜里,谁都能拿走,安全完全没有保障。


四、私人虚拟手机号的隐私保护优势


立即点击下方链接,通过可信赖的途径获取私人的中国虚拟手机号码吧 ▼





相比共享平台,使用私人的虚拟中国手机号才是真正的安全之道:



  • 独享号码:只有你能使用,别人无法登录。

  • 隐私保护:避免骚扰电话和垃圾短信。

  • 长期绑定:能稳定绑定夸克账号,避免因换机或注销而丢失。


想象一下,你的夸克账号就像一个珍贵的宝箱,里面装满了生活点滴和美好回忆。📸🎁

而虚拟手机号就是那把独一无二的钥匙,别人想打开?门都没有!🔑🚪


五、虚拟手机号的续费提醒


很多人忽视了一个关键点:虚拟手机号需要定期续费。



  • 到期前提醒:建议用日历软件设置到期前3天提醒。

  • 避免注销风险:号码一旦注销,账号就无法找回。

  • 持续安全保障:定期续费,就像给账号加固防护墙。


这就像给你的账号穿上一件隐形斗篷,保护隐私的同时,还能让你在夸克的世界里自由翱翔。🧙️✈


六、结语:数字时代的安全哲学


手机号不仅是通讯工具,更是你数字身份的入口。

一旦被他人注册,就像有人在你的人生档案里乱写乱画,后果不堪设想。


所以,选择安全的注册方式,使用私人的虚拟中国手机号,定期续费并做好提醒,才是长久之计。


真正的安全,不是临时的补救,而是长期的守护。

让你的夸克账号成为一个真正的宝箱,只有你能开启,只有你能掌控。


立即点击下方链接,通过可信赖的途径获取私人的中国虚拟手机号码吧 ▼








欢迎转载《夸克中国手机号被注册了怎么申诉?呗非本人注册的快速注销通道

欢迎分享本文链接:https://www.chenweiliang.com/cwl-34384.html


网站地址:https://www.chenweiliang.com/



欲获取更多资讯内幕和秘技,欢迎进入Telegram频道:https://www.chenweiliang.com/go/tgchannel