[go] 如何在VDS上部署Telegram机器人(Golang实现)
[go] 如何在VDS上部署Telegram机器人(Golang实现) 如何在VDS服务器(Ubuntu系统)上部署Telegram机器人(Go语言)?我遇到了错误(需要帮助)… 出现错误(dial tcp…),但在我的Mac+VPN环境下运行正常…如何正确部署我的机器人?
// 代码示例请在此处添加
我自己编辑了IP地址…
更多关于[go] 如何在VDS上部署Telegram机器人(Golang实现)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
那么,在你和目标地址之间存在某种数据包过滤器。
你真是个天才!)) 简单的方法更换托管 😊 感谢各位,我更换了托管,现在一切运行正常
不,Telegram在俄罗斯被封锁了,我不知道如何在VDS上部署Telegram机器人(
嗯,如果您的服务器位于俄罗斯,您需要先通过VPN连接到俄罗斯境外。不过我不确定这样做是否合法。如果您的服务器位于俄罗斯境外,应该可以直接使用,前提是没有其他网络问题。
该IP地址以330结尾,这显然是无效的。
我的DNS查询显示,api.telegram.org的IP地址是149.154.167.220,所以或许可以从那里开始排查。 请检查/etc/resolv.conf文件查看您的域名服务器配置。
ext:
在VDS服务器上
你所说的"VDS"服务器是什么意思?
ext:
我遇到了错误(需要帮助)… 错误(dial tcp…)
有很多以"dial TCP"或类似内容开头的错误,你能说得更明确一些吗?
NobbZ:
你所说的"vds"服务器是指什么?
虚拟专用服务器,
bot, err := tgbotapi.NewBotAPI("mytoken")
if err != nil {
log.Panic(err)
}
错误:
2019/04/21 20:07:42 Post https://api.telegram.org/mytoken/getUpdates: dial tcp 149.124.167.330:443: connect: connection refused
在VDS上部署Go语言实现的Telegram机器人时,dial tcp错误通常与网络连接、防火墙或代理设置有关。以下是一个完整的部署方案和错误排查步骤:
1. 基础部署代码示例
package main
import (
"log"
"net/http"
"os"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
func main() {
bot, err := tgbotapi.NewBotAPI(os.Getenv("TELEGRAM_BOT_TOKEN"))
if err != nil {
log.Panic("Bot API初始化失败:", err)
}
bot.Debug = true
log.Printf("已授权账号: %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates {
if update.Message != nil {
log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text)
msg.ReplyToMessageID = update.Message.MessageID
if _, err := bot.Send(msg); err != nil {
log.Printf("发送消息失败: %v", err)
}
}
}
}
2. 系统配置和网络排查
# 检查网络连通性
curl -I https://api.telegram.org
nc -vz api.telegram.org 443
# 检查系统代理设置
env | grep -i proxy
# 检查防火墙规则
sudo ufw status
sudo iptables -L
# 必要时的防火墙开放
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
3. 使用HTTP客户端自定义配置
package main
import (
"net"
"net/http"
"time"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
func createCustomClient() *http.Client {
return &http.Client{
Timeout: time.Second * 30,
Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
TLSHandshakeTimeout: 10 * time.Second,
},
}
}
func main() {
client := createCustomClient()
bot, err := tgbotapi.NewBotAPIWithClient(
os.Getenv("TELEGRAM_BOT_TOKEN"),
tgbotapi.APIEndpoint,
client,
)
if err != nil {
log.Panic("Bot创建失败:", err)
}
// ... 其余代码同上
}
4. 完整的部署脚本
#!/bin/bash
# deploy_bot.sh
# 设置环境变量
export TELEGRAM_BOT_TOKEN="your_bot_token_here"
# 更新系统并安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl
# 安装Go
wget https://golang.org/dl/go1.19.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
source ~/.profile
# 部署应用
git clone your-bot-repo.git
cd your-bot-repo
go mod tidy
go build -o telegram-bot
# 使用systemd运行服务
sudo tee /etc/systemd/system/telegram-bot.service > /dev/null <<EOF
[Unit]
Description=Telegram Bot Service
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/your-bot-repo
Environment=TELEGRAM_BOT_TOKEN=your_bot_token_here
ExecStart=/home/ubuntu/your-bot-repo/telegram-bot
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable telegram-bot
sudo systemctl start telegram-bot
5. 连接测试代码
// connectivity_test.go
package main
import (
"net"
"testing"
"time"
)
func TestTelegramAPIConnection(t *testing.T) {
timeout := 10 * time.Second
conn, err := net.DialTimeout("tcp", "api.telegram.org:443", timeout)
if err != nil {
t.Fatalf("连接Telegram API失败: %v", err)
}
defer conn.Close()
t.Log("Telegram API连接测试通过")
}
运行测试:
go test -v connectivity_test.go
关键排查点:
- 确保VDS的DNS解析正常:
cat /etc/resolv.conf - 检查VPS供应商的网络策略(某些供应商可能限制出站连接)
- 验证时区设置:
timedatectl status - 使用
strace跟踪系统调用:strace -f -e network ./your-bot
按照以上步骤部署和排查,应该能解决dial tcp连接问题。如果问题持续存在,需要检查VPS供应商的具体网络限制政策。

