为什么选择Google Cloud Run部署Telegram机器人?
Telegram机器人通常在本地服务器或VPS上运行,但Google Cloud Run提供了更灵活、经济的Serverless方案。它支持自动伸缩、按使用量计费,并且无服务器冷启动时间短,非常适合处理Telegram的Webhook请求。本文将带你从零开始,将一个Python Telegram机器人部署到Cloud Run上。
前提条件
- 一个Google Cloud项目,并启用Cloud Run API。
- 安装并配置了Google Cloud SDK(gcloud命令行工具)。
- 准备好Telegram Bot的Token,通过BotFather获取。
- 基本的Docker和Python知识。
第一步:准备Bot代码
我们以python-telegram-bot库为例,创建一个简单的echo机器人。项目结构如下:
my-bot/├── bot.py├── requirements.txt└── Dockerfilebot.py:
import os
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
# 读取环境变量中的Token
TOKEN = os.environ.get("TELEGRAM_TOKEN")
auto start
async def echo(update: Update, context):
await update.message.reply_text(update.message.text)
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", echo))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
app.run_webhook(
listen="0.0.0.0",
port=int(os.environ.get("PORT", 8080)),
url_path=TOKEN,
webhook_url=f"https://{os.environ.get('DOMAIN')}/"
)
if __name__ == "__main__":
main()
requirements.txt:
python-telegram-bot==20.7第二步:编写Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY bot.py .
CMD ["python", "bot.py"]
第三步:构建并上传镜像
使用Cloud Build构建镜像并推送到Artifact Registry:
gcloud builds submit --tag gcr.io/your-project-id/my-telegram-bot如果尚未创建Artifact Registry仓库,也可以使用Google Container Registry(GCR)作为简易方案。
第四步:部署到Cloud Run
部署服务,设置环境变量和内存限制:
gcloud run deploy my-telegram-bot \
--image gcr.io/your-project-id/my-telegram-bot \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--memory 256Mi \
--set-env-vars "TELEGRAM_TOKEN=你的TOKEN" \
--set-env-vars "DOMAIN=你的服务URL"部署完成后,Cloud Run会分配一个默认域名,例如https://my-telegram-bot-xxxx-uc.a.run.app。在命令中,DOMAIN设置为该域名(不要带https://)。
第五步:配置Webhook
使用curl设置Webhook:
curl -F "url=https://my-telegram-bot-xxxx-uc.a.run.app/YOUR_TOKEN" https://api.telegram.org/botYOUR_TOKEN/setWebhook验证Webhook是否成功:
curl https://api.telegram.org/botYOUR_TOKEN/getWebhookInfo第六步:环境变量与安全建议
- 不要硬编码Token:在Cloud Run中,可以使用Secret Manager存储敏感信息,并将其挂载为环境变量。
- 限流与防护:虽然Cloud Run默认允许公开访问,但建议将服务设置为“允许内部”或通过负载均衡添加访问控制,避免恶意请求。
- 日志监控:Cloud Run自动收集日志,可通过Cloud Logging查看Bot的运行状态。
- 自动扩缩容:设置最小实例为0,节省成本;设置最大实例数,防止突发流量压垮服务。
总结
通过Google Cloud Run部署Telegram机器人,你无需管理服务器即可获得自动缩放和按需付费的便利。本文示例使用了Webhook模式,相比长轮询更高效且适合Serverless环境。你可以在同一服务基础上扩展更多功能,例如数据库连接、定时任务等。现在,快去体验Cloud Run带来的弹性部署吧!