Update nexus: fix conflicts and sync local changes
This commit is contained in:
@@ -1,165 +1,165 @@
|
||||
---
|
||||
title: "MinIO + Zipline 自托管图床应用安装教程"
|
||||
type: source
|
||||
tags: [docker, image, minio, n8n, nas, synology, zipline]
|
||||
date: 2025-12-29
|
||||
---
|
||||
|
||||
## Source File
|
||||
- [[raw/Home Office/MinIO + Zipline 自托管图床应用安装教程.md]]
|
||||
|
||||
## Summary (用中文描述)
|
||||
- **核心主题**:在 Synology NAS 上通过 Docker Compose 部署 MinIO + Zipline 自托管图床解决方案
|
||||
- **问题域**:家庭/小型办公环境需要自托管的图片存储服务,替代云服务(图床)
|
||||
- **方法/机制**:
|
||||
- MinIO 作为 S3 兼容对象存储后端,提供高性价比的本地存储
|
||||
- Zipline 作为图片上传 UI 和 API 服务层,支持 n8n 工作流集成
|
||||
- PostgreSQL 作为 Zipline 的元数据存储
|
||||
- 使用 `mc` 命令行工具设置 Public Bucket 匿名访问
|
||||
- pg_dump 实现 PostgreSQL 逻辑备份脚本
|
||||
- Synology Hyper Backup 配合定时任务实现增量归档
|
||||
- **结论/价值**:零成本、完全自控的图床方案,适合技术用户家庭部署
|
||||
|
||||
## Key Claims (用中文描述)
|
||||
- MinIO + Zipline 架构将存储性能与元数据管理分离,MinIO 存储性能仅受 NAS 硬盘/SSD 限制,Zipline 仅处理 metadata
|
||||
- Docker Compose `depends_on` + `condition: service_healthy` 实现服务启动顺序保障,避免竞态条件
|
||||
- pg_dump 逻辑备份是 Synology NAS 环境的标准热备份方案,零停机、迁移能力强
|
||||
- "脑体分离"(PostgreSQL 元数据 + MinIO 文件实体)是图床系统的核心架构特征,备份必须同时覆盖两者
|
||||
|
||||
## Key Quotes
|
||||
> "Zipline 将元数据存在 Postgres,将文件实体存在 MinIO,你的备份方案必须确保这两者在时间点上是(尽可能)一致的。" — 备份策略核心挑战
|
||||
|
||||
> "docker exec $PG_CONTAINER pg_dump -U $PG_USER -d $PG_DB | gzip > $BACKUP_DIR/db_$DATE.sql.gz" — 热备份标准命令
|
||||
|
||||
## Key Concepts
|
||||
- [[图床]]:托管图片/媒体文件的服务,通过 URL 直接访问
|
||||
- [[S3-兼容对象存储]]:MinIO 实现的 S3 API 兼容对象存储
|
||||
- [[Docker堆栈]]:多容器 Docker Compose 编排,多服务依赖管理
|
||||
- [[逻辑备份]]:通过 pg_dump 导出 SQL,而非物理文件备份
|
||||
- [[数据一致性]]:分布式存储系统中元数据与文件实体的时间点一致性
|
||||
- [[匿名访问策略]]:MinIO mc anonymous 命令设置 bucket 公共读写权限
|
||||
|
||||
## Key Entities
|
||||
- [[MinIO]]:开源 S3 兼容对象存储,MinIO + Zipline 架构的存储后端
|
||||
- [[Zipline]]:开源图床应用,提供前端上传 UI 和 REST API
|
||||
- [[PostgreSQL]]:Zipline 的元数据数据库
|
||||
- [[群晖 NAS]](Synology NAS):部署 Docker 的硬件平台
|
||||
- [[n8n]]:工作流自动化工具,通过 Zipline API 实现图片上传
|
||||
- [[Synology Hyper Backup]]:群晖备份套件
|
||||
- [[pg_dump]]:PostgreSQL 逻辑备份工具
|
||||
|
||||
## Connections
|
||||
- [[Zipline]] ← depends_on ← [[MinIO]](S3 存储)
|
||||
- [[Zipline]] ← depends_on ← [[PostgreSQL]](元数据)
|
||||
- [[n8n]] ← calls ← [[Zipline API]](图片上传)
|
||||
- [[pg_dump]] ← backup ← [[PostgreSQL]]
|
||||
- [[Synology Hyper Backup]] ← backup ← [[MinIO 数据目录]]
|
||||
- [[Docker堆栈]] ← orchestrates ← [[MinIO]] + [[Zipline]] + [[PostgreSQL]]
|
||||
|
||||
## Contradictions
|
||||
- 与 [[rsync增量备份]] 冲突:
|
||||
- 冲突点:数据库备份方式
|
||||
- 当前观点:pg_dump 逻辑备份(SQL 文件,可跨平台迁移)
|
||||
- 对方观点:rsync 增量备份(文件级同步,适合 Docker 卷)
|
||||
- 协调:两者互补——pg_dump 备份元数据,rsync/Hyper Backup 备份文件实体
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
[DSM Docker UI]
|
||||
│
|
||||
├── MinIO (9000 API, 9001 Console)
|
||||
│ └── /volume1/docker/zipline-stack/minio/minio_data
|
||||
│
|
||||
├── PostgreSQL (Zipline DB)
|
||||
│ └── /volume1/docker/zipline-stack/zipline/pg_data
|
||||
│
|
||||
└── Zipline (暴露 3333)
|
||||
├── 前端上传 UI
|
||||
└── n8n API 上传
|
||||
|
||||
Zipline → MinIO(S3) → NAS 存储
|
||||
```
|
||||
|
||||
## Docker Compose Key Config
|
||||
|
||||
```yaml
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
command: server /data --console-address ":9001"
|
||||
ports:
|
||||
- "9000:9000" # API
|
||||
- "9001:9001" # Console
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: Abcd_1234
|
||||
|
||||
postgres:
|
||||
image: postgres:16
|
||||
environment:
|
||||
POSTGRES_USER: zipline
|
||||
POSTGRES_PASSWORD: zipline
|
||||
POSTGRES_DB: zipline
|
||||
|
||||
zipline:
|
||||
image: ghcr.io/diced/zipline:latest
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DATABASE_URL: postgres://zipline:***@postgres:5432/zipline
|
||||
STORAGE_ENGINE: s3
|
||||
S3_BUCKET: zipline-bucket
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
S3_ACCESS_KEY: admin
|
||||
S3_SECRET_KEY: Abcd_1234
|
||||
S3_FORCE_PATH_STYLE: "true"
|
||||
```
|
||||
|
||||
## mc (MinIO Client) Anonymous Access Commands
|
||||
|
||||
```bash
|
||||
# 设置别名
|
||||
mc alias set local http://192.168.3.17:9000 admin StrongPasswordHere
|
||||
|
||||
# 创建 bucket
|
||||
mc mb local/zipline-bucket
|
||||
|
||||
# 设置公共读写权限
|
||||
mc anonymous set public local/zipline-bucket
|
||||
|
||||
# 匿名权限类型
|
||||
# - download: 仅下载(GET)
|
||||
# - upload: 仅上传(PUT)
|
||||
# - public: 读写
|
||||
# - none: 禁用匿名访问
|
||||
```
|
||||
|
||||
## Backup Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/volume1/docker/zipline-stack/backups"
|
||||
PG_CONTAINER="zipline_postgres"
|
||||
PG_USER="zipline"
|
||||
PG_DB="zipline"
|
||||
RETENTION_DAYS=30
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# pg_dump 逻辑备份(热备份)
|
||||
docker exec "$PG_CONTAINER" pg_dump -U "$PG_USER" -d "$PG_DB" | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
|
||||
|
||||
# 清理旧备份
|
||||
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||||
```
|
||||
|
||||
## Reference URLs
|
||||
- [Docker Volume Documentation](https://docs.docker.com/storage/volumes/)
|
||||
- [MinIO Docker Persistence](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html)
|
||||
- [Synology ACL Settings](https://kb.synology.com/en-global/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS)
|
||||
- [MinIO mc anonymous](https://min.io/docs/enterprise/aistor-object-store/reference/cli/mc-anonymous/)
|
||||
---
|
||||
title: "MinIO + Zipline 自托管图床应用安装教程"
|
||||
type: source
|
||||
tags: [docker, image, minio, n8n, nas, synology, zipline]
|
||||
date: 2025-12-29
|
||||
---
|
||||
|
||||
## Source File
|
||||
- [[raw/Home Office/MinIO + Zipline 自托管图床应用安装教程.md]]
|
||||
|
||||
## Summary (用中文描述)
|
||||
- **核心主题**:在 Synology NAS 上通过 Docker Compose 部署 MinIO + Zipline 自托管图床解决方案
|
||||
- **问题域**:家庭/小型办公环境需要自托管的图片存储服务,替代云服务(图床)
|
||||
- **方法/机制**:
|
||||
- MinIO 作为 S3 兼容对象存储后端,提供高性价比的本地存储
|
||||
- Zipline 作为图片上传 UI 和 API 服务层,支持 n8n 工作流集成
|
||||
- PostgreSQL 作为 Zipline 的元数据存储
|
||||
- 使用 `mc` 命令行工具设置 Public Bucket 匿名访问
|
||||
- pg_dump 实现 PostgreSQL 逻辑备份脚本
|
||||
- Synology Hyper Backup 配合定时任务实现增量归档
|
||||
- **结论/价值**:零成本、完全自控的图床方案,适合技术用户家庭部署
|
||||
|
||||
## Key Claims (用中文描述)
|
||||
- MinIO + Zipline 架构将存储性能与元数据管理分离,MinIO 存储性能仅受 NAS 硬盘/SSD 限制,Zipline 仅处理 metadata
|
||||
- Docker Compose `depends_on` + `condition: service_healthy` 实现服务启动顺序保障,避免竞态条件
|
||||
- pg_dump 逻辑备份是 Synology NAS 环境的标准热备份方案,零停机、迁移能力强
|
||||
- "脑体分离"(PostgreSQL 元数据 + MinIO 文件实体)是图床系统的核心架构特征,备份必须同时覆盖两者
|
||||
|
||||
## Key Quotes
|
||||
> "Zipline 将元数据存在 Postgres,将文件实体存在 MinIO,你的备份方案必须确保这两者在时间点上是(尽可能)一致的。" — 备份策略核心挑战
|
||||
|
||||
> "docker exec $PG_CONTAINER pg_dump -U $PG_USER -d $PG_DB | gzip > $BACKUP_DIR/db_$DATE.sql.gz" — 热备份标准命令
|
||||
|
||||
## Key Concepts
|
||||
- [[图床]]:托管图片/媒体文件的服务,通过 URL 直接访问
|
||||
- [[S3-兼容对象存储]]:MinIO 实现的 S3 API 兼容对象存储
|
||||
- [[Docker堆栈]]:多容器 Docker Compose 编排,多服务依赖管理
|
||||
- [[逻辑备份]]:通过 pg_dump 导出 SQL,而非物理文件备份
|
||||
- [[数据一致性]]:分布式存储系统中元数据与文件实体的时间点一致性
|
||||
- [[匿名访问策略]]:MinIO mc anonymous 命令设置 bucket 公共读写权限
|
||||
|
||||
## Key Entities
|
||||
- [[MinIO]]:开源 S3 兼容对象存储,MinIO + Zipline 架构的存储后端
|
||||
- [[Zipline]]:开源图床应用,提供前端上传 UI 和 REST API
|
||||
- [[PostgreSQL]]:Zipline 的元数据数据库
|
||||
- [[群晖 NAS]](Synology NAS):部署 Docker 的硬件平台
|
||||
- [[n8n]]:工作流自动化工具,通过 Zipline API 实现图片上传
|
||||
- [[Synology Hyper Backup]]:群晖备份套件
|
||||
- [[pg_dump]]:PostgreSQL 逻辑备份工具
|
||||
|
||||
## Connections
|
||||
- [[Zipline]] ← depends_on ← [[MinIO]](S3 存储)
|
||||
- [[Zipline]] ← depends_on ← [[PostgreSQL]](元数据)
|
||||
- [[n8n]] ← calls ← [[Zipline API]](图片上传)
|
||||
- [[pg_dump]] ← backup ← [[PostgreSQL]]
|
||||
- [[Synology Hyper Backup]] ← backup ← [[MinIO 数据目录]]
|
||||
- [[Docker堆栈]] ← orchestrates ← [[MinIO]] + [[Zipline]] + [[PostgreSQL]]
|
||||
|
||||
## Contradictions
|
||||
- 与 [[rsync增量备份]] 冲突:
|
||||
- 冲突点:数据库备份方式
|
||||
- 当前观点:pg_dump 逻辑备份(SQL 文件,可跨平台迁移)
|
||||
- 对方观点:rsync 增量备份(文件级同步,适合 Docker 卷)
|
||||
- 协调:两者互补——pg_dump 备份元数据,rsync/Hyper Backup 备份文件实体
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
[DSM Docker UI]
|
||||
│
|
||||
├── MinIO (9000 API, 9001 Console)
|
||||
│ └── /volume1/docker/zipline-stack/minio/minio_data
|
||||
│
|
||||
├── PostgreSQL (Zipline DB)
|
||||
│ └── /volume1/docker/zipline-stack/zipline/pg_data
|
||||
│
|
||||
└── Zipline (暴露 3333)
|
||||
├── 前端上传 UI
|
||||
└── n8n API 上传
|
||||
|
||||
Zipline → MinIO(S3) → NAS 存储
|
||||
```
|
||||
|
||||
## Docker Compose Key Config
|
||||
|
||||
```yaml
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
command: server /data --console-address ":9001"
|
||||
ports:
|
||||
- "9000:9000" # API
|
||||
- "9001:9001" # Console
|
||||
environment:
|
||||
MINIO_ROOT_USER: admin
|
||||
MINIO_ROOT_PASSWORD: Abcd_1234
|
||||
|
||||
postgres:
|
||||
image: postgres:16
|
||||
environment:
|
||||
POSTGRES_USER: zipline
|
||||
POSTGRES_PASSWORD: zipline
|
||||
POSTGRES_DB: zipline
|
||||
|
||||
zipline:
|
||||
image: ghcr.io/diced/zipline:latest
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
DATABASE_URL: postgres://zipline:***@postgres:5432/zipline
|
||||
STORAGE_ENGINE: s3
|
||||
S3_BUCKET: zipline-bucket
|
||||
S3_ENDPOINT: http://minio:9000
|
||||
S3_ACCESS_KEY: admin
|
||||
S3_SECRET_KEY: Abcd_1234
|
||||
S3_FORCE_PATH_STYLE: "true"
|
||||
```
|
||||
|
||||
## mc (MinIO Client) Anonymous Access Commands
|
||||
|
||||
```bash
|
||||
# 设置别名
|
||||
mc alias set local http://192.168.3.17:9000 admin StrongPasswordHere
|
||||
|
||||
# 创建 bucket
|
||||
mc mb local/zipline-bucket
|
||||
|
||||
# 设置公共读写权限
|
||||
mc anonymous set public local/zipline-bucket
|
||||
|
||||
# 匿名权限类型
|
||||
# - download: 仅下载(GET)
|
||||
# - upload: 仅上传(PUT)
|
||||
# - public: 读写
|
||||
# - none: 禁用匿名访问
|
||||
```
|
||||
|
||||
## Backup Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/volume1/docker/zipline-stack/backups"
|
||||
PG_CONTAINER="zipline_postgres"
|
||||
PG_USER="zipline"
|
||||
PG_DB="zipline"
|
||||
RETENTION_DAYS=30
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# pg_dump 逻辑备份(热备份)
|
||||
docker exec "$PG_CONTAINER" pg_dump -U "$PG_USER" -d "$PG_DB" | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
|
||||
|
||||
# 清理旧备份
|
||||
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||||
```
|
||||
|
||||
## Reference URLs
|
||||
- [Docker Volume Documentation](https://docs.docker.com/storage/volumes/)
|
||||
- [MinIO Docker Persistence](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html)
|
||||
- [Synology ACL Settings](https://kb.synology.com/en-global/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS)
|
||||
- [MinIO mc anonymous](https://min.io/docs/enterprise/aistor-object-store/reference/cli/mc-anonymous/)
|
||||
|
||||
Reference in New Issue
Block a user