跳到正文

部署 Python 机器人

在 Daki Hosting 上部署 Python Discord 机器人(discord.py 或 py-cord)的分步指南。

本指南将带你在 Daki Hosting 上部署一个 Python Discord 机器人 — 从创建服务器,到安全地读取机器人令牌并让机器人上线。

你将学到

  • 如何为你的机器人创建 Python 服务器
  • 如何上传你的代码
  • 如何配置安装命令、启动命令和 Python 版本
  • 如何使用 .env 文件安全地设置机器人令牌
  • 如何启动机器人并验证其运行正常

前提条件

  • 一个 Daki 账户(Free Tier 或付费)— 参见创建账户与登录
  • 一个带有机器人令牌的 Discord 机器人,在 Discord 开发者门户 中创建
  • 你的机器人源代码,包括列出所有依赖的 requirements.txt(例如 discord.py 或 py-cord,以及 python-dotenv)

Discord 机器人会向外连接到 Discord 的服务器,不需要入站端口。这意味着 Discord 机器人在 Free Tier 和付费套餐上都能运行。如果你的机器人还运行 HTTP 服务器(例如用于 Webhook 或 Web 仪表板),则需要付费套餐,因为公网可访问的端口仅在付费套餐中提供。参见网络与端口分配。


部署

  1. 创建 Python 服务器

    1. 在 free.daki.cc 登录 Free Tier Dashboard,或在 billing.daki.cc 登录 Billing Panel。
    2. 创建新服务器,并选择 Python Egg。
    3. 为你的服务器命名(例如 MyPythonBot)。

    完整流程参见创建你的第一个免费服务器。

  2. 访问门户

    通过 SSO 或直接访问 portal.daki.cc 登录 门户。参见门户概览。

  3. 上传机器人代码

    方式 A — 上传 ZIP(最简单):

    1. 将你的项目文件夹压缩为 .zip 文件。
    2. 在门户中进入 Files 标签页,点击 Upload。
    3. 右键点击 .zip 文件,然后点击 Extract。

    方式 B — 使用 SFTP(无大小限制): 使用 Settings 标签页中的 SFTP 凭据直接上传文件夹。参见文件管理器。

    请在项目根目录中包含 requirements.txt。安装命令会使用它来安装你的依赖。

  4. 配置 Startup 标签页

    打开 Startup 标签页,并配置以下三个字段:

    1. Docker Image — 选择你的机器人所需的 Python 版本(例如 Python 3.13)。如果不确定,Python 3.13 是安全的默认选择;只要你的所有库都支持,更新的版本也可以使用。避免选择标记为 EOL 的版本,它们不再接收安全更新。

    2. Install Command — 设置为自动安装依赖:

    Shell
    pip install -r requirements.txt

    3. Startup Command — 设置为运行机器人的命令:

    • python main.py — 如果你的入口文件是 main.py
    • python bot.py — 如果你的入口文件是 bot.py
    • python -m mypackage — 如果你的项目以包的形式组织

    你可以根据项目结构和需求自由调整这些命令。

    完整说明参见启动设置。

  5. 通过 .env 文件添加机器人令牌

    将你的 Discord 机器人令牌保存在服务器的 .env 文件中,这样它就永远不会出现在你的源代码里。

    1. 在 Files 标签页中,点击 New File,并将其命名为 .env。
    2. 添加你的令牌:
      .env
      BOT_TOKEN=your_discord_bot_token_here
    3. 点击 Save。

    确保 python-dotenv 已列在你的 requirements.txt 中,然后在代码中加载该文件:

    Python
    from dotenv import load_dotenv
    import os
    import discord
    
    load_dotenv()
    TOKEN = os.environ.get("BOT_TOKEN")
    
    intents = discord.Intents.default()
    client = discord.Client(intents=intents)
    
    @client.event
    async def on_ready():
        print(f"Logged in as {client.user}")
    
    client.run(TOKEN)

    关于使用 .env 文件的更多信息,参见环境变量。

  6. 启动你的机器人

    在 Console 标签页中点击 Start。成功启动时,会打印:

    Text
    Logged in as MyBot#1234

    如果出现错误,请查看故障排查指南。


常见问题

ModuleNotFoundError: No module named 'discord'

你的依赖没有被安装。请检查 requirements.txt 中是否列出了 discord.py 或 py-cord,并确认 Startup 标签页中的安装命令为 pip install -r requirements.txt。重启服务器以触发安装。

ModuleNotFoundError: No module named 'dotenv'

将 python-dotenv 添加到你的 requirements.txt 中,然后重启服务器。

discord.errors.LoginFailure: Improper token has been passed

.env 文件中的令牌不正确或缺失。在 Files 标签页中打开 .env 文件,仔细检查其值。删除多余的空格或引号。

PrivilegedIntentsRequired error

你的机器人请求了未在 Discord 开发者门户中启用的 Intents。请在你的机器人应用设置中启用所需的特权 Intents(例如 Message Content Intent),并确保你的代码请求的是相同的 Intents。

服务器启动后立即崩溃

阅读 Console 中的错误输出。常见原因:启动命令错误(文件名拼写错误或路径错误)、缺少 requirements.txt,或缺少某个包。参见故障排查。


下一步