0
0
mirror of https://gitea.com/gitea/docs.git synced 2025-05-29 02:50:45 +00:00
Files
appleboy dbfa0ba454 docs: add zh-tw folder (#195)
Signed-off-by: appleboy <appleboy.tw@gmail.com>
Reviewed-on: https://gitea.com/gitea/docs/pulls/195
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: appleboy <appleboy.tw@gmail.com>
Co-committed-by: appleboy <appleboy.tw@gmail.com>
2025-04-04 23:28:16 +00:00

173 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: "2017-01-01T16:00:00+02:00"
slug: "backup-and-restore"
sidebar_position: 11
aliases:
- /zh-tw/backup-and-restore
---
# 備份和恢復
Gitea 目前有一個 `dump` 命令,可以將安裝保存到 ZIP 文件中。此文件可以解壓縮並用於恢復實例。
## 備份一致性
為了確保 Gitea 實例的一致性,必須在備份期間關閉它。
Gitea 由數據庫、文件和 git 存儲庫組成,這些都會在使用時發生變化。例如,當遷移正在進行時,數據庫中會創建一個事務,同時 git 存儲庫正在被複製。如果備份發生在遷移過程中git 存儲庫可能不完整,儘管數據庫聲稱它是完整的,因為它是在之後轉儲的。避免此類競爭條件的唯一方法是在備份期間停止 Gitea 實例。
## 備份命令 (`dump`)
切換到運行 Gitea 的用戶:`su git`。在 Gitea 安裝目錄中運行 `./gitea dump -c /path/to/app.ini`。應該會有類似以下的輸出:
```log
2016/12/27 22:32:09 Creating tmp work dir: /tmp/gitea-dump-417443001
2016/12/27 22:32:09 Dumping local repositories.../home/git/gitea-repositories
2016/12/27 22:32:22 Dumping database...
2016/12/27 22:32:22 Packing dump files...
2016/12/27 22:32:34 Removing tmp work dir: /tmp/gitea-dump-417443001
2016/12/27 22:32:34 Finish dumping in file gitea-dump-1482906742.zip
```
`gitea-dump-1482906742.zip` 文件中,將包含以下內容:
- `app.ini` - 如果最初存儲在默認的 `custom/` 目錄之外,則為配置文件的可選副本
- `custom/` - `custom/` 中的所有配置或自定義文件。
- `data/` - 數據目錄APP_DATA_PATH如果您使用文件會話則不包括會話。此目錄包括 `attachments``avatars``lfs``indexers`,如果您使用 SQLite則包括 SQLite 文件。
- `repos/` - 存儲庫目錄的完整副本。
- `gitea-db.sql` - 數據庫的 SQL 轉儲
- `log/` - 各種日誌。它們在恢復或遷移時不需要。
中間備份文件創建在臨時目錄中,可以通過 `--tempdir` 命令行參數或 `TMPDIR` 環境變量指定。
## 備份數據庫
`gitea dump` 創建的 SQL 轉儲使用 XORMGitea 管理員可能更喜歡使用原生的 MySQL 和 PostgreSQL 轉儲工具。使用 XORM 轉儲數據庫時仍然存在一些未解決的問題,這些問題可能會在嘗試恢復時引起問題。
```sh
# mysql
mysqldump -u$USER -p$PASS --database $DATABASE > gitea-db.sql
# postgres
pg_dump -U $USER $DATABASE > gitea-db.sql
```
### 使用 Docker (`dump`)
使用 Docker 執行 `dump` 命令有一些注意事項。
該命令必須以 `gitea/conf/app.ini` 中指定的 `RUN_USER = <OS_USERNAME>` 執行;並且,為了在沒有權限錯誤的情況下壓縮備份文件夾,必須在 `--tempdir` 內執行 `docker exec` 命令。
示例:
```bash
docker exec -u <OS_USERNAME> -it -w <--tempdir> $(docker ps -qf 'name=^<NAME_OF_DOCKER_CONTAINER>$') bash -c '/usr/local/bin/gitea dump -c </path/to/app.ini>'
```
\*注意:`--tempdir` 是指 Gitea 使用的 docker 環境的臨時目錄;如果您未指定自定義 `--tempdir`,則 Gitea 使用 `/tmp` 或 docker 容器的 `TMPDIR` 環境變量。對於 `--tempdir`,請相應地調整您的 `docker exec` 命令選項。
結果應該是一個文件,存儲在指定的 `--tempdir` 中,類似於:`gitea-dump-1482906742.zip`
## 恢復命令 (`restore`)
目前不支持恢復命令。這是一個手動過程,主要涉及將文件移動到正確的位置並恢復數據庫轉儲。
示例:
```sh
unzip gitea-dump-1610949662.zip
cd gitea-dump-1610949662
mv app.ini /etc/gitea/conf/app.ini
mv data/* /var/lib/gitea/data/
mv log/* /var/lib/gitea/log/
mv repos/* /var/lib/gitea/data/gitea-repositories/
chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea
# mysql
mysql --default-character-set=utf8mb4 -u$USER -p$PASS $DATABASE <gitea-db.sql
# sqlite3
sqlite3 $DATABASE_PATH <gitea-db.sql
# postgres
psql -U $USER -d $DATABASE < gitea-db.sql
service gitea restart
```
如果安裝方法更改(例如,二進制 -> Docker或者 Gitea 安裝到與以前不同的目錄,則應重新生成存儲庫 Git Hooks。
在 Gitea 運行並從 Gitea 二進制文件所在的目錄中,執行:`./gitea admin regenerate hooks`
這確保存儲庫 Git Hooks 中的應用程序和配置文件路徑與當前安裝一致且適用。如果這些路徑未更新,存儲庫 `push` 操作將失敗。
如果您仍然有問題,請考慮運行 `./gitea doctor check` 以檢查可能的錯誤(或使用 `--fix` 選項運行)。
### 使用 Docker (`restore`)
在基於 Docker 的 gitea 實例中也不支持恢復命令。恢復過程包含與前一部分中描述的相同步驟,但使用不同的路徑。
示例:
```sh
# 在容器中打開 bash 會話
docker exec --user git -it 2a83b293548e bash
# 在容器內解壓備份文件
unzip gitea-dump-1610949662.zip
cd gitea-dump-1610949662
# 恢復 gitea 數據
mv data/* /data/gitea
# 恢復存儲庫本身
mv repos/* /data/git/gitea-repositories/
# 調整文件權限
chown -R git:git /data
# 重新生成 Git Hooks
/usr/local/bin/gitea -c '/data/gitea/conf/app.ini' admin regenerate hooks
```
gitea 容器中的默認用戶是 `git`1000:1000。請將 `2a83b293548e` 替換為您的 gitea 容器 ID 或名稱。
### 使用 Docker-rootless (`restore`)
Docker-rootless 容器中的恢復工作流程僅在使用的目錄上有所不同:
```sh
# 在容器中打開 bash 會話
docker exec --user git -it 2a83b293548e bash
# 在容器內解壓備份文件
unzip gitea-dump-1610949662.zip
cd gitea-dump-1610949662
# 恢復 app.ini
mv data/conf/app.ini /etc/gitea/app.ini
# 恢復 gitea 數據
mv data/* /var/lib/gitea
# 恢復存儲庫本身
mv repos/* /var/lib/gitea/git/gitea-repositories
# 調整文件權限
chown -R git:git /etc/gitea/app.ini /var/lib/gitea
# 重新生成 Git Hooks
/usr/local/bin/gitea -c '/etc/gitea/app.ini' admin regenerate hooks
```
### 使用 `gitea dump` 轉換數據庫類型
`gitea dump` 命令可以生成一個 SQL 文件,可以由另一種數據庫類型讀取,這在您在第一次安裝期間未選擇正確的數據庫時很有用。
請注意,此轉換過程尚未經過充分測試,因此建議在第一次安裝期間選擇最終的數據庫類型,而不要嘗試之後更改。
停止 Gitea 服務器,然後確保您擁有原始數據庫的完整備份。
在嘗試轉換之前,確保原始數據庫是乾淨的。運行 `gitea doctor check --all --fix``gitea doctor recreate-table` 以解決常見問題。
使用 `--database` 標誌獲取目標格式的 Gitea 轉儲,在此示例中為 PostgreSQL`gitea dump --database postgres`,然後從生成的 ZIP 文件中提取 `gitea-db.sql` 文件。
創建 PostgreSQL Gitea 用戶和 Gitea 數據庫。然後,使用以下命令將 SQL 文件作為 Gitea 用戶導入到 Gitea 數據庫中:
```sh
sudo -u postgres psql -d gitea
gitea=# SET synchronous_commit TO off
gitea=# SET on_error_stop TO on
gitea=# \i gitea-db.sql
```
禁用 `synchronous_commit` 使 PostgreSQL 對崩潰的抵抗力降低,但使導入速度更快。由於我們已經有原始數據庫的備份,並且我們可以檢查導入是否成功完成,因此這應該是一個不錯的權衡。
導入完成後,設置 Gitea 以使用 PostgreSQL 並重新啟動 Gitea 服務器。祝你好運!