19
19
20
20
Gitea 已经实现了 ` dump ` 命令可以用来备份所有需要的文件到一个zip压缩文件。该压缩文件可以被用来进行数据恢复。
21
21
22
+ ## 备份一致性
23
+
24
+ 为了确保 Gitea 实例的一致性,在备份期间必须关闭它。
25
+
26
+ Gitea 包括数据库、文件和 Git 仓库,当它被使用时所有这些都会发生变化。例如,当迁移正在进行时,在数据库中创建一个事务,而 Git 仓库正在被复制。如果备份发生在迁移的中间,Git 仓库可能是不完整的,尽管数据库声称它是完整的,因为它是在之后被转储的。避免这种竞争条件的唯一方法是在备份期间停止 Gitea 实例。
27
+
22
28
## 备份命令 (` dump ` )
23
29
24
30
先转到git用户的权限: ` su git ` . 再Gitea目录运行 ` ./gitea dump ` 。一般会显示类似如下的输出:
@@ -34,15 +40,43 @@ Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一
34
40
35
41
最后生成的 ` gitea-dump-1482906742.zip ` 文件将会包含如下内容:
36
42
37
- * ` custom ` - 所有保存在 ` custom/ ` 目录下的配置和自定义的文件。
38
- * ` data ` - 数据目录下的所有内容不包含使用文件session的文件。该目录包含 ` attachments ` , ` avatars ` , ` lfs ` , ` indexers ` , 如果使用sqlite 还会包含 sqlite 数据库文件。
43
+ * ` app.ini ` - 如果原先存储在默认的 custom/ 目录之外,则是配置文件的可选副本
44
+ * ` custom/ ` - 所有保存在 ` custom/ ` 目录下的配置和自定义的文件。
45
+ * ` data/ ` - 数据目录(APP_DATA_PATH),如果使用文件会话,则不包括会话。该目录包括 ` attachments ` 、` avatars ` 、` lfs ` 、` indexers ` 、如果使用 SQLite 则包括 SQLite 文件。
46
+ * ` repos/ ` - 仓库目录的完整副本。
39
47
* ` gitea-db.sql ` - 数据库dump出来的 SQL。
40
- * ` gitea-repo.zip ` - Git仓库压缩文件。
41
48
* ` log/ ` - Logs文件,如果用作迁移不是必须的。
42
49
43
50
中间备份文件将会在临时目录进行创建,如果您要重新指定临时目录,可以用 ` --tempdir ` 参数,或者用 ` TMPDIR ` 环境变量。
44
51
45
- ## Restore Command (` restore ` )
52
+ ## 备份数据库
53
+
54
+ ` gitea dump ` 创建的 SQL 转储使用 XORM,Gitea 管理员可能更喜欢使用本地的 MySQL 和 PostgreSQL 转储工具。使用 XORM 转储数据库时仍然存在一些问题,可能会导致在尝试恢复时出现问题。
55
+
56
+ ``` sh
57
+ # mysql
58
+ mysqldump -u$USER -p$PASS --database $DATABASE > gitea-db.sql
59
+ # postgres
60
+ pg_dump -U $USER $DATABASE > gitea-db.sql
61
+ ```
62
+
63
+ ### 使用Docker (` dump ` )
64
+
65
+ 在使用 Docker 时,使用 ` dump ` 命令有一些注意事项。
66
+
67
+ 必须以 ` gitea/conf/app.ini ` 中指定的 ` RUN_USER = <OS_USERNAME> ` 执行该命令;并且,为了让备份文件夹的压缩过程能够顺利执行,` docker exec ` 命令必须在 ` --tempdir ` 内部执行。
68
+
69
+ 示例:
70
+
71
+ ``` none
72
+ 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>'
73
+ ```
74
+
75
+ \* 注意:` --tempdir ` 指的是 Gitea 使用的 Docker 环境的临时目录;如果您没有指定自定义的 ` --tempdir ` ,那么 Gitea 将使用 ` /tmp ` 或 Docker 容器的 ` TMPDIR ` 环境变量。对于 ` --tempdir ` ,请相应调整您的 ` docker exec ` 命令选项。
76
+
77
+ 结果应该是一个文件,存储在指定的 ` --tempdir ` 中,类似于:` gitea-dump-1482906742.zip `
78
+
79
+ ## 恢复命令 (` restore ` )
46
80
47
81
当前还没有恢复命令,恢复需要人工进行。主要是把文件和数据库进行恢复。
48
82
@@ -51,10 +85,10 @@ Gitea 已经实现了 `dump` 命令可以用来备份所有需要的文件到一
51
85
``` sh
52
86
unzip gitea-dump-1610949662.zip
53
87
cd gitea-dump-1610949662
54
- mv data/conf/ app.ini /etc/gitea/conf/app.ini
88
+ mv app.ini /etc/gitea/conf/app.ini
55
89
mv data/* /var/lib/gitea/data/
56
90
mv log/* /var/lib/gitea/log/
57
- mv repos/* /var/lib/gitea/repositories/
91
+ mv repos/* /var/lib/gitea/gitea- repositories/
58
92
chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea
59
93
60
94
# mysql
@@ -66,3 +100,55 @@ psql -U $USER -d $DATABASE < gitea-db.sql
66
100
67
101
service gitea restart
68
102
```
103
+
104
+ 如果安装方式发生了变化(例如 二进制 -> Docker),或者 Gitea 安装到了与之前安装不同的目录,则需要重新生成仓库 Git 钩子。
105
+
106
+ 在 Gitea 运行时,并从 Gitea 二进制文件所在的目录执行:` ./gitea admin regenerate hooks `
107
+
108
+ 这样可以确保仓库 Git 钩子中的应用程序和配置文件路径与当前安装一致。如果这些路径没有更新,仓库的 ` push ` 操作将失败。
109
+
110
+ ### 使用 Docker (` restore ` )
111
+
112
+ 在基于 Docker 的 Gitea 实例中,也没有恢复命令的支持。恢复过程与前面描述的步骤相同,但路径不同。
113
+
114
+ 示例:
115
+
116
+ ``` sh
117
+ # 在容器中打开 bash 会话
118
+ docker exec --user git -it 2a83b293548e bash
119
+ # 在容器内解压您的备份文件
120
+ unzip gitea-dump-1610949662.zip
121
+ cd gitea-dump-1610949662
122
+ # 恢复 Gitea 数据
123
+ mv data/* /data/gitea
124
+ # 恢复仓库本身
125
+ mv repos/* /data/git/gitea-repositories/
126
+ # 调整文件权限
127
+ chown -R git:git /data
128
+ # 重新生成 Git 钩子
129
+ /usr/local/bin/gitea -c ' /data/gitea/conf/app.ini' admin regenerate hooks
130
+ ```
131
+
132
+ Gitea 容器中的默认用户是 ` git ` (1000:1000)。请用您的 Gitea 容器 ID 或名称替换 ` 2a83b293548e ` 。
133
+
134
+ ### 使用 Docker-rootless (` restore ` )
135
+
136
+ 在 Docker-rootless 容器中的恢复工作流程只是要使用的目录不同:
137
+
138
+ ``` sh
139
+ # 在容器中打开 bash 会话
140
+ docker exec --user git -it 2a83b293548e bash
141
+ # 在容器内解压您的备份文件
142
+ unzip gitea-dump-1610949662.zip
143
+ cd gitea-dump-1610949662
144
+ # 恢复 app.ini
145
+ mv data/conf/app.ini /etc/gitea/app.ini
146
+ # 恢复 Gitea 数据
147
+ mv data/* /var/lib/gitea
148
+ # 恢复仓库本身
149
+ mv repos/* /var/lib/gitea/git/gitea-repositories
150
+ # 调整文件权限
151
+ chown -R git:git /etc/gitea/app.ini /var/lib/gitea
152
+ # 重新生成 Git 钩子
153
+ /usr/local/bin/gitea -c ' /etc/gitea/app.ini' admin regenerate hooks
154
+ ```
0 commit comments