---
title: "有狀態應用程式"
description: "使用資料庫模板部署本地持久化應用程式，並規劃升級、故障處理和資料保護。"
---

> Documentation Index
> Fetch the complete documentation index at: https://cdelivery.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 有狀態應用程式

資料庫等應用程式依賴持續儲存的狀態。CDelivery 的本地資料部署方式將應用程式固定到一台伺服器並使用一個副本，便於明確資料位置。

## 部署 PostgreSQL 示例

1. 由管理員在目標伺服器建立一個資料卷，例如 `postgres-data`。
2. 在業務分組中建立應用程式，選擇 PostgreSQL 18 模板。
3. 確認模板中的映像檔、`POSTGRES_USER`、`POSTGRES_DB` 和 `POSTGRES_PASSWORD`。
4. 選擇目標伺服器，將資料卷掛載到模板設定的資料目錄。
5. 如果資料庫只供組內應用程式使用，移除對外發佈連接埠。
6. 建立後檢查初始化日誌，並從同分組應用程式連接資料庫。

PostgreSQL 18 模板掛載 `/var/lib/postgresql`，保留映像檔預設的 `PGDATA`。MariaDB 12 模板掛載 `/var/lib/mysql`。修改映像檔或環境變數後，應重新核對實際資料路徑和初始化規則。

模板生成的密碼需要自行妥善儲存。資料庫已初始化後，修改某個初始化環境變數不一定會更改已有資料庫帳戶，必須依據資料庫自身的管理方法處理。

## 當前部署限制

| 能力 | 本地資料應用程式 |
| --- | --- |
| 執行副本 | 固定 1 |
| 伺服器 | 固定到建立時選擇的伺服器 |
| 自動擴縮容 | 不使用 |
| XConfig | 不能同時使用 |
| Guardian | 不支援 |
| 資料複製與自動接管 | 不由本地資料掛載自動提供 |

業務檢查可用於觀察資料庫或應用程式狀態。

## 升級前檢查

1. 核對資料庫版本間的資料格式與升級要求。
2. 完成可恢復的資料庫備份，並驗證恢復方法。
3. 安排允許中斷的維護時間，確認沒有不必要的併發寫入。
4. 檢查新舊進程同時存取資料目錄是否安全，謹慎選擇更新順序。
5. 更新後驗證資料、帳戶、業務連接及日誌。

> **Caution**
>
> 先啟動新副本可能導致兩個進程同時嘗試存取同一份本地資料。不要將無狀態 Web 應用程式的更新策略直接用於資料庫。

## 故障與清理

目標伺服器離線時，先判斷機器和存儲是否可恢復；不能簡單地把應用程式調度到另一台伺服器並期望相同卷名帶來原資料。需要遷移時，採用資料庫導出、備份恢復等明確流程，並重新核對新應用程式設定。

刪除應用程式會保留卷。確認備份和保留期限後，再由管理員在[資料卷管理](/docs/zh-tw/administration/nodes/volumes/)中清理不再需要的資料。不要把應用程式刪除、設定回復或映像檔降級當作資料庫恢復機制。

Source: https://cdelivery.dev/docs/zh-tw/guides/apps/persistence/stateful/index.mdx
