資料庫
新增服務 → 資料庫 列出了 PostgreSQL、MySQL、MariaDB、MongoDB、Redis 和 Valkey。在對應行選擇版本後點選(或按 Enter),資料庫就會被新增並部署。
| 資料庫 | 版本 | 儲存卷 |
|---|---|---|
| PostgreSQL | 18、17、16、15、14 | /var/lib/postgresql(18 及以上)或 /var/lib/postgresql/data |
| MySQL | 8.4 LTS、9、8.0 | /var/lib/mysql |
| MariaDB | 11.8 LTS、11.4 LTS、10.11 LTS | /var/lib/mysql |
| MongoDB | 8.0、7.0、6.0 | /data/db |
| Redis | 8、7.4、7.2 | /data |
| Valkey | 8、7.2 | /data |
每個資料庫都有一個存放資料的儲存卷、一個自動生成的密碼和一個健康檢查。主版本是固定的:以後要升級,需要匯出再還原。
從應用連線
專案中的其他服務透過 <hostname>.zenavo.internal 存取資料庫,並會收到以下變數,變數名取自新增資料庫時它的內部主機名稱(postgresql → POSTGRESQL_…,postgresql-2 → POSTGRESQL_2_…)。其中的主機部分是 ${CONTAINER_HOSTNAME},所以之後修改主機名時會自動跟著變:
| 變數 | 範例 |
|---|---|
<NAME>_CONNECTION_STRING | postgresql://postgres:…@postgresql.zenavo.internal:5432/zenavo |
<NAME>_HOST | postgresql.zenavo.internal |
<NAME>_PORT | 5432 |
<NAME>_DB_PASSWORD | 自動生成的密碼 |
資料庫只在專案內部可存取。要從你的電腦連線,在 網路 中發布一個 TCP 連接埠(TCP 與 UDP 連接埠),或者使用服務的 指令 面板。
資料庫檢視
資料庫服務的 資料庫 分頁展示資料,並在資料庫容器內用資料庫自己的用戶端執行請求:透過容器的本機 socket 或 127.0.0.1 連線,使用服務變數中的憑據。這不需要開放資料庫連接埠,憑據不會傳送到瀏覽器,你輸入的內容也不會經過 shell。
| 誰可以檢視資料 | 團隊的成員、管理員和擁有者。觀察者不能檢視資料。 |
| 誰可以修改資料 | 團隊的管理員和擁有者。 |
| 限制 | 每個資料庫 15 秒、2 MB 輸出,同時最多兩個請求。更長的結果會被截斷並標註。 |
| 稽核日誌 | 每次列表、翻頁、查詢和指令都會記錄在團隊的稽核日誌中,包括服務和請求型別,但不會記錄 SQL、鍵、值、篩選條件或文件,因為其中可能包含機密。 |
用戶端以資料庫的管理使用者執行,而團隊成員本來就可以在 指令 面板中開啟容器的 shell,所以檢視的唯讀模式是為了防止誤操作,並不是沙箱。需要更嚴格隔離的場景,請使用權限更少的資料庫使用者。
PostgreSQL、MySQL 和 MariaDB
分頁列出表和檢視,以及估算的行數和列(主鍵會被標出)。點選一個表可以分頁瀏覽它的行,每頁 100 行;切換到 SQL 可以執行語句並以表格檢視結果。按 ⌘ Enter(Ctrl Enter)執行;選中了文字時,只執行選中的部分。查詢使用 psql,或 mysql / mariadb。
| 預設唯讀 | 語句在唯讀事務中執行,只接受 SELECT、WITH、SHOW、EXPLAIN 和 DESCRIBE。 |
| 寫入 | 團隊管理員或擁有者開啟 允許寫入 後,可以執行 INSERT、UPDATE、DELETE 和表結構變更。它們會立即生效;請先做備份。 |
| 一次一條語句 | 包含多條語句的指令碼、用戶端指令(\!、source、system 等)和 MySQL 可執行註釋(/*! … */)會被拒絕。 |
| 限制 | 語句逾時 15 秒,每次查詢最多 1,000 行。 |
Redis 和 Valkey
鍵 列出鍵及其型別、過期時間和記憶體大小。選擇資料庫(db0、db1 等,列表中會顯示每個庫有多少鍵),輸入匹配模式,例如 user:*。鍵用 SCAN 列出,每次 100 個,從不使用 KEYS(它在大庫上會阻塞伺服器);繼續掃描 會接著列出。點選一個鍵檢視它的值:
| 型別 | 顯示方式 |
|---|---|
| string | 值,最多 256 KB |
| hash | 欄位和值,每次 100 個(HSCAN) |
| list | 元素及其索引,每次 100 個 |
| set | 成員,每次 100 個(SSCAN) |
| sorted set | 按順序顯示成員和分數,每次 100 個 |
| stream | 條目及其欄位,每次 100 個 |
元素超過 4 KB 會被截斷。非文字位元組顯示為 \xHH。模組型別(JSON、時間序列等)只顯示型別和大小;請用它們自己的指令讀取。
指令 執行一條指令,引號規則與 redis-cli 相同:SET "my key" "a value"。按 Enter 執行。指令使用 redis-cli 或 valkey-cli,密碼取自 REDIS_PASSWORD 或 VALKEY_PASSWORD。
| 預設唯讀 | 只接受讀取類指令:GET、HGETALL、LRANGE、SCAN、TTL、INFO 等 |
| 寫入 | 團隊管理員或擁有者開啟 允許寫入 後,可以執行修改鍵和值的指令:SET、DEL、EXPIRE、HSET、LPUSH、ZADD、XADD 等。它們會立即生效。 |
| 始終拒絕 | 影響整個伺服器或其他用戶端的指令:FLUSHALL、FLUSHDB、SWAPDB、CONFIG、SHUTDOWN、DEBUG、MODULE、ACL、CLIENT、MONITOR、SLOWLOG、REPLICAOF / SLAVEOF、MIGRATE、SAVE、BGSAVE、CLUSTER、FAILOVER;KEYS;指令碼(EVAL、EVALSHA、SCRIPT、FUNCTION、FCALL);阻塞指令(BLPOP、XREAD … BLOCK、WAIT 等);發布/訂閱、事務(MULTI、WATCH)和 SELECT。檢視不認識的指令也會被拒絕。 |
其他操作請在 指令 面板中執行 redis-cli 或 valkey-cli。
MongoDB
分頁列出資料庫及其集合,以及估算的文件數(admin、config 和 local 顯示在 系統資料庫 下)。點選一個集合,以 JSON 輸入篩選、排序和投影,例如 {"status": "active"}、{"created": -1} 和 {"name": 1};按 Enter 查詢。文件每次顯示 50 個,格式為寬鬆模式的 Extended JSON:物件 ID 是 {"$oid": "…"},日期是 {"$date": "…"},JavaScript 數字無法精確表示的 64 位整數是 {"$numberLong": "…"}。篩選條件中也使用同樣的形式。請求使用 mongosh,以 MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 登入。
| 查詢 | 篩選、排序和投影各最多 64 KB;每頁最多 500 個文件。超過 256 KB 的文件只顯示 _id;用投影檢視其中一部分。 |
| 修改 | 團隊管理員和擁有者可以 插入 文件,並按 _id 一次更新或刪除一個文件。更新使用運算子($set、$unset、$inc 等);不支援替換整個文件。系統集合不能修改。 |
| 拒絕 | 在伺服器上執行 JavaScript 的運算子($where、$function、$accumulator)。不支援聚合和 runCommand;這些操作請在 指令 面板中使用 mongosh。 |