# 环境变量

> 如何在 Daki Hosting 上使用 .env 文件为你的应用配置环境变量。

环境变量可以让你把配置值（例如 Discord 机器人令牌或 API 密钥）传递给应用，而无需将它们硬编码在源代码中。在 Daki Hosting 上，推荐的做法是直接在服务器上使用 门户的文件管理器或 SFTP 创建一个 **`.env` 文件**。

## 你将学到

- 什么是环境变量，以及它们为何重要
- 如何在服务器上创建 `.env` 文件
- 如何在 Node.js 和 Python 中加载 `.env` 的值
- 保持机密安全的最佳实践

---

## 什么是环境变量？

环境变量是键值对，运行中的应用可以从其运行环境中读取。它们是以下场景的标准方式：

- 将敏感值（令牌、API 密钥、密码）与代码分开存储
- 无需修改或重新部署源文件即可更改配置
- 避免将机密提交到版本控制中

---

## 创建 `.env` 文件

在 Daki 上管理环境变量最简单、最可靠的方法是在服务器上创建一个 `.env` 文件。你可以通过两种方式完成：

### 方式一：使用文件管理器（快速编辑）

1. 在门户（[portal.daki.cc](https://portal.daki.cc)）中打开你的服务器。
2. 进入 **Files** 标签页。
3. 点击 **New File**，并将其命名为 `.env`。
4. 点击该文件，在网页编辑器中打开它，并添加你的变量：
   ```
   BOT_TOKEN=your_discord_bot_token_here
   PORT=3000
   DATABASE_URL=your_db_connection_string
   ```
5. 点击 **Save**。
6. 重启你的服务器。

### 方式二：使用 SFTP（推荐用于初次设置）

通过 SFTP 连接到你的服务器（凭据位于 **Settings** 标签页），然后直接从本地计算机上传你的 `.env` 文件。SFTP 设置说明参见[文件管理器](https://daki.cc/zh/wiki/guides/file-manager)。

> **警告:** 切勿将 `.env` 文件提交到公开的 Git 仓库。请将 `.env` 添加到 `.gitignore` 文件中，以防止机密意外泄露。

---

## 在应用中加载 `.env` 的值

应用不会自动读取 `.env` 文件 — 你需要一个库将它们加载到环境变量中。

**Node.js（dotenv）**

安装该包（将其添加到 `package.json` 的依赖中）：
```json
{
  "dependencies": {
    "dotenv": "^16.0.0"
  }
}
```
在入口文件的最顶部加载它：
```js
require('dotenv').config();

const token = process.env.BOT_TOKEN;
const port  = process.env.PORT || 3000;
```

**Python（python-dotenv）**

将 `python-dotenv` 添加到你的 `requirements.txt`：
```
python-dotenv
```
在入口文件的顶部加载它：
```python
from dotenv import load_dotenv
import os

load_dotenv()

token = os.environ.get("BOT_TOKEN")
port  = int(os.environ.get("PORT", 3000))
```

---

## `.env` 文件格式

`.env` 文件中的每一行都遵循 `KEY=VALUE` 格式：

```

# Comments start with a hash

BOT_TOKEN=your_token_here

API_KEY=some_api_key

DB_HOST=localhost

DB_PORT=5432

DEBUG=false

```
- 键名通常为大写字母并使用下划线分隔。
- 值不需要引号，但也支持使用引号。
- 以 `#` 开头的行是注释，会被忽略。

---

## 最佳实践

- **切勿在源代码中硬编码令牌或机密**，尤其是当你的代码托管在 GitHub 上时。
- **将 `.env` 添加到 `.gitignore`**，确保它永远不会被意外提交。
- **在服务器上创建 `.env` 文件**，而不是在本地创建 — 或者使用 SFTP 上传本地的 `.env`，并将其排除在版本控制之外。
- 创建或修改 `.env` 文件后，**重启你的服务器**。
- 使用**描述性的键名**，让你的配置本身就具有说明性。

---

## 下一步

- [启动设置](https://daki.cc/zh/wiki/guides/startup-settings) — 配置安装命令、启动命令和 Docker 镜像。
- [部署 Discord.js 机器人](https://daki.cc/zh/wiki/guides/deploy-discordjs) — 包括令牌设置在内的完整部署流程。
- [部署 Python 机器人](https://daki.cc/zh/wiki/guides/deploy-python) — 包括令牌设置在内的完整部署流程。

---
Source: https://daki.cc/zh/wiki/guides/environment-variables
