darkfire514 commited on
Commit
03246e2
·
verified ·
1 Parent(s): d21d361

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +450 -1
README.md CHANGED
@@ -7,4 +7,453 @@ sdk: docker
7
  pinned: false
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  pinned: false
8
  ---
9
 
10
+ ---
11
+
12
+ title: PostgreSQL Adminer
13
+ emoji: 🐘
14
+ colorFrom: blue
15
+ colorTo: indigo
16
+ sdk: docker
17
+ app_port: 7860
18
+ pinned: false
19
+ -------------
20
+
21
+ # PostgreSQL Adminer on Hugging Face Space
22
+
23
+ 这是一个用于在 Hugging Face Docker Space 上部署 PostgreSQL 数据库的项目。
24
+
25
+ 项目包含:
26
+
27
+ * PostgreSQL 数据库服务
28
+ * Adminer Web 数据库管理界面
29
+ * 持久化数据目录 `/data/postgres`
30
+ * Hugging Face Space Web 入口端口 `7860`
31
+
32
+ 默认设计:
33
+
34
+ ```text
35
+ 浏览器访问 Hugging Face Space
36
+ ↓
37
+ Adminer Web 管理界面,端口 7860
38
+ ↓
39
+ 连接容器内部 PostgreSQL,端口 5432
40
+ ```
41
+
42
+ PostgreSQL 数据库不建议直接暴露给公网,推荐通过 Adminer、API 服务或其他受控后端访问。
43
+
44
+ ---
45
+
46
+ ## 1. 文件结构
47
+
48
+ 仓库根目录应包含以下文件:
49
+
50
+ ```text
51
+ README.md
52
+ Dockerfile
53
+ start.sh
54
+ ```
55
+
56
+ ---
57
+
58
+ ## 2. README Space 配置说明
59
+
60
+ 本项目使用 Hugging Face Docker Space。
61
+
62
+ README 顶部的 YAML 配置如下:
63
+
64
+ ```yaml
65
+ ---
66
+ title: PostgreSQL Adminer
67
+ emoji: 🐘
68
+ colorFrom: blue
69
+ colorTo: indigo
70
+ sdk: docker
71
+ app_port: 7860
72
+ pinned: false
73
+ ---
74
+ ```
75
+
76
+ 字段说明:
77
+
78
+ | 字段 | 说明 |
79
+ | ---------------- | ------------------------- |
80
+ | `title` | Space 显示名称 |
81
+ | `emoji` | Space 图标 |
82
+ | `sdk: docker` | 使用 Dockerfile 构建 Space |
83
+ | `app_port: 7860` | Hugging Face 对外暴露的 Web 端口 |
84
+ | `pinned` | 是否固定展示 |
85
+
86
+ ---
87
+
88
+ ## 3. Dockerfile 示例
89
+
90
+ ```dockerfile
91
+ FROM postgres:17
92
+
93
+ ENV POSTGRES_USER=admin
94
+ ENV POSTGRES_DB=appdb
95
+ ENV PGDATA=/data/postgres
96
+ ENV ADMINER_VERSION=4.8.1
97
+
98
+ RUN apt-get update && apt-get install -y --no-install-recommends \
99
+ curl \
100
+ php \
101
+ php-pgsql \
102
+ ca-certificates \
103
+ && rm -rf /var/lib/apt/lists/*
104
+
105
+ RUN curl -L -o /adminer.php https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php
106
+
107
+ COPY start.sh /start.sh
108
+ RUN chmod +x /start.sh
109
+
110
+ EXPOSE 5432
111
+ EXPOSE 7860
112
+
113
+ CMD ["/start.sh"]
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 4. start.sh 示例
119
+
120
+ ```bash
121
+ #!/usr/bin/env bash
122
+ set -e
123
+
124
+ if [ -z "$POSTGRES_PASSWORD" ]; then
125
+ echo "ERROR: POSTGRES_PASSWORD is not set."
126
+ echo "Please set POSTGRES_PASSWORD in Hugging Face Space Secrets."
127
+ exit 1
128
+ fi
129
+
130
+ mkdir -p "$PGDATA"
131
+ chown -R postgres:postgres /data
132
+
133
+ echo "Starting PostgreSQL..."
134
+ docker-entrypoint.sh postgres &
135
+
136
+ echo "Waiting for PostgreSQL to become ready..."
137
+ until pg_isready -h 127.0.0.1 -p 5432 -U "$POSTGRES_USER"; do
138
+ sleep 2
139
+ done
140
+
141
+ echo "PostgreSQL is ready."
142
+ echo "Starting Adminer on port 7860..."
143
+
144
+ php -S 0.0.0.0:7860 /adminer.php
145
+ ```
146
+
147
+ ---
148
+
149
+ ## 5. 环境变量
150
+
151
+ 请在 Hugging Face Space 的:
152
+
153
+ ```text
154
+ Settings → Variables and secrets
155
+ ```
156
+
157
+ 中配置环境变量。
158
+
159
+ ### 必填变量
160
+
161
+ | 变量名 | 类型 | 示例 | 说明 |
162
+ | ------------------- | ------ | ---------------------- | ---------------- |
163
+ | `POSTGRES_PASSWORD` | Secret | `your_strong_password` | PostgreSQL 管理员密码 |
164
+
165
+ ### 可选变量
166
+
167
+ | 变量名 | 默认值 | 说明 |
168
+ | ----------------- | ---------------- | ----------------- |
169
+ | `POSTGRES_USER` | `admin` | PostgreSQL 管理员用户名 |
170
+ | `POSTGRES_DB` | `appdb` | 默认数据库名称 |
171
+ | `PGDATA` | `/data/postgres` | PostgreSQL 数据目录 |
172
+ | `ADMINER_VERSION` | `4.8.1` | Adminer 版本 |
173
+
174
+ 推荐只把 `POSTGRES_PASSWORD` 放到 Secrets,不要写进 Dockerfile 或 README。
175
+
176
+ ---
177
+
178
+ ## 6. Hugging Face 持久化磁盘
179
+
180
+ 本项目默认把 PostgreSQL 数据写入:
181
+
182
+ ```text
183
+ /data/postgres
184
+ ```
185
+
186
+ 如果你的 Space 挂载了持久化磁盘,并且挂载路径为 `/data`,数据库数据将保存在:
187
+
188
+ ```text
189
+ /data/postgres
190
+ ```
191
+
192
+ 请确保 Hugging Face Space 已开启 Persistent Storage,否则 Space 重启、重建或休眠恢复后,数据库数据可能丢失。
193
+
194
+ ---
195
+
196
+ ## 7. Adminer 登录方式
197
+
198
+ 部署完成后,打开 Hugging Face Space 页面,会进入 Adminer 管理界面。
199
+
200
+ 登录时填写:
201
+
202
+ ```text
203
+ System: PostgreSQL
204
+ Server: 127.0.0.1
205
+ Username: admin
206
+ Password: 你的 POSTGRES_PASSWORD
207
+ Database: appdb
208
+ ```
209
+
210
+ 如果你修改了 `POSTGRES_USER` 或 `POSTGRES_DB`,请使用你自己的配置。
211
+
212
+ ---
213
+
214
+ ## 8. 本地测试命令
215
+
216
+ 如果需要在本地测试,可以执行:
217
+
218
+ ```bash
219
+ docker build -t hf-postgres-adminer .
220
+ ```
221
+
222
+ 运行容器:
223
+
224
+ ```bash
225
+ docker run --rm -it \
226
+ -p 7860:7860 \
227
+ -p 5432:5432 \
228
+ -e POSTGRES_PASSWORD=your_strong_password \
229
+ -v $(pwd)/data:/data \
230
+ hf-postgres-adminer
231
+ ```
232
+
233
+ 访问 Adminer:
234
+
235
+ ```text
236
+ http://localhost:7860
237
+ ```
238
+
239
+ 本地连接 PostgreSQL:
240
+
241
+ ```bash
242
+ psql "postgresql://admin:your_strong_password@127.0.0.1:5432/appdb"
243
+ ```
244
+
245
+ ---
246
+
247
+ ## 9. 常用 PostgreSQL 命令
248
+
249
+ 进入容器后连接数据库:
250
+
251
+ ```bash
252
+ psql -U admin -d appdb
253
+ ```
254
+
255
+ 查看数据库列表:
256
+
257
+ ```sql
258
+ \l
259
+ ```
260
+
261
+ 查看表:
262
+
263
+ ```sql
264
+ \dt
265
+ ```
266
+
267
+ 创建新数据库:
268
+
269
+ ```sql
270
+ CREATE DATABASE project_db;
271
+ ```
272
+
273
+ 创建新用户:
274
+
275
+ ```sql
276
+ CREATE USER project_user WITH PASSWORD 'replace_with_strong_password';
277
+ ```
278
+
279
+ 授权数据库:
280
+
281
+ ```sql
282
+ GRANT ALL PRIVILEGES ON DATABASE project_db TO project_user;
283
+ ```
284
+
285
+ ---
286
+
287
+ ## 10. 推荐的多项目隔离方式
288
+
289
+ 如果该 PostgreSQL Space 要服务多个项目,建议不要所有项目共用 `admin` 用户。
290
+
291
+ 推荐方式:
292
+
293
+ ```text
294
+ 一个项目一个 database
295
+ 一个项目一个 role/user
296
+ 一个项目一个独立密码
297
+ ```
298
+
299
+ 示例:
300
+
301
+ ```sql
302
+ CREATE DATABASE rss_project;
303
+ CREATE USER rss_user WITH PASSWORD 'rss_project_password';
304
+ GRANT ALL PRIVILEGES ON DATABASE rss_project TO rss_user;
305
+
306
+ CREATE DATABASE image_project;
307
+ CREATE USER image_user WITH PASSWORD 'image_project_password';
308
+ GRANT ALL PRIVILEGES ON DATABASE image_project TO image_user;
309
+ ```
310
+
311
+ 业务项目连接时使用自己的数据库用户:
312
+
313
+ ```env
314
+ DATABASE_URL=postgresql://rss_user:rss_project_password@host:5432/rss_project
315
+ ```
316
+
317
+ ---
318
+
319
+ ## 11. 安全建议
320
+
321
+ 如果 Space 设置为 Public,请特别注意安全。
322
+
323
+ 建议:
324
+
325
+ ```text
326
+ 1. 不要把 POSTGRES_PASSWORD 写进代码仓库
327
+ 2. 使用 Hugging Face Secrets 保存数据库密码
328
+ 3. 不建议直接暴露 PostgreSQL 5432 给公网
329
+ 4. Adminer 后台必须使用强密码
330
+ 5. 尽量在外层增加 Cloudflare Access / OAuth / API Gateway
331
+ 6. 不要让业务项目使用 PostgreSQL 超级用户 admin
332
+ 7. 为每个项目创建独立 database 和 user
333
+ 8. 定期备份数据库
334
+ 9. 不要使用 trust 认证
335
+ 10. 不要在公开日志中输出数据库密码
336
+ ```
337
+
338
+ ---
339
+
340
+ ## 12. 备份建议
341
+
342
+ 可以使用 `pg_dump` 备份数据库:
343
+
344
+ ```bash
345
+ pg_dump -U admin -d appdb > backup.sql
346
+ ```
347
+
348
+ 恢复数据库:
349
+
350
+ ```bash
351
+ psql -U admin -d appdb < backup.sql
352
+ ```
353
+
354
+ 建议定期将备份文件同步到:
355
+
356
+ ```text
357
+ Hugging Face Dataset
358
+ Cloudflare R2
359
+ S3
360
+ Backblaze B2
361
+ 其他对象存储
362
+ ```
363
+
364
+ ---
365
+
366
+ ## 13. 适用场景
367
+
368
+ 适合:
369
+
370
+ ```text
371
+ 个人项目数据库
372
+ AI Demo 数据库
373
+ RSS / 爬虫 / 内容索引数据库
374
+ 测试环境数据库
375
+ 公开项目的轻量级共享数据库
376
+ Hugging Face Space 内部应用数据库
377
+ ```
378
+
379
+ 不适合:
380
+
381
+ ```text
382
+ 高并发生产数据库
383
+ 金融交易核心数据库
384
+ 强一致性要求极高的数据库
385
+ 需要公网 5432 长连接的大型数据库服务
386
+ 需要专业数据库运维和 SLA 的业务
387
+ ```
388
+
389
+ ---
390
+
391
+ ## 14. 注意事项
392
+
393
+ 本项目基于官方 PostgreSQL Docker 镜像:
394
+
395
+ ```text
396
+ postgres:17
397
+ ```
398
+
399
+ `docker-library/postgres` 是官方 PostgreSQL Docker 镜像的构建仓库。
400
+
401
+ 实际部署时不需要拉取 `docker-library/postgres` 源码,只需要在 Dockerfile 中使用:
402
+
403
+ ```dockerfile
404
+ FROM postgres:17
405
+ ```
406
+
407
+ 即可。
408
+
409
+ ---
410
+
411
+ ## 15. 快速部署步骤
412
+
413
+ 1. 创建新的 Hugging Face Space
414
+ 2. Space SDK 选择 Docker
415
+ 3. 上传以下文件:
416
+
417
+ ```text
418
+ README.md
419
+ Dockerfile
420
+ start.sh
421
+ ```
422
+
423
+ 4. 在 Space Settings 中添加 Secret:
424
+
425
+ ```text
426
+ POSTGRES_PASSWORD=你的强密码
427
+ ```
428
+
429
+ 5. 如果需要持久化数据,开启 Persistent Storage
430
+ 6. 等待 Space 自动构建
431
+ 7. 打开 Space 页面
432
+ 8. 使用 Adminer 登录 PostgreSQL
433
+
434
+ ---
435
+
436
+ ## 16. 默认连接信息
437
+
438
+ ```text
439
+ Adminer Web:
440
+ https://你的-space.hf.space
441
+
442
+ PostgreSQL Host:
443
+ 127.0.0.1
444
+
445
+ PostgreSQL Port:
446
+ 5432
447
+
448
+ PostgreSQL User:
449
+ admin
450
+
451
+ PostgreSQL Database:
452
+ appdb
453
+
454
+ PostgreSQL Data Directory:
455
+ /data/postgres
456
+ ```
457
+
458
+ 注意:`127.0.0.1:5432` 是容器内部地址,主要给 Adminer 或同容器内应用使用。外部项目不建议直接连接该端口,推荐通过 API Gateway 或受控后端访问数据库。
459
+