# 設定

本頁列出環境變數、程序管理設定與儲存目錄配置。

## 環境變數（`app/.env`）

| 變數 | 必要 | `.env` 值 | 說明 |
|---|---|---|---|
| `NODE_PORT` | 是 | `8080` | Express 監聽埠；須與 Nginx `proxy_pass` 的埠號一致 |
| `NODE_ENV` | 否 | `production` | `development` 時上傳回應的 `src` 使用 `http://localhost:8080/c/img`，否則使用 `https://${DOMAIN}/c/img` |
| `DOMAIN` | `NODE_ENV` 非 `development` 時 | — | 組成上傳回應 `src` 的對外網域 |

`.env` 由 `dotenv` 載入，不覆蓋已存在的環境變數；`docker-compose.yaml` 設定 `NODE_ENV: development`，因此容器內以 compose 的值為準。正式環境請改 compose 的 `environment` 區塊並設定 `DOMAIN`。

## 程序管理

| 項目 | 設定 | 位置 |
|---|---|---|
| 啟動 | `pm2-runtime` 以 `./node_modules/.bin/ts-node -r tsconfig-paths/register` 執行 `app.ts` | `app/app.json` |
| PM2 日誌 | `storage/logs/out.log`、`storage/logs/err.log` | `app/app.json` |
| Cluster | CPU 數大於 1 時，主程序 fork `max(CPU 數, 4) - 1` 個 worker，worker 退出時立即補位；主程序本身不監聽 | `app/app.ts` |
| 單核 | CPU 數為 1 時不 fork，由同一程序監聽 | `app/app.ts` |
| 結束訊號 | `SIGINT`／`SIGTERM`／`SIGHUP` 時終止所有 worker 後結束 | `app/app.ts` |
| 路徑別名 | `@middlewares`、`@router`、`@src` | `app/tsconfig.json` |

## 儲存目錄

| 容器內路徑 | 主機掛載（Docker Compose） | 用途 |
|---|---|---|
| `storage/image/upload/` | `./image/upload/` | 原始上傳檔 |
| `storage/image/cache/` | `./image/cache/` | 轉檔快取檔 |
| `storage/image/upload/.trash/` | `./image/upload/.trash/` | 刪除項目 |
| `storage/logs/` | `./logs/nodejs/` | `req.log`（每 3 天輪替）與 PM2 日誌 |
| `storage/static/` | 不掛載（隨程式碼） | `404-light.svg`、`404-dark.svg` |

Nginx 日誌掛載於 `./logs/nginx/`。

## 相關頁面

- Nginx 路由與快取：[Nginx](/zh/deployment-nginx)
