# 設定

Chamilo 2.0 使用環境變數和 Symfony 配置文件來進行核心設置。本頁面涵蓋了主要的配置文件和變數。

## 環境變數 (.env)

主要的配置文件是位於 Chamilo 根目錄下的 `.env` 檔案。此檔案包含特定環境的設置，不應提交到版本控制中。

Chamilo 提供了一個預設的 `.env.dist` 檔案，其中包含了有說明文件的預設值。請創建 `.env` 檔案（啟動安裝時必須有此檔案）以覆蓋您環境中的值。

### 主要變數

| 變數                  | 描述                                                                  | 範例                |
| ------------------- | ------------------------------------------------------------------- | ----------------- |
| `APP_ENV`           | 應用程式環境，在 Symfony 層級上。生產環境使用 `prod`，開發環境使用 `dev`，測試環境使用 `test`。      | `prod`            |
| `APP_SECRET`        | 用於 CSRF 令牌、Cookie 簽名和其他加密操作的隨機字串。Chamilo 會為每次安裝生成唯一值，請勿修改。          | `a1b2c3d4e5f6...` |
| `DATABASE_HOST`     | 資料庫主機，預設為 localhost。                                                | `localhost`       |
| `DATABASE_PORT`     | 資料庫端口，MySQL/MariaDB 預設為 3306。                                       | `3306`            |
| `DATABASE_NAME`     | 資料庫名稱，由您在安裝精靈中提供。                                                   | 見下文。              |
| `DATABASE_USER`     | 資料庫使用者名稱，由您在安裝精靈中提供。                                                | 見下文。              |
| `DATABASE_PASSWORD` | 資料庫使用者的密碼，由您在安裝精靈中提供。                                               | 見下文。              |
| `TRUSTED_PROXIES`   | （可選）如果您將 Chamilo 託管在反向代理後面，需在此提供反向代理的 IP 地址，以便 Chamilo 正確解釋請求並生成回應。 |                   |

.env 中的其他設置相對較少被修改。

請注意，在未來的版本中，DATABASE\_\* 設置將合併為單一的 `DATABASE_URL` 變數。

電子郵件發送配置會在安裝過程中顯示，但稍後可在管理儀表板的「平台設置」部分進行修改。

## Symfony 配置 (config/ 目錄)

Symfony 層級的配置位於 `config/` 目錄中。這些 YAML 檔案控制框架行為、服務定義和套件特定設置。

修改這些檔案並不常見，且更改可能導致您的入口網站無法運作，因此如果您必須確保系統的可用性，請勿嘗試修改這些檔案。

### 主要配置文件

| 檔案                               | 用途                                    |
| -------------------------------- | ------------------------------------- |
| `config/authentication.yaml`     | 認證方法配置。                               |
| `config/packages/doctrine.yaml`  | 資料庫和 ORM 配置。                          |
| `config/packages/security.yaml`  | 認證、防火牆、存取控制和角色層級。                     |
| `config/packages/cache.yaml`     | 快取適配器配置（檔案系統、APCu、Redis）。             |
| `config/packages/framework.yaml` | 一般 Symfony 框架設置（會話、CSRF、路由器、HTTP 快取）。 |
| `config/packages/twig.yaml`      | 模板引擎配置。                               |
| `config/services.yaml`           | 應用程式服務定義和依賴注入。                        |

### 環境特定覆蓋

Symfony 支援針對不同環境的配置。當 `APP_ENV=prod` 時，`config/packages/prod/` 中的檔案會覆蓋預設值；當 `APP_ENV=dev` 時，`config/packages/dev/` 中的檔案會覆蓋預設值。

例如，`config/packages/prod/monolog.yaml` 通常配置的日誌詳細程度比開發環境的對應檔案低。

Chamilo 本身在軟體中未定義 `config/packages/prod/` 中的任何配置，因此如果您想自訂 `config/packages/*.yaml` 中的設置，只需在該目錄內創建 yaml 檔案的副本並更改設置即可。

## 檔案權限

我們在 2.0+ 版本中努力確保只有單一目錄需要權限。這是 `var/` 目錄，為了避免複雜問題，只需將整個資料夾設置為可由網頁伺服器系統使用者寫入即可。

在基於 Debian 的系統上適當設置權限：

```bash
# 對於網頁伺服器以 www-data 身份運行的系統
chown -R www-data:www-data var/
chmod -R 775 var/
```

## 常見配置任務

### 切換到生產模式

```bash
# 在 .env 中
APP_ENV=prod
APP_DEBUG=0
```

然後清除並預熱快取：

```bash
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
```

### 配置受信任的代理

如果 Chamilo 在反向代理或負載平衡器後面運行，配置受信任的代理以便 HTTPS 檢測和客戶端 IP 解析正確運作：

```yaml
# .env
TRUSTED_PROXIES='127.0.0.1,PROXY_IP'
```

### 配置會話儲存

預設情況下，會話儲存在檔案系統上。對於多伺服器部署，配置 Redis 或資料庫支持的會話：

```yaml
# config/packages/framework.yaml
framework:
    session:
        handler_id: 'redis://localhost:6379'
```

## 提示

* **切勿直接編輯 `.env.dist`** -- 請始終使用 `.env` 來進行您的覆蓋設定。`.env.dist` 文件可能在升級過程中被覆蓋。
* **在生產環境中保持 `APP_DEBUG=0`** -- 除錯模式會在錯誤頁面中暴露敏感資訊。
* **單獨備份 `.env`**，因為它包含憑證資訊且被排除在版本控制之外，應與程式碼庫分開保存。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-zh-tw/guan-li-zhi-nan/admin-guide/installation/configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
