From f17d79b236620bc2b7273bd7b9dbb7cd2195bd18 Mon Sep 17 00:00:00 2001 From: O96u Date: Mon, 7 Sep 2026 17:05:12 +0800 Subject: [PATCH] =?UTF-8?q?release:=20v1.3.0=20=E2=80=94=20=E6=95=B4?= =?UTF-8?q?=E7=AB=99=E5=A4=87=E4=BB=BD=E6=81=A2=E5=A4=8D=E3=80=81=E8=B7=A8?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E5=90=8C=E6=AD=A5=E4=B8=8E=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 19 +- Dockerfile | 8 +- README.en.md | 11 +- README.md | 11 +- app/components/storage/BackendSyncCard.vue | 444 ++++++++++++++++++ app/components/storage/BackupExportCard.vue | 141 ++++++ app/components/storage/BackupJobProgress.vue | 32 ++ app/components/storage/BackupJobTable.vue | 257 ++++++++++ app/components/storage/BackupRestoreCard.vue | 305 ++++++++++++ app/components/storage/StorageBackendCard.vue | 26 + app/components/storage/StorageBackupPanel.vue | 178 +++++++ app/composables/useBackup.ts | 319 +++++++++++++ app/pages/setup.vue | 175 +++++++ app/pages/storage.vue | 57 +++ app/types/backup.ts | 53 +++ docker-compose.yml | 2 +- docker-entrypoint.sh | 16 +- docs-site/.vitepress/config.ts | 2 - docs-site/en/guide/changelog.md | 5 +- docs-site/en/guide/faq.md | 20 +- docs-site/en/guide/getting-started.md | 16 +- docs-site/en/guide/index.md | 10 +- docs-site/en/guide/local-dev.md | 3 +- docs-site/en/guide/migration.md | 129 ----- docs-site/en/guide/storage.md | 43 +- docs-site/guide/changelog.md | 5 +- docs-site/guide/faq.md | 20 +- docs-site/guide/getting-started.md | 16 +- docs-site/guide/index.md | 8 +- docs-site/guide/local-dev.md | 3 +- docs-site/guide/migration.md | 176 ------- docs-site/guide/storage.md | 50 +- docs/screenshots/gallery.png | Bin 154762 -> 42587 bytes docs/screenshots/setup-restore.png | Bin 0 -> 51498 bytes docs/screenshots/setup.png | Bin 43125 -> 60105 bytes docs/screenshots/storage.png | Bin 71394 -> 91941 bytes i18n/locales/en.json | 133 +++++- i18n/locales/zh-CN.json | 133 +++++- package-lock.json | 31 +- package.json | 10 +- server/api/admin/backup/estimate.get.ts | 40 ++ server/api/admin/backup/export.post.ts | 26 + server/api/admin/backup/jobs/[id].get.ts | 19 + .../api/admin/backup/jobs/[id]/cancel.post.ts | 20 + .../admin/backup/jobs/[id]/download.get.ts | 29 ++ .../api/admin/backup/jobs/[id]/retry.post.ts | 28 ++ server/api/admin/backup/jobs/index.get.ts | 36 ++ server/api/admin/backup/restore.post.ts | 108 +++++ server/api/admin/storage/sync.post.ts | 50 ++ server/api/setup/restore.post.ts | 36 ++ server/api/setup/restore/[id].get.ts | 17 + server/cli/backup-cli-loader.mjs | 14 + server/cli/backup-export.mjs | 47 ++ server/cli/backup-restore.mjs | 65 +++ server/cli/migrate-to-single-images.mjs | 166 ------- server/cli/storage-sync.mjs | 72 +++ server/plugins/backup-jobs.ts | 8 + server/utils/backup/api.ts | 31 ++ server/utils/backup/backend-sync.ts | 213 +++++++++ server/utils/backup/db-snapshot.ts | 66 +++ server/utils/backup/full-export.ts | 134 ++++++ server/utils/backup/full-restore.ts | 182 +++++++ server/utils/backup/index.ts | 15 + server/utils/backup/jobs.ts | 283 +++++++++++ server/utils/backup/manifest.ts | 33 ++ server/utils/backup/paths.test.ts | 22 + server/utils/backup/paths.ts | 19 + server/utils/backup/runner.ts | 112 +++++ server/utils/backup/schema.ts | 21 + server/utils/backup/stats.ts | 38 ++ server/utils/db.ts | 19 + server/utils/image-index.ts | 35 ++ 72 files changed, 4312 insertions(+), 559 deletions(-) create mode 100644 app/components/storage/BackendSyncCard.vue create mode 100644 app/components/storage/BackupExportCard.vue create mode 100644 app/components/storage/BackupJobProgress.vue create mode 100644 app/components/storage/BackupJobTable.vue create mode 100644 app/components/storage/BackupRestoreCard.vue create mode 100644 app/components/storage/StorageBackupPanel.vue create mode 100644 app/composables/useBackup.ts create mode 100644 app/types/backup.ts delete mode 100644 docs-site/en/guide/migration.md delete mode 100644 docs-site/guide/migration.md create mode 100644 docs/screenshots/setup-restore.png create mode 100644 server/api/admin/backup/estimate.get.ts create mode 100644 server/api/admin/backup/export.post.ts create mode 100644 server/api/admin/backup/jobs/[id].get.ts create mode 100644 server/api/admin/backup/jobs/[id]/cancel.post.ts create mode 100644 server/api/admin/backup/jobs/[id]/download.get.ts create mode 100644 server/api/admin/backup/jobs/[id]/retry.post.ts create mode 100644 server/api/admin/backup/jobs/index.get.ts create mode 100644 server/api/admin/backup/restore.post.ts create mode 100644 server/api/admin/storage/sync.post.ts create mode 100644 server/api/setup/restore.post.ts create mode 100644 server/api/setup/restore/[id].get.ts create mode 100644 server/cli/backup-cli-loader.mjs create mode 100644 server/cli/backup-export.mjs create mode 100644 server/cli/backup-restore.mjs delete mode 100644 server/cli/migrate-to-single-images.mjs create mode 100644 server/cli/storage-sync.mjs create mode 100644 server/plugins/backup-jobs.ts create mode 100644 server/utils/backup/api.ts create mode 100644 server/utils/backup/backend-sync.ts create mode 100644 server/utils/backup/db-snapshot.ts create mode 100644 server/utils/backup/full-export.ts create mode 100644 server/utils/backup/full-restore.ts create mode 100644 server/utils/backup/index.ts create mode 100644 server/utils/backup/jobs.ts create mode 100644 server/utils/backup/manifest.ts create mode 100644 server/utils/backup/paths.test.ts create mode 100644 server/utils/backup/paths.ts create mode 100644 server/utils/backup/runner.ts create mode 100644 server/utils/backup/schema.ts create mode 100644 server/utils/backup/stats.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b636bc..0724852 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,24 @@ ## [Unreleased] +## [1.3.0] - 2026-09-07 + +### 新增 + +- **站点备份**:存储页导出 `.phost.tar.gz`(含 `pichost.db` 与全部图片),支持下载与任务进度 +- **站点恢复**:存储页或 setup 未初始化时从备份包恢复,支持预检与跳过/覆盖冲突 +- **跨后端同步**:在已配置存储后端之间拷贝图片并更新索引;后端卡片快捷「迁入 / 迁出」 +- **任务中心**:`backup_jobs` 记录最近导出/恢复/同步任务,失败可重试;列表分页 +- 运维 CLI:`backup-export`、`backup-restore`、`storage-sync`(`docker exec pichost …`) + +### 移除 + +- 遗留目录迁移 CLI `migrate` / `migrate-to-single-images.mjs`(由启动索引同步与整站备份恢复替代) + +### 文档 + +- [存储](./docs-site/guide/storage.md) 补充备份与迁移说明;更新截图;移除 v1.2 迁移专页 + ## [1.2.8] - 2026-09-04 ### 改进 @@ -119,7 +137,6 @@ - CLI 迁移工具:`docker exec pichost migrate` / `migrate --apply`(`server/cli/migrate-to-single-images.mjs`) - 扫描 `data/` 下除 `images` 外所有顶层目录中的图片,输出 `data/mapping.json` - 启动时自动同步图片索引(扫描磁盘、归一化遗留 key、清理孤儿记录),并打印同步日志 -- 迁移文档:[文档站 · v1.2 迁移](https://o96u.github.io/PicHost/guide/migration) ### 改进 diff --git a/Dockerfile b/Dockerfile index 7919a23..c44922d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,10 +23,16 @@ ENV NODE_ENV=production \ DATA_DIR=/data COPY --from=build /app/.output ./.output +COPY --from=build /app/server/utils ./server/utils +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/package.json ./package.json COPY server/cli/reset-password.mjs ./server/cli/reset-password.mjs -COPY server/cli/migrate-to-single-images.mjs ./server/cli/migrate-to-single-images.mjs COPY server/cli/slider.mjs ./server/cli/slider.mjs COPY server/cli/clear-domains.mjs ./server/cli/clear-domains.mjs +COPY server/cli/backup-cli-loader.mjs ./server/cli/backup-cli-loader.mjs +COPY server/cli/backup-export.mjs ./server/cli/backup-export.mjs +COPY server/cli/backup-restore.mjs ./server/cli/backup-restore.mjs +COPY server/cli/storage-sync.mjs ./server/cli/storage-sync.mjs COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh diff --git a/README.en.md b/README.en.md index e78e403..4158463 100644 --- a/README.en.md +++ b/README.en.md @@ -31,20 +31,25 @@ **main** has no public demo. **cloudflare** branch live demo: [pic.roven.cc](https://pic.roven.cc) -| API | Gallery | -| :--: | :-----: | +| API | Gallery (detail) | +| :--: | :--------------: | | ![API](docs/screenshots/api.png) | ![Gallery](docs/screenshots/gallery.png) | | Storage | Settings | | :-----: | :-------: | | ![Storage](docs/screenshots/storage.png) | ![Settings](docs/screenshots/settings-en.png) | +| First-time setup | Restore from backup | +| :--------------: | :-----------------: | +| ![Setup](docs/screenshots/setup.png) | ![Setup restore](docs/screenshots/setup-restore.png) | + ## Features - **Drag, click, or Ctrl+V paste** — server-side WebP, Referer hotlink protection - **Multi-user** — login with slider, Turnstile, or Cap verification; optional registration; users see only their images - **Multi-backend storage** — local disk + S3-compatible (R2 / COS / OSS / AWS); hybrid `proxy` / `public` URLs -- **Gallery** — browse, search, filter by storage/source, grid/list views, batch delete; stats overview and source breakdown +- **Gallery** — browse, search, filter by storage/source, grid/list views, batch delete; stats overview and source breakdown; image detail modal with link formats +- **Backup & migration** — full-site export/restore (`.phost.tar.gz`), cross-backend sync; restore from backup on uninitialized `/setup` - **API & Twikoo** — global / per-user tokens; `POST /api/index.php` compatible - **Zero-config Docker** — first-run web wizard, no secrets upfront diff --git a/README.md b/README.md index 87886d2..7e467f2 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ **main** 分支暂无公网演示;**cloudflare** 分支在线体验:[pic.roven.cc](https://pic.roven.cc) -| API | 图库 | +| API | 图库(详情) | | :--: | :--: | | ![API](docs/screenshots/api.png) | ![图库](docs/screenshots/gallery.png) | @@ -39,12 +39,17 @@ | :--: | :--: | | ![存储](docs/screenshots/storage.png) | ![设置](docs/screenshots/settings.png) | +| 首次设置 | 从备份恢复 | +| :--: | :--: | +| ![首次设置](docs/screenshots/setup.png) | ![从备份恢复](docs/screenshots/setup-restore.png) | + ## 特性 - **拖拽 / 点击 / Ctrl+V 粘贴**上传;服务端 WebP 压缩、Referer 防盗链 - **多用户**:账号密码登录(滑块 / Turnstile / Cap 人机验证)、可选开放注册;普通用户仅见自己的图片 - **多后端存储**:本地磁盘 + S3 兼容(R2 / COS / OSS / AWS);混合直链 `proxy` / `public` -- **图库**:浏览、搜索、按存储/来源筛选、网格/列表切换、批量删除;统计概览与来源分布 +- **图库**:浏览、搜索、按存储/来源筛选、网格/列表切换、批量删除;统计概览与来源分布;点击图片查看详情与多格式链接 +- **备份与迁移**:整站导出/恢复(`.phost.tar.gz`)、跨后端同步;setup 未初始化时可从备份恢复 - **API 与 Twikoo**:全局 / 个人 Token;`POST /api/index.php` 兼容 - **Docker 零配置**:首次访问 Web 引导创建管理员 @@ -74,7 +79,7 @@ docker run -d \ 浏览器打开 `http://<主机IP>:6892`,按引导完成设置即可。 -**详细说明**(环境变量、升级迁移、双域名、API、Twikoo、反向代理、本地开发等)见 **[用户文档](https://o96u.github.io/PicHost/)**。 +**详细说明**(环境变量、双域名、API、Twikoo、反向代理、本地开发等)见 **[用户文档](https://o96u.github.io/PicHost/)**。 | 分支 | 说明 | | ---- | ---- | diff --git a/app/components/storage/BackendSyncCard.vue b/app/components/storage/BackendSyncCard.vue new file mode 100644 index 0000000..e5d84a4 --- /dev/null +++ b/app/components/storage/BackendSyncCard.vue @@ -0,0 +1,444 @@ + + + diff --git a/app/components/storage/BackupExportCard.vue b/app/components/storage/BackupExportCard.vue new file mode 100644 index 0000000..99e93be --- /dev/null +++ b/app/components/storage/BackupExportCard.vue @@ -0,0 +1,141 @@ + + + diff --git a/app/components/storage/BackupJobProgress.vue b/app/components/storage/BackupJobProgress.vue new file mode 100644 index 0000000..35f035c --- /dev/null +++ b/app/components/storage/BackupJobProgress.vue @@ -0,0 +1,32 @@ + + + diff --git a/app/components/storage/BackupJobTable.vue b/app/components/storage/BackupJobTable.vue new file mode 100644 index 0000000..925a095 --- /dev/null +++ b/app/components/storage/BackupJobTable.vue @@ -0,0 +1,257 @@ + + + diff --git a/app/components/storage/BackupRestoreCard.vue b/app/components/storage/BackupRestoreCard.vue new file mode 100644 index 0000000..73b00e0 --- /dev/null +++ b/app/components/storage/BackupRestoreCard.vue @@ -0,0 +1,305 @@ + + + diff --git a/app/components/storage/StorageBackendCard.vue b/app/components/storage/StorageBackendCard.vue index fc7735a..57c1a2f 100644 --- a/app/components/storage/StorageBackendCard.vue +++ b/app/components/storage/StorageBackendCard.vue @@ -5,6 +5,8 @@ const props = defineProps<{ backend: StorageBackendItem envOverride?: boolean busy?: boolean + showMigrateIn?: boolean + showMigrateOut?: boolean }>() const emit = defineEmits<{ @@ -13,6 +15,8 @@ const emit = defineEmits<{ test: [] toggleEnabled: [] delete: [] + migrateIn: [] + migrateOut: [] }>() const { t } = useI18n() @@ -129,6 +133,28 @@ function canDelete() { :disabled="actionsDisabled" @click="emit('setDefault')" /> + + +import type { BackupJobItem, SyncDraft } from '~/types/backup' +import type { StorageBackendItem } from '~/types/storage' + +const props = defineProps<{ + backends: StorageBackendItem[] +}>() + +const { t } = useI18n() +const toast = useToast() +const { + jobs, + jobsPage, + jobsPageSize, + jobsTotal, + jobsTotalPages, + jobsLoading, + estimate, + packages, + loadingEstimate, + polling, + hasActiveJob, + getActiveJob, + loadJobs, + setJobsPage, + setJobsPageSize, + loadEstimate, + startPolling, + createExport, + previewRestore, + confirmRestore, + previewSync, + startSync, + retryJob, + cancelJob, + downloadUrl +} = useBackup() + +const syncDraft = ref(null) +const syncCardRef = ref<{ applyDraft: (draft: SyncDraft) => void } | null>(null) +const panelRef = ref(null) +const syncHighlighted = ref(false) + +const activeJob = computed(() => getActiveJob()) +const exportBusy = computed(() => activeJob.value?.type === 'full_export') +const restoreBusy = computed(() => activeJob.value?.type === 'full_restore') +const syncBusy = computed(() => activeJob.value?.type === 'backend_sync') +const anyJobBusy = computed(() => Boolean(activeJob.value)) + +onMounted(async () => { + await Promise.all([loadJobs(), loadEstimate()]) + if (hasActiveJob()) { + startPolling() + } +}) + +function applySyncDraft(draft: SyncDraft) { + syncDraft.value = draft + syncCardRef.value?.applyDraft(draft) + syncHighlighted.value = true + window.setTimeout(() => { + syncHighlighted.value = false + }, 2500) + nextTick(() => { + panelRef.value?.scrollIntoView({ behavior: 'smooth', block: 'start' }) + }) + toast.add({ title: t('storage.backup.syncDraftApplied'), color: 'info' }) +} + +defineExpose({ applySyncDraft }) + +async function onExport() { + await createExport() +} + +async function onRestore(input: { + file?: File + archiveName?: string + conflictMode: 'skip' | 'overwrite' +}) { + await confirmRestore(input) +} + +async function onCancel(jobId: string) { + await cancelJob(jobId) +} + +async function onSync(body: { + fromBackendId: string + toBackendId: string + deleteSource: boolean + setDefault: boolean +}) { + await startSync(body) +} + +function onDownload(jobId: string) { + window.open(downloadUrl(jobId), '_blank') +} + +async function onRetry(jobId: string) { + await retryJob(jobId) +} + +function onViewJob(job: BackupJobItem) { + toast.add({ + title: t('storage.backup.jobTypeRestore'), + description: job.message, + color: 'info' + }) +} + + + diff --git a/app/composables/useBackup.ts b/app/composables/useBackup.ts new file mode 100644 index 0000000..2084684 --- /dev/null +++ b/app/composables/useBackup.ts @@ -0,0 +1,319 @@ +import type { + BackupEstimate, + BackupJobItem, + BackupPackageItem, + BackupRestorePreview, + BackendSyncPreview +} from '~/types/backup' + +const jobs = ref([]) +const jobsPage = ref(1) +const jobsPageSize = ref(10) +const jobsTotal = ref(0) +const jobsTotalPages = ref(1) +const jobsLoading = ref(false) +const activeJobState = ref(null) +const estimate = ref(null) +const packages = ref([]) +const loadingEstimate = ref(false) +const polling = ref(false) +let pollTimer: ReturnType | null = null + +export function useBackup() { + const toast = useToast() + const { t } = useI18n() + + function stopPolling() { + if (pollTimer) { + clearInterval(pollTimer) + pollTimer = null + } + polling.value = false + } + + function hasActiveJob(): boolean { + return activeJobState.value !== null + } + + function getActiveJob(): BackupJobItem | null { + return activeJobState.value + } + + async function cancelJob(jobId: string) { + try { + await $fetch(`/api/admin/backup/jobs/${jobId}/cancel`, { + method: 'POST', + credentials: 'include' + }) + await loadJobs() + toast.add({ title: t('storage.backup.cancelDone'), color: 'success' }) + } catch (error: unknown) { + handleError(error, t('storage.backup.cancelFailed')) + } + } + + async function loadJobs(options?: { page?: number, pageSize?: number }) { + if (options?.page !== undefined) jobsPage.value = options.page + if (options?.pageSize !== undefined) jobsPageSize.value = options.pageSize + jobsLoading.value = true + try { + const data = await $fetch<{ + jobs: BackupJobItem[] + total: number + page: number + pageSize: number + totalPages: number + activeJob: BackupJobItem | null + }>('/api/admin/backup/jobs', { + credentials: 'include', + query: { + pageNum: jobsPage.value, + pageSize: jobsPageSize.value + } + }) + jobs.value = data.jobs + jobsTotal.value = data.total + jobsPage.value = data.page + jobsPageSize.value = data.pageSize + jobsTotalPages.value = data.totalPages + activeJobState.value = data.activeJob + if (!data.activeJob) { + stopPolling() + void loadEstimate().catch(() => {}) + } + return data.jobs + } finally { + jobsLoading.value = false + } + } + + async function setJobsPage(page: number) { + jobsPage.value = page + return loadJobs() + } + + async function setJobsPageSize(pageSize: number) { + jobsPageSize.value = pageSize + jobsPage.value = 1 + return loadJobs() + } + + async function refreshJobsFirstPage() { + jobsPage.value = 1 + return loadJobs() + } + + async function loadEstimate() { + loadingEstimate.value = true + try { + const data = await $fetch<{ + estimate: BackupEstimate + packages: BackupPackageItem[] + backupsDir: string + }>('/api/admin/backup/estimate', { credentials: 'include' }) + estimate.value = data.estimate + packages.value = data.packages + return data + } finally { + loadingEstimate.value = false + } + } + + function startPolling() { + if (pollTimer) return + polling.value = true + pollTimer = setInterval(() => { + void loadJobs().catch(() => {}) + }, 2000) + } + + async function createExport() { + try { + const data = await $fetch<{ job: BackupJobItem, estimate: BackupEstimate }>( + '/api/admin/backup/export', + { method: 'POST', credentials: 'include' } + ) + estimate.value = data.estimate + await refreshJobsFirstPage() + startPolling() + toast.add({ title: t('storage.backup.exportStarted'), color: 'success' }) + return data.job + } catch (error: unknown) { + handleError(error, t('storage.backup.exportFailed')) + throw error + } + } + + async function previewRestore(input: { + file?: File + archiveName?: string + }): Promise { + if (input.file) { + const form = new FormData() + form.append('file', input.file) + form.append('dryRun', 'true') + const data = await $fetch<{ preview: BackupRestorePreview }>( + '/api/admin/backup/restore', + { method: 'POST', credentials: 'include', body: form } + ) + return data.preview + } + + const data = await $fetch<{ preview: BackupRestorePreview }>( + '/api/admin/backup/restore', + { + method: 'POST', + credentials: 'include', + body: { + archiveName: input.archiveName, + dryRun: true + } + } + ) + return data.preview + } + + async function confirmRestore(input: { + file?: File + archiveName?: string + conflictMode: 'skip' | 'overwrite' + }) { + try { + if (input.file) { + const form = new FormData() + form.append('file', input.file) + form.append('conflictMode', input.conflictMode) + const data = await $fetch<{ job: BackupJobItem }>( + '/api/admin/backup/restore', + { method: 'POST', credentials: 'include', body: form } + ) + await refreshJobsFirstPage() + startPolling() + toast.add({ title: t('storage.backup.restoreStarted'), color: 'success' }) + return data.job + } + + const data = await $fetch<{ job: BackupJobItem }>( + '/api/admin/backup/restore', + { + method: 'POST', + credentials: 'include', + body: { + archiveName: input.archiveName, + conflictMode: input.conflictMode, + dryRun: false + } + } + ) + await refreshJobsFirstPage() + startPolling() + toast.add({ title: t('storage.backup.restoreStarted'), color: 'success' }) + return data.job + } catch (error: unknown) { + handleError(error, t('storage.backup.restoreFailed')) + throw error + } + } + + async function previewSync(body: { + fromBackendId: string + toBackendId: string + }): Promise { + const data = await $fetch<{ preview: BackendSyncPreview }>( + '/api/admin/storage/sync', + { + method: 'POST', + credentials: 'include', + body: { ...body, dryRun: true } + } + ) + return data.preview + } + + async function startSync(body: { + fromBackendId: string + toBackendId: string + deleteSource?: boolean + setDefault?: boolean + }) { + try { + const data = await $fetch<{ job: BackupJobItem }>( + '/api/admin/storage/sync', + { + method: 'POST', + credentials: 'include', + body + } + ) + await refreshJobsFirstPage() + startPolling() + toast.add({ title: t('storage.backup.syncStarted'), color: 'success' }) + return data.job + } catch (error: unknown) { + handleError(error, t('storage.backup.syncFailed')) + throw error + } + } + + async function retryJob(jobId: string) { + try { + await $fetch(`/api/admin/backup/jobs/${jobId}/retry`, { + method: 'POST', + credentials: 'include' + }) + await refreshJobsFirstPage() + startPolling() + toast.add({ title: t('storage.backup.retryStarted'), color: 'success' }) + } catch (error: unknown) { + handleError(error, t('storage.backup.retryFailed')) + } + } + + function downloadUrl(jobId: string): string { + return `/api/admin/backup/jobs/${jobId}/download` + } + + function handleError(error: unknown, fallback: string) { + const status = typeof error === 'object' && error !== null && 'statusCode' in error + ? (error as { statusCode: number }).statusCode + : 0 + if (status === 409) { + toast.add({ title: t('storage.backup.jobRunning'), color: 'warning' }) + return + } + toast.add({ title: fallback, color: 'error' }) + } + + onUnmounted(() => { + stopPolling() + }) + + return { + jobs, + jobsPage, + jobsPageSize, + jobsTotal, + jobsTotalPages, + jobsLoading, + estimate, + packages, + loadingEstimate, + polling, + hasActiveJob, + getActiveJob, + loadJobs, + setJobsPage, + setJobsPageSize, + loadEstimate, + startPolling, + stopPolling, + createExport, + previewRestore, + confirmRestore, + previewSync, + startSync, + retryJob, + cancelJob, + downloadUrl + } +} diff --git a/app/pages/setup.vue b/app/pages/setup.vue index 550f739..c3c4e79 100644 --- a/app/pages/setup.vue +++ b/app/pages/setup.vue @@ -29,6 +29,93 @@ const imageBaseUrl = ref('') const loading = ref(false) const domainSeparationConfirmOpen = ref(false) +const setupMode = ref<'init' | 'restore'>('init') +const restoreFile = ref(null) +const restoreFileInput = ref(null) +const restoreLoading = ref(false) +const restoreJobId = ref(null) +const restoreProgress = ref({ progress: 0, total: 0, message: '' }) +let restorePollTimer: ReturnType | null = null + +function stopRestorePolling() { + if (restorePollTimer) { + clearInterval(restorePollTimer) + restorePollTimer = null + } +} + +function pickRestoreFile() { + restoreFileInput.value?.click() +} + +function onRestoreFileChange(event: Event) { + const input = event.target as HTMLInputElement + restoreFile.value = input.files?.[0] ?? null + if (input) input.value = '' +} + +async function pollRestoreJob(jobId: string) { + try { + const data = await $fetch<{ job: { status: string, progress: number, total: number, message: string, error: string | null } }>( + `/api/setup/restore/${jobId}` + ) + restoreProgress.value = { + progress: data.job.progress, + total: data.job.total, + message: data.job.message + } + if (data.job.status === 'done') { + stopRestorePolling() + restoreLoading.value = false + toast.add({ + title: t('setup.restoreSuccess'), + description: t('setup.restoreSecretsHint'), + color: 'success' + }) + await router.replace('/') + return + } + if (data.job.status === 'failed') { + stopRestorePolling() + restoreLoading.value = false + toast.add({ + title: t('setup.restoreFailed'), + description: data.job.error ?? data.job.message, + color: 'error' + }) + } + } catch { + stopRestorePolling() + restoreLoading.value = false + toast.add({ title: t('setup.restoreFailed'), color: 'error' }) + } +} + +async function submitRestore() { + if (!restoreFile.value || restoreLoading.value) return + restoreLoading.value = true + try { + const form = new FormData() + form.append('file', restoreFile.value) + const data = await $fetch<{ job: { id: string } }>('/api/setup/restore', { + method: 'POST', + body: form + }) + restoreJobId.value = data.job.id + restorePollTimer = setInterval(() => { + void pollRestoreJob(data.job.id) + }, 1500) + await pollRestoreJob(data.job.id) + } catch { + restoreLoading.value = false + toast.add({ title: t('setup.restoreFailed'), color: 'error' }) + } +} + +onUnmounted(() => { + stopRestorePolling() +}) + const domainSeparationWouldActivate = computed(() => willActivateDomainSeparation( domainSeparation.value, @@ -149,7 +236,28 @@ async function performSubmit() { +
+ + +
+
@@ -269,6 +377,73 @@ async function performSubmit() { :disabled="!canSubmit" />
+ +
+
+ + +
+ +
+ {{ t('setup.restoreHint') }} +
+ + + + + + +
(null) const deleteConfirmName = ref('') const deleting = ref(false) +const backupPanelRef = ref<{ applySyncDraft: (draft: { fromBackendId: string, toBackendId: string }) => void } | null>(null) + +function onMigrateIn(backend: StorageBackendItem) { + const defaultBackend = storageData.value?.backends.find(item => item.isDefault) + if (!defaultBackend || defaultBackend.id === backend.id) return + backupPanelRef.value?.applySyncDraft({ + fromBackendId: defaultBackend.id, + toBackendId: backend.id + }) +} + +function onMigrateOut(backend: StorageBackendItem) { + const backends = storageData.value?.backends ?? [] + if (backend.isDefault) { + const target = backends.find(item => !item.isDefault && item.enabled) + if (!target) return + backupPanelRef.value?.applySyncDraft({ + fromBackendId: backend.id, + toBackendId: target.id + }) + return + } + + const defaultBackend = backends.find(item => item.isDefault) + if (!defaultBackend) return + backupPanelRef.value?.applySyncDraft({ + fromBackendId: backend.id, + toBackendId: defaultBackend.id + }) +} + +function showMigrateIn(backend: StorageBackendItem): boolean { + const backends = storageData.value?.backends ?? [] + return !backend.isDefault + && backend.enabled + && backends.some(item => item.isDefault) +} + +function showMigrateOut(backend: StorageBackendItem): boolean { + const backends = storageData.value?.backends ?? [] + if (backend.usage.count === 0) return false + if (backend.isDefault) { + return backends.some(item => !item.isDefault && item.enabled) + } + return backends.some(item => item.isDefault) +} + const defaultBackendName = computed(() => { const backend = storageData.value?.backends.find(item => item.isDefault) return backend?.name ?? t('storage.backendLocal') @@ -297,14 +344,24 @@ watch(isAuthenticated, async (authed) => { :backend="backend" :env-override="storageData.envOverride" :busy="busyId === backend.id" + :show-migrate-in="showMigrateIn(backend)" + :show-migrate-out="showMigrateOut(backend)" @set-default="setDefault(backend)" @edit="openEdit(backend)" @test="testBackend(backend)" @toggle-enabled="toggleEnabled(backend)" @delete="confirmDelete(backend)" + @migrate-in="onMigrateIn(backend)" + @migrate-out="onMigrateOut(backend)" /> + + diff --git a/app/types/backup.ts b/app/types/backup.ts new file mode 100644 index 0000000..8519127 --- /dev/null +++ b/app/types/backup.ts @@ -0,0 +1,53 @@ +export type BackupJobType = 'full_export' | 'full_restore' | 'backend_sync' +export type BackupJobStatus = 'pending' | 'running' | 'done' | 'failed' + +export interface BackupJobItem { + id: string + type: BackupJobType + status: BackupJobStatus + progress: number + total: number + message: string + payload: Record + outputPath: string | null + archiveName: string | null + downloadable: boolean + error: string | null + createdAt: string + finishedAt: string | null +} + +export interface BackupEstimate { + imageCount: number + imageBytes: number + databaseBytes: number + totalBytes: number +} + +export interface BackupPackageItem { + name: string + bytes: number + modifiedAt: string +} + +export interface BackupRestorePreview { + imageCount: number + imageBytes: number + newImages: number + conflictingImages: number + formatVersion: number + appVersion: string + createdAt: string +} + +export interface BackendSyncPreview { + imageCount: number + imageBytes: number + fromBackendId: string + toBackendId: string +} + +export interface SyncDraft { + fromBackendId: string + toBackendId: string +} diff --git a/docker-compose.yml b/docker-compose.yml index 75732e3..d304ad8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: - "6892:6892" # 首次访问 Web 引导创建管理员,无需预先配置环境变量 # 可选:environment 中设置 API_UPLOAD_TOKEN、ALLOWED_REFERER_HOSTS 等 - # 运维:docker exec pichost reset-password | migrate [--apply] | slider | clear-domains [--site] + # 运维:docker exec pichost reset-password | slider | clear-domains | backup-export | backup-restore | storage-sync volumes: # 冒号左边改成 NAS 上的实际存图目录(飞牛示例:/vol1/1000/pichost-data) - ./data:/data diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 170caf9..a7cde88 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -5,10 +5,6 @@ if [ "$1" = "reset-password" ]; then exec node /app/server/cli/reset-password.mjs "${@:2}" fi -if [ "$1" = "migrate" ]; then - exec node /app/server/cli/migrate-to-single-images.mjs "${@:2}" -fi - if [ "$1" = "slider" ]; then exec node /app/server/cli/slider.mjs "${@:2}" fi @@ -17,4 +13,16 @@ if [ "$1" = "clear-domains" ]; then exec node /app/server/cli/clear-domains.mjs "${@:2}" fi +if [ "$1" = "backup-export" ]; then + exec node /app/server/cli/backup-export.mjs "${@:2}" +fi + +if [ "$1" = "backup-restore" ]; then + exec node /app/server/cli/backup-restore.mjs "${@:2}" +fi + +if [ "$1" = "storage-sync" ]; then + exec node /app/server/cli/storage-sync.mjs "${@:2}" +fi + exec node /app/.output/server/index.mjs "$@" diff --git a/docs-site/.vitepress/config.ts b/docs-site/.vitepress/config.ts index 49c7e8a..0cc61fa 100644 --- a/docs-site/.vitepress/config.ts +++ b/docs-site/.vitepress/config.ts @@ -34,7 +34,6 @@ const zhSidebar = [ text: '升级', items: [ { text: '更新日志', link: '/guide/changelog' }, - { text: 'v1.2 迁移', link: '/guide/migration' }, { text: '常见问题', link: '/guide/faq' } ] } @@ -71,7 +70,6 @@ const enSidebar = [ text: 'Upgrade', items: [ { text: 'Changelog', link: '/en/guide/changelog' }, - { text: 'v1.2 migration', link: '/en/guide/migration' }, { text: 'FAQ', link: '/en/guide/faq' } ] } diff --git a/docs-site/en/guide/changelog.md b/docs-site/en/guide/changelog.md index 3b94458..0f19b67 100644 --- a/docs-site/en/guide/changelog.md +++ b/docs-site/en/guide/changelog.md @@ -159,15 +159,12 @@ Version history and notable changes. The full log is also in the repo root [CHAN ### Changed -- All images under `data/images/`; legacy `blog/` / `twikoo/` need migration +- All images under `data/images/`; parallel top-level folders beside `images` are no longer used ### Added -- CLI: `docker exec pichost migrate` / `migrate --apply` - Startup index sync (disk scan, legacy key normalization, orphan cleanup) -See [v1.2 migration](./migration.md). - --- ## [1.1.x] summary diff --git a/docs-site/en/guide/faq.md b/docs-site/en/guide/faq.md index a6fe790..a614dc6 100644 --- a/docs-site/en/guide/faq.md +++ b/docs-site/en/guide/faq.md @@ -61,21 +61,21 @@ Recommended: run PicHost on origin; use **proxied DNS** (and optional **R2** sto - Always open admin on the **site hostname**, not mixed with `localhost` - See [Dual-domain separation](./domain-separation.md) -## Undeletable gallery items after v1.2 upgrade? +## Undeletable gallery items? -Likely **orphan index** rows (no file on disk). Startup sync removes them on restart. See [v1.2 migration](./migration.md#step-2-startup-index-sync-automatic). +Likely **orphan index** rows (no file on disk). Startup sync removes them on restart; you can also delete them from the gallery. -## Do I still need `data/blog/` after migration? +## How do I back up or migrate the full site? -After `migrate --apply`, files live under `data/images/blog/`. Remove leftover empty dirs after backup if you like; dirs with non-image files are kept by the CLI. +From v1.3.0, use **Storage → Backup & migration**, or CLI: -## Object storage only — run migrate? +```bash +docker exec pichost backup-export +docker exec pichost backup-restore /data/backups/pichost-xxx.phost.tar.gz +docker exec pichost storage-sync --from local --to s3-xxx --dry-run +``` -No. Skip the CLI; startup sync focuses on local `data/images/` scanning. - -## Replace old image URLs in posts? - -Use `data/mapping.json` from `migrate` preview. Keys are **storage paths**, not full legacy URLs. See [Migration](./migration.md#urls). +Packages include the database and all images but **not** cloud storage secrets — re-enter them on the Storage page after restore. See [Storage → Backup & migration](./storage.md#backup--migration-v130). ## Skip login during development? diff --git a/docs-site/en/guide/getting-started.md b/docs-site/en/guide/getting-started.md index a0d7219..867d2b5 100644 --- a/docs-site/en/guide/getting-started.md +++ b/docs-site/en/guide/getting-started.md @@ -33,10 +33,18 @@ See `docker-compose.yml` in the repository. ## First-time setup 1. Open your instance URL (Docker default `http://:6892`). -2. Complete `/setup` with admin username and password. +2. On `/setup`, choose **Create admin** or **Restore backup**: + - **Create admin** — username, password, optional registration and dual-domain options. + - **Restore backup** — upload a `.phost.tar.gz` full-site package (replaces current data; re-enter cloud storage secrets after restore). 3. (Optional) Configure site URL, image URL, Referer rules — see [Environment variables](./configuration.md) and [Dual-domain separation](./domain-separation.md). 4. Upload from the home page; use the top nav for **Gallery**, **Storage** (admin), **Settings**, and **API**. +| Create admin | Restore from backup | +| :----------: | :-----------------: | +| ![Setup](/screenshots/setup.png) | ![Setup restore](/screenshots/setup-restore.png) | + +For an already-initialized instance, use [Storage → Backup & migration](./storage.md#backup--migration-v130) instead of `/setup`. + ## Sign in Management pages (upload, gallery, settings, etc.) require login. Enter username and password, complete the verification challenge, then click **Sign in**. @@ -80,12 +88,6 @@ docker exec pichost clear-domains Local: `npm run clear-domains`. See [FAQ — Admin 404 after dual-domain setup](./faq.md#admin-404--locked-out-after-dual-domain-setup). -## Upgrading to v1.2.0 - -If `data/` has legacy top-level folders next to `images` (e.g. `blog/`, `twikoo/`), read the [v1.2 migration guide](./migration.md) first. - -Object-storage-only or files already under `data/images/` — pull the new image and restart. - ## Next steps - [Local development](./local-dev.md) diff --git a/docs-site/en/guide/index.md b/docs-site/en/guide/index.md index 5114215..d1089ad 100644 --- a/docs-site/en/guide/index.md +++ b/docs-site/en/guide/index.md @@ -12,16 +12,20 @@ Welcome to the PicHost user guide. This site is the single source of truth; the ## Screenshots -**main** has no public demo. Below are current product screenshots (v1.2.5+). +**main** has no public demo. Below are current product screenshots (v1.3.0+). -| API | Gallery | -| :-: | :-----: | +| API | Gallery (detail) | +| :-: | :--------------: | | ![API](/screenshots/api.png) | ![Gallery](/screenshots/gallery.png) | | Storage | Settings | | :-----: | :-------: | | ![Storage](/screenshots/storage.png) | ![Settings](/screenshots/settings-en.png) | +| First-time setup | Restore from backup | +| :--------------: | :-----------------: | +| ![Setup](/screenshots/setup.png) | ![Setup restore](/screenshots/setup-restore.png) | + | Activity log | | :----------: | | ![Activity log](/screenshots/logs.png) | diff --git a/docs-site/en/guide/local-dev.md b/docs-site/en/guide/local-dev.md index 682b96c..35d92d1 100644 --- a/docs-site/en/guide/local-dev.md +++ b/docs-site/en/guide/local-dev.md @@ -30,7 +30,6 @@ Open `http://localhost:3000/setup` to create the admin account. Data directory d | `npm run reset-password` | Reset password (optional username) | | `npm run slider` | Reset login verification to local slider | | `npm run clear-domains` | Clear site/image URL settings from DB (recover from dual-domain lockout) | -| `npm run migrate` | Preview legacy dir migration (`-- --apply` to run) | ## Dev-only variables @@ -53,4 +52,4 @@ npm run docs:build npm run docs:preview ``` -Sources live in `docs-site/`; screenshot sources are in `docs/screenshots/` (including `login.png`), copied to `docs-site/public/screenshots/` before build. Live docs: +Sources live in `docs-site/`; screenshot sources are in `docs/screenshots/` (including `login.png`, `setup.png`, `setup-restore.png`, etc.), copied to `docs-site/public/screenshots/` before build. Live docs: diff --git a/docs-site/en/guide/migration.md b/docs-site/en/guide/migration.md deleted file mode 100644 index ff640f3..0000000 --- a/docs-site/en/guide/migration.md +++ /dev/null @@ -1,129 +0,0 @@ -# v1.2.0 local disk migration guide - -From v1.2.0, **all local image files** live under `data/images/`; SQLite `keys` also start with `images/`. Legacy top-level folders next to `images` (e.g. `data/blog/`, `data/twikoo/`) are no longer used. - -Migration is **two steps**: run the **CLI** to move files on disk, then let **startup sync** align the SQLite index. - ---- - -## Migrating from other image hosts (EasyImage, Lsky, Chevereto, …) - -There is **no** dedicated “pull from URLs” or “import via vendor API” tool. Moving from **legacy PicHost** or **another self-hosted** install uses the same **local file** workflow: - -1. Locate the **image files** on the old server (copy the tree, not just the database). -2. Place them under PicHost `data/` as a **top-level folder** next to `images` (any name — it becomes `images/{name}/...`). -3. Run `migrate` / `migrate --apply`, then restart PicHost. - -| Source | Typical path on old server | After copy into PicHost | -| ------ | -------------------------- | ----------------------- | -| PicHost v1.1.x | `data/blog/`, `data/twikoo/` | Already under `data/` → run `migrate` | -| EasyImage(s) | `i/` or `upload/` | e.g. `data/easyimage/` → `migrate` | -| Lsky | `public/uploads/` etc. | e.g. `data/lsky/` → `migrate` | -| Chevereto etc. | `images/` or `content/` | e.g. `data/chevereto/` → `migrate` | -| Custom | your folder name | `data/your-folder/` → `migrate` | - -The CLI scans **every top-level directory under `data/` except `images`**, not only `blog` / `twikoo`. - -**Limits:** files only — accounts, tokens, and old public URLs are not imported. `mapping.json` maps old **storage keys**, not full old-site URLs. For S3/R2-only legacy hosts, sync blobs to `data/…` or attach the bucket in PicHost **Storage** settings. - ---- - -## Layout before and after - -### Before (typical v1.1.x) - -``` -/data -├── pichost.db -├── blog/ -│ └── 2026/08/TeKJ2fD6cB6j.webp -├── twikoo/ -└── images/ -``` - -Index keys might look like `blog/2026/08/TeKJ2fD6cB6j.webp`. - -### After (v1.2.0) - -``` -/data -├── pichost.db -├── mapping.json -└── images/ - ├── blog/ - │ └── 2026/08/TeKJ2fD6cB6j.webp - └── twikoo/ -``` - -Index key: `images/blog/2026/08/TeKJ2fD6cB6j.webp`. - ---- - -## Step 1: CLI file migration - -Run **before or after** upgrading the image; backup `data/` first. - -```bash -docker exec pichost migrate # preview + mapping.json -docker exec pichost migrate --apply # move files -``` - -Local: `npm run migrate` / `npm run migrate -- --apply`. - -| Item | Behavior | -| ---- | -------- | -| Scan | Every top-level directory under `data/` **except `images`** | -| Target | `data/images/{original-top-dir}/{relative-path}` | -| Extensions | jpg, jpeg, png, webp, gif, svg, ico | -| Sidecar | `.meta.json` next to an image is moved if present | -| Other files | Not moved; parent directory kept if anything remains | -| Mapping | `data/mapping.json` — old key → new key | - -Script: `server/cli/migrate-to-single-images.mjs`. - ---- - -## Step 2: Startup index sync (automatic) - -Runs on every start (`npm run dev`, Docker). No manual command. - -```text -[INFO] 开始同步图片索引:扫描本地磁盘 ... -[INFO] 磁盘扫描完成:... -[INFO] 开始归一化遗留图片路径 ... -[INFO] 开始校验索引与磁盘一致性,清理无文件的孤儿记录 -[INFO] 图片索引同步结束 -``` - -| Step | Purpose | -| ---- | ------- | -| Scan `data/images/` | Insert missing index rows for files on disk | -| Normalize legacy keys | `blog/...` → `images/blog/...` when files are in place | -| Purge orphans | Remove index rows with no file on disk | -| Repair Content-Type | Fix `application/octet-stream` entries | - -The CLI only **moves files**. Index alignment runs at startup — **restart** after `migrate --apply`. - ---- - -## Recommended upgrade flow - -1. Backup `data/`. -2. `docker exec pichost migrate` — review output and `mapping.json`. -3. `docker exec pichost migrate --apply`. -4. Deploy v1.2.0 and restart. -5. Check logs for successful index sync. -6. Use `mapping.json` to update external URLs if needed. - -Skip step 1 if you only use object storage or everything is already under `data/images/`. - ---- - -## URLs - -| Old key | `blog/TeKJ2fD6cB6j.webp` | -| New key | `images/blog/TeKJ2fD6cB6j.webp` | - -With “hide folder” mode, short URLs like `/TeKJ2fD6cB6j.webp` may still resolve by filename. Use `mapping.json` for bulk replacements. - -Chinese version: [v1.2 迁移指南](/guide/migration) diff --git a/docs-site/en/guide/storage.md b/docs-site/en/guide/storage.md index b63ced1..f904203 100644 --- a/docs-site/en/guide/storage.md +++ b/docs-site/en/guide/storage.md @@ -54,13 +54,48 @@ Copied links use **IMAGE_BASE_URL**. “Hide folder prefix” may shorten URLs; ## Usage & gallery filter - Per-backend usage on the Storage page -- Gallery filters by **storage backend** and **upload source**; grid/list view toggle +- Gallery filters by **storage backend** and **upload source**; grid/list view toggle; click a thumbnail for the detail modal (dimensions, storage path, link formats) -## Backup +## Backup & migration (v1.3.0+) -Back up `data/images/`, `data/pichost.db`, and bucket objects. +The **Backup & migration** panel has three action cards and a paginated **Recent jobs** table below: -Upgrading from v1.1.x with parallel folders: [v1.2 migration](./migration.md). +| Feature | Description | +| ------- | ------------- | +| **Create site backup** | Export `.phost.tar.gz` with `pichost.db` and all images (including objects on cloud backends); shows estimated size and package contents | +| **Restore from backup** | Upload locally or pick an existing package under `data/backups/`, preview, then confirm; skip or overwrite conflicting images | +| **Cross-backend sync** | Copy images between configured backends and update the index; shows pending count/size, dry-run, optional delete-source and set-default | + +![Backup & migration](/screenshots/storage.png) + +- Exports are saved under `data/backups/`; only one backup/migration job may run at a time +- Job list supports pagination; download exports, view restore summaries, retry failed sync jobs +- Packages **do not** include cloud storage secrets — re-enter them on the Storage page after restore +- Uninitialized instances can use the **Restore backup** tab on `/setup` (always overwrite mode) + +![Setup restore](/screenshots/setup-restore.png) + +### CLI + +```bash +docker exec pichost backup-export +docker exec pichost backup-restore /data/backups/pichost-xxx.phost.tar.gz +docker exec pichost backup-restore /data/backups/pichost-xxx.phost.tar.gz --overwrite +docker exec pichost storage-sync --from local --to s3-xxx --dry-run +docker exec pichost storage-sync --from local --to s3-xxx --set-default +``` + +Local development (project root): + +```bash +npm run backup-export +npm run backup-restore -- data/backups/pichost-xxx.phost.tar.gz +npm run storage-sync -- --from local --to s3-xxx --dry-run +``` + +### Manual backup + +You can still back up `data/images/`, `data/pichost.db`, and bucket objects directly; prefer the full-site export above. ## See also diff --git a/docs-site/guide/changelog.md b/docs-site/guide/changelog.md index 02e87d2..c4a548a 100644 --- a/docs-site/guide/changelog.md +++ b/docs-site/guide/changelog.md @@ -159,15 +159,12 @@ PicHost 版本历史与重要变更说明。完整记录亦见仓库根目录 [C ### 变更 -- 图片统一存放在 `data/images/`;遗留 `blog/`、`twikoo/` 等并列目录需迁移 +- 图片统一存放在 `data/images/`;不再使用与 `images` 并列的顶层目录 ### 新增 -- CLI:`docker exec pichost migrate` / `migrate --apply` - 启动时自动同步图片索引(扫描磁盘、归一化遗留 key、清理孤儿记录) -详见 [v1.2 迁移](./migration.md)。 - --- ## [1.1.x] 摘要 diff --git a/docs-site/guide/faq.md b/docs-site/guide/faq.md index eb8a7d0..29b0f20 100644 --- a/docs-site/guide/faq.md +++ b/docs-site/guide/faq.md @@ -62,21 +62,21 @@ docker exec pichost clear-domains - 后台请用 **网站域名** 打开,不要用 `localhost` 混用 - 见 [双域名分离](./domain-separation.md) -## 升级 v1.2 后图库有删不掉的记录? +## 图库有删不掉的记录? -可能是 **孤儿索引**(有记录无文件)。重启后启动同步会自动清理;也可手动删除仅索引项。见 [v1.2 迁移](./migration.md#第二步启动时自动同步索引)。 +可能是 **孤儿索引**(有记录无文件)。重启后启动同步会自动清理;也可在图库中手动删除。 -## 遗留 `data/blog/` 目录还要吗? +## 如何备份与迁移整站? -执行 `migrate --apply` 后文件已迁入 `data/images/blog/`。若原目录只剩空壳或非图片文件,可自行备份后删除;迁移脚本不会删除仍含非图片文件的目录。 +v1.3.0 起在 **存储** 页使用「备份与迁移」面板,或 CLI: -## 只用对象存储需要跑 migrate 吗? +```bash +docker exec pichost backup-export +docker exec pichost backup-restore /data/backups/pichost-xxx.phost.tar.gz +docker exec pichost storage-sync --from local --to s3-xxx --dry-run +``` -不需要。图片在桶内时跳过 CLI;启动同步主要面向本地 `data/images/` 磁盘扫描。 - -## 如何替换博客里的旧图片 URL? - -使用 `data/mapping.json`(`migrate` 预览时生成)批量替换旧 key。注意映射的是 **存储 key**,不是完整旧站 URL。见 [迁移指南](./migration.md#外链与直链)。 +备份包含数据库与全部图片,**不含** 云存储密钥;恢复后请在存储页重新填写。详见 [存储 → 备份与迁移](./storage.md#备份与迁移v130)。 ## 开发时如何跳过登录? diff --git a/docs-site/guide/getting-started.md b/docs-site/guide/getting-started.md index 31b7af6..e876817 100644 --- a/docs-site/guide/getting-started.md +++ b/docs-site/guide/getting-started.md @@ -33,10 +33,18 @@ docker compose up -d ## 首次设置 1. 访问实例 URL(Docker 默认 `http://<主机>:6892`)。 -2. 在 `/setup` 填写管理员用户名与密码。 +2. 在 `/setup` 选择 **创建管理员** 或 **从备份恢复**: + - **创建管理员**:填写用户名与密码,可选开放注册、双域名等。 + - **从备份恢复**:上传 `.phost.tar.gz` 整站备份包(覆盖当前数据;云存储密钥需恢复后重新填写)。 3. (可选)配置网站域名、图片域名、防盗链等 — 详见 [环境变量](./configuration.md) 与 [双域名分离](./domain-separation.md)。 4. 登录后可在首页上传图片;顶栏可进入 **图库**、**存储**(管理员)、**设置**、**API**。 +| 创建管理员 | 从备份恢复 | +| :--------: | :--------: | +| ![首次设置](/screenshots/setup.png) | ![从备份恢复](/screenshots/setup-restore.png) | + +已初始化实例请使用 [存储 → 备份与迁移](./storage.md#备份与迁移v130) 恢复,而非 setup 页。 + ## 登录 访问上传、图库、设置等管理页面前需登录。在登录卡片中填写用户名与密码,完成人机验证后点击 **登录**。 @@ -83,12 +91,6 @@ docker exec pichost clear-domains 本地:`npm run clear-domains`。详见 [常见问题 — 双域名配置后后台 404](./faq.md#双域名配置后后台-404-进不去)。 -## 升级到 v1.2.0 - -若 `data/` 下存在与 `images` 并列的遗留目录(如 `blog/`、`twikoo/`),升级前请阅读 [v1.2 迁移指南](./migration.md)。 - -仅对象存储、或图片已在 `data/images/` 下时,拉取新镜像并重启即可。 - ## 下一步 - [本地开发](./local-dev.md) — `npm run dev` 与 `.env` diff --git a/docs-site/guide/index.md b/docs-site/guide/index.md index c13bfbe..7524672 100644 --- a/docs-site/guide/index.md +++ b/docs-site/guide/index.md @@ -12,9 +12,9 @@ ## 截图预览 -**main** 分支暂无公网演示,以下为当前产品界面(v1.2.5+)。 +**main** 分支暂无公网演示,以下为当前产品界面(v1.3.0+)。 -| API | 图库 | +| API | 图库(详情) | | :-: | :-: | | ![API](/screenshots/api.png) | ![图库](/screenshots/gallery.png) | @@ -22,6 +22,10 @@ | :------: | :--------: | | ![存储管理](/screenshots/storage.png) | ![设置与偏好](/screenshots/settings.png) | +| 首次设置 | 从备份恢复 | +| :------: | :--------: | +| ![首次设置](/screenshots/setup.png) | ![从备份恢复](/screenshots/setup-restore.png) | + | 操作日志 | | :------: | | ![操作日志](/screenshots/logs.png) | diff --git a/docs-site/guide/local-dev.md b/docs-site/guide/local-dev.md index e315d03..093e03a 100644 --- a/docs-site/guide/local-dev.md +++ b/docs-site/guide/local-dev.md @@ -30,7 +30,6 @@ npm run dev | `npm run reset-password` | 重置密码(可选用户名) | | `npm run slider` | 将登录验证重置为本地滑块 | | `npm run clear-domains` | 清除数据库中的网站域 / 图片域配置(双域名锁死时恢复) | -| `npm run migrate` | 预览遗留目录迁移(加 `-- --apply` 执行) | ## 开发专用环境变量 @@ -53,4 +52,4 @@ npm run docs:build # 构建静态站点 npm run docs:preview # 预览构建结果 ``` -文档源码在 `docs-site/`;截图源文件在 `docs/screenshots/`(含 `login.png` 登录页),构建前会复制到 `docs-site/public/screenshots/`。在线文档: +文档源码在 `docs-site/`;截图源文件在 `docs/screenshots/`(含 `login.png`、`setup.png`、`setup-restore.png` 等),构建前会复制到 `docs-site/public/screenshots/`。在线文档: diff --git a/docs-site/guide/migration.md b/docs-site/guide/migration.md deleted file mode 100644 index ec8c732..0000000 --- a/docs-site/guide/migration.md +++ /dev/null @@ -1,176 +0,0 @@ -# v1.2.0 本地磁盘迁移指南 - -v1.2.0 起,**所有本地图片文件**统一放在 `data/images/` 下;SQLite `images` 表中的 `key` 也以 `images/` 开头。旧版在 `data/blog/`、`data/twikoo/` 等与 `images` **并列的顶层目录**不再符合新模型。 - -迁移分 **两步**:先用手动 CLI **搬文件**,再由服务 **启动时自动同步索引**。 - ---- - -## 从其它图床迁入(EasyImage / 兰空 / Chevereto 等) - -**没有**单独的「一键从外链拉取」或「对接某某图床 API」工具。从 **PicHost 旧版** 或其它自托管图床迁入,走的是同一套 **本地文件迁移**: - -1. 在旧图床服务器上找到图片**物理目录**(整目录拷贝,不要只拷数据库)。 -2. 把该目录放到 PicHost 的 `data/` 下,作为与 `images` **并列的顶层文件夹**(文件夹名任意,会保留为 `images/{文件夹名}/...`)。 -3. 执行 `migrate` / `migrate --apply`,再重启 PicHost。 - -### 常见来源示例 - -| 来源 | 典型图片目录(在旧服务器上) | 放入 PicHost 后示例 | -| ---- | ---------------------------- | ------------------- | -| PicHost v1.1.x | `data/blog/`、`data/twikoo/` | 已在 `data/` 下,直接 `migrate` | -| EasyImage / EasyImages | `i/` 或安装目录下的 `upload/` | 拷到 `data/easyimage/` 再 `migrate` | -| 兰空图床 (Lsky) | `public/uploads/` 等 | 拷到 `data/lsky/` 再 `migrate` | -| Chevereto 等 | `images/` 或 `content/` | 拷到 `data/chevereto/` 再 `migrate` | -| 任意自定义目录 | 你的顶层文件夹名 | 拷到 `data/你的目录名/` 再 `migrate` | - -脚本会扫描 `data/` 下**除 `images` 外所有顶层目录**里的图片,不限于 `blog` / `twikoo`。子目录结构会原样保留在 `images/{顶层名}/` 下。 - -### 操作示例(Docker) - -```bash -# 在宿主机:把从旧图床打包的目录放进挂载卷(名称自定) -# 例如:./data/easyimage/2026/01/photo.jpg - -docker exec pichost migrate # 预览 -docker exec pichost migrate --apply -# 重启容器 → 启动日志会补全 SQLite 索引 -``` - -### 说明与限制 - -- **只迁移文件**:旧图床的账号、Token、外链 URL **不会**自动导入;`mapping.json` 里的 key 是「旧磁盘相对 key → 新 key」,**不是**旧站完整 URL,替换外链需自行对照。 -- **对象存储**:若旧图床图片在 S3/R2 桶里,请用桶工具同步到本地 `data/某目录/`,或直接在 PicHost **存储**页配置同一桶(不经过本 CLI)。 -- **已直接在 `data/images/` 下**:无需 `migrate`,重启后启动同步会自动建索引。 - ---- - -## 存储结构对比 - -### 迁移前(v1.1.x 常见) - -``` -/data -├── pichost.db -├── blog/ -│ └── 2026/08/TeKJ2fD6cB6j.webp -├── twikoo/ -│ └── xxx.webp -└── images/ # 可能已有部分新图 - └── ... -``` - -SQLite 中 `key` 可能是 `blog/2026/08/TeKJ2fD6cB6j.webp`(与磁盘顶层目录一致)。 - -### 迁移后(v1.2.0) - -``` -/data -├── pichost.db -├── mapping.json # CLI 生成:旧 key → 新 key(供替换外链) -└── images/ - ├── blog/ - │ └── 2026/08/TeKJ2fD6cB6j.webp - ├── twikoo/ - │ └── xxx.webp - └── ... # 新上传:images/随机ID.webp 或 images/年/月/随机ID.webp -``` - -对应 `key`:`images/blog/2026/08/TeKJ2fD6cB6j.webp`。 - ---- - -## 第一步:CLI 迁移磁盘文件 - -在 **升级镜像之前或之后**均可执行;建议在升级前完成,并先备份整个 `data/` 目录。 - -### Docker - -```bash -# 预览:列出待迁移文件,写入 data/mapping.json(旧 key → 新 key) -docker exec pichost migrate - -# 确认无误后执行文件移动 -docker exec pichost migrate --apply -``` - -### 本地开发 - -```bash -npm run migrate # 预览 -npm run migrate -- --apply # 执行 -``` - -### 脚本行为 - -| 项目 | 说明 | -| ---- | ---- | -| 扫描范围 | `data/` 下**除 `images` 外所有顶层目录**(不限于 blog/twikoo) | -| 迁移目标 | `data/images/{原顶层目录名}/{相对路径}` | -| 图片类型 | `.jpg` `.jpeg` `.png` `.webp` `.gif` `.svg` `.ico` | -| 伴随文件 | 若存在同名的 `.meta.json` 会一并移动 | -| 非图片文件 | 不移动;若目录内仍有其它文件,**保留原目录**不删除 | -| 映射表 | `data/mapping.json`,例如 `"blog/foo.webp": "images/blog/foo.webp"` | - -脚本路径:`server/cli/migrate-to-single-images.mjs`。 - ---- - -## 第二步:启动时自动同步索引 - -每次 PicHost 启动(`npm run dev`、Docker 容器启动)会自动执行,**无需手动命令**。日志示例: - -```text -[INFO] 开始同步图片索引:扫描本地磁盘 {"path":".../data/images/"} -[INFO] 磁盘扫描完成:已补全缺失索引 {"inserted":3} -[INFO] 开始归一化遗留图片路径(如 blog/ → images/blog/) -[INFO] 遗留路径归一化完成:无需调整 -[INFO] 开始校验索引与磁盘一致性,清理无文件的孤儿记录 -[INFO] 孤儿索引清理完成:未发现孤儿记录 -[INFO] 开始修复存量 Content-Type 元数据 -[INFO] Content-Type 修复完成:无需修复 -[INFO] 图片索引同步结束 -``` - -| 步骤 | 作用 | -| ---- | ---- | -| 扫描 `data/images/` | 磁盘上有、索引里没有 → **补全** `images` 表 | -| 归一化遗留 key | 将 `blog/...` 等旧 key 更新为 `images/blog/...`(文件已在正确路径时) | -| 清理孤儿索引 | 索引里有记录、磁盘无文件 → **删除**幽灵记录(避免图库出现删不掉的项) | -| 修复 Content-Type | 修正错误的 `application/octet-stream` | - -CLI 只负责**搬文件**;索引对齐、遗留 key、孤儿记录由启动同步处理。执行 `migrate --apply` 后**重启一次**服务即可。 - ---- - -## 推荐升级流程 - -1. **备份** `data/`(含 `pichost.db` 与各目录)。 -2. `docker exec pichost migrate` 预览,检查输出与 `mapping.json`。 -3. `docker exec pichost migrate --apply` 执行迁移。 -4. 拉取 / 部署 **v1.2.0** 镜像并重启容器。 -5. 查看启动日志,确认「图片索引同步结束」无报错。 -6. 用 `mapping.json` 批量替换博客、Twikoo 等外链中的旧路径(若需要)。 - -仅使用对象存储、或图片早已全部在 `data/images/` 下时,**跳过第一步**;第二步仍会在启动时运行,通常几秒内完成且无变更日志。 - ---- - -## 外链与直链 - -| 场景 | 说明 | -| ---- | ---- | -| 旧 key | `blog/TeKJ2fD6cB6j.webp` | -| 新 key | `images/blog/TeKJ2fD6cB6j.webp` | -| 隐藏目录模式 | 若开启「隐藏 images 前缀」,短链可能为 `/TeKJ2fD6cB6j.webp`;服务按文件名反查索引 | -| 替换建议 | 以 `mapping.json` 为准;或重新在图库复制新链接 | - ---- - -## 相关命令 - -| 命令 | 说明 | -| ---- | ---- | -| `docker exec pichost migrate` | 预览磁盘迁移 | -| `docker exec pichost migrate --apply` | 执行磁盘迁移 | -| `docker exec pichost reset-password` | 重置密码(与迁移无关) | diff --git a/docs-site/guide/storage.md b/docs-site/guide/storage.md index 7933a8a..8969fd7 100644 --- a/docs-site/guide/storage.md +++ b/docs-site/guide/storage.md @@ -56,17 +56,53 @@ PicHost 支持 **本地磁盘** 与 **S3 兼容对象存储**(Cloudflare R2、 ## 用量与筛选 - 存储页展示各后端用量(本地扫描目录,对象存储查询 API) -- 图库可按 **存储后端**、**上传来源** 筛选,支持网格/列表视图切换 +- 图库可按 **存储后端**、**上传来源** 筛选,支持网格/列表视图切换;点击图片打开详情弹窗(尺寸、存储路径、多格式链接复制) -## 备份 +## 备份与迁移(v1.3.0+) -请同时备份: +存储页 **备份与迁移** 面板包含三张功能卡与下方 **最近任务** 列表: -- `data/images/`(本地后端) -- `data/pichost.db` -- 各云桶中的对象 +| 能力 | 说明 | +| ---- | ---- | +| **创建站点备份** | 导出 `.phost.tar.gz`,含 `pichost.db` 与全部图片(含云存储中的对象);展示预计体积与备份包含项 | +| **从备份恢复** | 本地上传或选择 `data/backups/` 内已有包,预检后确认;可选跳过/覆盖冲突图片 | +| **跨后端同步** | 在已配置后端间拷贝图片并更新索引;展示待迁移数量与体积,支持预检、删源、设默认 | -从 v1.1.x 升级且存在 `data/blog/` 等并列目录时,见 [v1.2 迁移](./migration.md)。 +![备份与迁移](/screenshots/storage.png) + +- 导出文件保存在 `data/backups/`;后端同一时间仅允许一个进行中的备份/迁移任务 +- 任务列表支持分页,可下载导出包、查看恢复结果、重试失败的同步任务 +- 备份包 **不含** 云存储 Access Key / Secret Key,恢复后请在存储页重新填写 +- 未初始化实例可在 **setup** 页 **从备份恢复** 标签上传整站包(始终覆盖模式) + +![从备份恢复(setup)](/screenshots/setup-restore.png) + +### CLI + +```bash +# 导出整站备份 +docker exec pichost backup-export + +# 从备份恢复(默认跳过冲突图片) +docker exec pichost backup-restore /data/backups/pichost-xxx.phost.tar.gz +docker exec pichost backup-restore /data/backups/pichost-xxx.phost.tar.gz --overwrite + +# 跨后端同步 +docker exec pichost storage-sync --from local --to s3-xxx --dry-run +docker exec pichost storage-sync --from local --to s3-xxx --set-default +``` + +本地开发(项目根目录): + +```bash +npm run backup-export +npm run backup-restore -- data/backups/pichost-xxx.phost.tar.gz +npm run storage-sync -- --from local --to s3-xxx --dry-run +``` + +### 手动备份 + +仍可同时备份 `data/images/`(本地后端)、`data/pichost.db` 与各云桶中的对象;推荐使用上文整站导出。 ## 相关 diff --git a/docs/screenshots/gallery.png b/docs/screenshots/gallery.png index 3cfc6088625ab2a3a8983718a361329b33de414e..2f401e502a2a77c40bb3c4d5b8885ba0765dc69c 100644 GIT binary patch literal 42587 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

D8%X6kC|SUcDiB<_<=<3fH6u8GETyfZh=xNrDk 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 z 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%0AH?6`I~8M^he`c2#5vRoEzd5D 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�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

qVI6RZIp<>3|>d}2oCk58ZT5{KXE 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 X^8o&;uKV}zvcECe|AtYiuT%d417Bc@ diff --git a/docs/screenshots/setup-restore.png b/docs/screenshots/setup-restore.png new file mode 100644 index 0000000000000000000000000000000000000000..1bcd4f22b172b753ab028f7b679911b3763aa6dd GIT binary patch literal 51498 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 L=PmiA>G}Tv6A;tA literal 0 HcmV?d00001 diff --git a/docs/screenshots/setup.png b/docs/screenshots/setup.png index a3937a96f0419740c8bd714a36c059b825c6815a..a3876e4bcf794fe98e59df2173e18e87aa2e95b9 100644 GIT binary patch literal 60105 zcmY(qbyQT}_dg6ncMUDwB_SmU3?<#&EiE9Wz|h?&At2q|Ees8!NQZPuw{$)ieSf~c z^{jRNn7Q}d6Z`CV?S1x+P*s+}LMKCqgM-78la*43g9ACj!6DS5f`BKL9_~eOaJX=C zQsSEL;rBDp{J~Qhk0$OT-?%Xa5Tc(2h6k3*tKz$a(~=umMBBUyY^{vwB5}KCdgIbw zg_Ulh$M9O9pPn^6{CPi#1-=x*F0v#fMG{XO8-?U;Xn-LWoc{M&6muwqP831 zjuPMV!^;mnw--n4It83IX>Rlo(7$#-x1w=J1CLMrx7l#Q@7j2OYv81EO@Kp-heLZG z1?N6#u>Nfc_zg76WH@);y03Z$Z_ujwpT60)15J)qGX6M~^GB5RNBpYjFSPr6%xYPd zx(-p79BqRR7*8}-=vMLXbfbER#d#UhAAdiM1_8!s+^2?649B{dvH>3h?cFC}e1U*P>R%Q`*BH$-4JuV{z2UtNS?w~}$_8W>}3EB^*O@nVg zJ}s+~U=SZ^ho7S1mWr}(GkIlfeHbNt<)o;%(eGKp9Im_=i9A0dMKx0{j&r z?9`;VvDM+dHu8e65Hc0_iWjvE4?2)Qn+Z3CA}D+Iar_O4)3#N67)p#+u6*s6_CO7}@W z1cI`bt(lREt|b3%jT-TaT)OkWRbUUINFl0&!~@EM3Hq6p1;4VrN*x`$dU)pK@XPb6 z*_N!`n=l9|+f8~|m+>z}{hQDrqSUnU_!FA(gyB(bu#?^O*aLRIls)EFya{a|dqIz{ zNG7zSAA$<4F)5aw2m~BL0$hH6b1_^k$R(h+cOy0>=QARAlVkgV1cmg(sySKk@G7J; zklT3WsJqmH^*6`AnYPd%+SJeENl=v(t!Z96a|dL&r>k*GF0(5nC4)V*_w=y;_Jc!f zMuV7B^Tv~Vnx@>e$;+%KQ8n`4gi?Cg`tcYE?$Q0@3?2|J*&vn_Q=!pGH~3RFw8?)1A=l}^p5Z?Rj)&YJQVZZx$f_tNzyA;^HyS(tb7t&H8yVC^cRt+Lhjd^= zRTuA{4tM_~5Alrf;n?{oAn+$q<9u`c`t!z5?z|mP)R)tvhK8E{6f2GVu{-}*T{atv zNG;SS9fC_esH%u|Lc@(V=Qf`zL^i>*(2az!c~WSqmH<;4HaEwo4q&J5WQ>QrC17Sf z75Ar>#HADTv^IacsOEU?nHI}vuK{(<&MzKaam{t4AT4D2yTfe~cv&1oRG!4@&z7}G zTrQEF$`fOj?!3H>V6fWe`R6=6P~{w0~G>{YNYC%KloFv`Mp+?WSV}UXpgVe z+kE+(e}W-P{Q~h0m!=1WTf)7OtBb(ngl4t)Oe7;a@8qCb(%JDXHW=(|&3nIUD*sm( z1Sm7Ykp_~8e^jl6hRCp3nXF6hAD>kL{kfA`<|pyFPK>A-;hp}Y1+@htu&X?0_qPe? zC?35NY7{ZH@wY?|{7^x{w;tjMp6*wM5?m+sGDCb)|64$7B{+8HXo7$mK z_U3Hc>$cKROFmB}K?R0?r>q2urwPZSN2_G>8l_2!vemfa-&ad6xay5s1LXHfS_SaA z>Ph4fx=+Cuvc(dwCWkH>ujgnel++9q2{iI8!Dzh%rl?O{-Gl<3;}-%nbiQ@KsdUaz z4nX?H&G8UnRLIAb__2;wkz>!^1{0Ycr5)Mx9|{0FAR*2o0>^j3dC+JgvpCt4X6LKIpJxmuN3?#_OL-avg$(PM9UW* zyEZ=Js5J&F9klVW|52khz~3O#!LO*kl)#O*gYSeUV_cg^;;&poK#mM6%2b>xCp3p= zJ6FQuGV5hE>A*Qykp8a&DWj>vN9e&q>3m)u%Ul9&sq6gk_Tr{X?mr2v4}ze}$>Sv{O9L;j zgoI|ZuRx@0W}tntrw*2%Aw^M|>A-G@@;@>5tmsnw_gOxj%1*w^Cx^P&))!&-9u*gS z&t#v}Y%-pyE3m9*phnYQI!wjwR2g}BCk>wR>uXU~f6wMgr^G>s(KK{+n1y~xbG-ic zS3|}lAkOwW(2lx)octy<=Z-a8xN2(fZ-4JTL$>6#!rbaz(?9lDbQga5tC-vb0%9kZ z@m}u5$9m+CJ)PiRGe-#+ne$HST8w{x7hh-paj&PFcG={rX8gzOU+G78Xs7ro4$gM} zyu$x?*W5)T(!+>4v zzTlF%b#S3q6pFVbD3vk$5zV7`TzPa1durqdeS8(7zT%(wUsuYeBVrULCoOp}*!keD z&Yqp9U9s5gr0V>vTX{{v5_@@5;6PwkUYDt(>oFv%Wv}^qt2O9Si|W<=eTLQ^_G4~q zO(D%JE>}t6;+;(I?w@qPp2G&R+K;e7;@{`YD4{IPzp3_8j9lDy$_C2f_)*v=iuCW2 zcXW;sF~G0l2Z*wGFp?H-G_zI7>~Erp6p%0kCi#7>We)nv?1+8Guai6TozS2@w# z5CSU4$6^hJ7U6=lK0;;)1m85=by(eIC_Q?6uL~dX9$=-3em~V?v>YcI0}-CFEu%^-M+Km=DL5Fw}3(6TS4D!zJE3ld>gdesWSEjvwi5%QeRwLtYzX2Uo zc0>i2l)2R}-dn!LKW2sBUQsLiy{xajy!iF>yl}VwO|ex@jt`@#5)5gzUP%Q*9i4pA z8fg_1=^(h474|;6pT|_c1&aJ+)`uq)BFDM-V9t&}A}4ALxc#gQ5?~Q(eos`(y6W4*ipxjX zGsz?rnaCkp)>oaDM5LA#*cF*rSk?0DeG%i;0pF&p!SHLl5@2{vk%_vbZ`DwF5lT0UZw^hSI0Zj=9Wfg1eTzVWPkS~vhzQ2KIa_O0c~~b<>`p0!2o-y zAPY$@TJmutRwvf~5_$!@cG^P#*orI1Ctd|Lvl-ORq@TTlvn!(ZUWyK5|FQ-6CXu;52lQIuQ|qJCt~J$FT2Q1IpfQY;0LVENtmkV? zAZS6LB7CnWVr4WUXvDk&fxBERLakwX_*O|9u}ufN(FwQ{6Y1 z;ALky$pttZm(0>aku=5wpA)g-slghhprf)#-@sPVi8%Q7x*i~kDfMhAQ7q`WbY*Tv zZE~3+La8k?jQv7>H8e1>TMxN>9ARLpil5BDZVbJT3NU1qbP$RIp+@$XRcNNtm+LF5 zDC9cGpu&&_!)@j>9HRW4rs_7dYp}v3&VeTC06)_t_y)yQBY0X{H4FW!{0&vFI*kZA zcTK+m09QZ(xL02`*r5E1mgdTFpuK{?TR3dO^g*s*|fo~G$Z3Sw&{oO^xQVC}*y zrqS%cINnDryHaVeoeuSM5o`SqiIWxd)!@W5Uz_~$g*4F~_DQx@BviFRm1i3Slr1+} zqhYx0TXu0d`abA$q}ACC`Zj(1TC@f7X7Hrykx0f9UaOMp?d?Mn?=$0Mirlh7;vuwv zHzK7;@)|@z2lvbCMfKidG8sp%FH%i!Ygs{xD}~x*0GA?70elus01^$}d4xK0cA9Sp z-#i@RY*lq9hOHD&MWOs%C{1XINd#e;G+2**dbCC!DTz?CEw*^s>Efg!fP!3QlQBRO zaAZohxndFLWLBDgoqD_4SNx(yN3ZFvWRe0?)`(*yk>vRzAz|HAm4?T9-H_9j?*zS(T!tlT#pYDih{oIm^*DTZCG{szz45=>1#a;&% zmHV6H%Q*9C2Efi*_>3JKv2juLH%$<{MX{evMe61&X4%lQD=-&ZXh@)9WQTu*TUFHy zXHL{&tHl3yrjR&j86c5(%JS0El3AAV*(4qbF1flq(lzh>J1jP4e2Aga_v*x)$!@I& zB4#!K68R$vrTgo+)z`IDzrwdcfiKTM<|ylTxZ={CFWdN5Ulxhe)Y!k4b*r&E> z$K*quL@WzMC@~G*Q#a7*QlsgijNQe>=~k%S0G@k!pTvuVBmjtIF9JJ0cs&qJzk=&; z%Kte42ZWM>*d#Vx|B%!F=v`;qMCiYA&2B@liOa+C69-Al9C|~OtNWerhXevzc1ojj z_jWMtnq8Qn?{=jMyIOd$Y?TTP{MmT0orE6Nc7fnR?#mqK@4T4oziCy!6e#XJh!Okj zX)S-zxi|5fx{NV8+FAKuEMVqt`6lluRv;$qapv*|a)TM{qqS>1CBt7#kpPHNOy_4q zf|Wi-xL@eHn~|o&UpHY3Z>Y;?mUjqsj#$s5RBf7)nV7 z#d+#oqoqz!Ii}V6TxR#^LUv^DLYyU(R@px%`-T+g3rfj_ud;7+bDEbVLX#44)v^dx zwMW%eWqKg}o=s)vd>sd2(Tg%ZQ(-Y!-Z3*xSDE_j-p3q|9176Oj)U73|9}k-*n0r9 z%Vq%@8LF))2U0_1FA(L9TbRA;7vp=db(t90OT#&^x3$C8O@2nq>Tk)qT}+qi%V6Jv zWGaKvi zmUzhs!~y5`UQRS+sE6-VkE)1|Hcr-9kJEXlW58HmC+l-ApJbJM;)*~SmhaP=Zg4kF z5)!KuKe@8&l;9igtB*{U*qhf!I@$;D0;PnKi2=nu4VVT4y59Hr;f!#uZ}UEEA8saz zIq12+nsq>iI-{RP@aaMuvJH+QGSW&INqV{tgt099F1}T#dnnjfhw(I*+So0gz1iL} zSk0bi{ths5hL}RByVpGtuB>{k?Q3PokA=Q6dowf)0i0@-A~eghvi8D|invIj~wTn*x6*{PnMZ zwS+UC*B{$QiJ`d)Q5US4ioQmo3#S6Z~kDf!)8ba(p)&Z?ic_t6TioxA>#@~{Plo|H*3MS zFmpO{FdU|qWp&Mddxw1?F3opO^omPzl~@J7Q6a22*Cgx8QxZK29TP#{?T2O=c9~4m zXHVbk2lu@5DymdxPhZQWx^IDPo}b*082>COO+%?taU6N5t_Ht8O71Jmzr8| zbZ17)ZmLSfZ`qux5JhU!*^@6CnL)pOYJ= zUp3QLmn=DO2USbm53y@jiw3DG>E?zE@k<&76oD_wca4nE;Wh32KAq2tOmBMGHlZf_ z2*EBmD$yBDW?2x#WX)D)Ji-G{S0fD!`@|6rG{oagtsuI11yVLACF?mKcWpX#8|SZ% z!zEsUFONdWwJhS1Ph<-i2#mK&j0Er2BvzAa19yiVJH&Lzi!n*JfmPz;XU8)3c0=&P zacwlah|~F<>`NMY-vxzt6WScGS4#=I?BRT~3$Ww9gI|8xejCGi5J4L#U-8o1_no15 zj&m92R-lSYD35ecZ&|iGz9Td0XW6p+M3aqR0+S8m6B?A5p0~`0VEK27O5Y*vs1hw$ z;(Nm)+Cd9tUG0-BlA7H6+LK6Olg+u4s>%q2T{O?I)oNSq@Asi%%Pu&wZuIfdfITH8 z4aIz@mS5>}X1q!StvR z5t=tB=uAH~=_03)5GqoG%DF{?e0xsCN7kgkb8nbQibE|!23fdy8QSu}uy&}ee(kw! zYBdFx?q_sXW>WBv(X{o~N_6j-!QAz6yL#nxZfbKy3cMU+W{9*of(20;$tBbK+En{8 zY+vf{fM|R;4TK^FzS{uM-f&hQo>!O9;MOa`J`%HonakH&RkkFQ5TxVP6=3y)wULoO za+kCd0(n^6=}jjam{B$IRTa)0G$UFq%1=ftVmPr+jCco|t=zg`(cH*Mx}){7^7AO? zK?Aiup?D8lcC!H&Qy)*=2}6IzDdc~qMx0X3qLfagC!L(%){4etRuk?uuOc>;!{#~X4IP~%mHLabY0)~Mm!rYCcm{$YW2kA^u@DDZlF);PIsE0 zKlYP^cV`F=k~~Yq{8>vKg!`sAQ{!_^^<`x4mwo1Mcp4jO#lxeIwH&f^Aa<>pe0oh% zX;B4p)xv|s2l1A*czr#gXTo{tq^j|@B*`bRsn@Q!NGuOPSge;I-cREs2NSrVfrFPF zKzH?YOeU5%TtUF4ZtM?5Hnn~V6?Az zvlVI3p=kwK#%N_gMdgLWtF(VH$hIt)sVWC4ygD6`w@>IMYz03bR<$$D5voZc!2Q@X zTA_{*8I5L@9O0lID&ZxJO$kiq%nbG|NK$!)eu~ybV2#3RsgpppAQzAT$MBmLj7=M9 zj|OL(vqJU2VzAUd`GV*xs8<@9V@93MxpI5Yp6U%h~Q5{kW-y~@qVxN?q~)3m-y3b)Xe!s779RSuz&oZ>GY_MR$g z=udcUB|{^)j|(c=U&FPFu!>SC$OmtifunSFYn+dn?-Ak-x&vr)KO#wAW7d6@Vpzh!yu!$P227ilN~4p!r*&M%7}25>fDUT{BH* ziK!c0vM?oNNSGv0vaB{FaVNrg%9bBdCwuU|Ld6!oB~m+HK`+Xa$B4;kU+ocjLT~>E z6h1>*s%DopscG%j^s@;kor*zQrg$JF193dimd>c!_bSt(UD|rf2=ts-;VAezP;!aiD5D#JO zIScR2B`Wsr7*DlKwMoRUx>43+Hrr3*VnP{L)ZNEDEK)Zey!_!`|HcC&P-h>f@%y-< z5l=HAHLGF;)p6+NFNrT~a&o9}w8S}byFfkc_4+=ny4i{cD`;1E=7>?y;nPU5`9J~$ z+(1Mt^-+4OM+k}zCC`Iv`ngm3=0^YIJ$VTG`znB~ed?*!Z z=#MH>oUP3*W=8)Rs4r=%WfbJ)n%8g}PB))}b1hZ62I9*P+tmS$X^nP|MDzOk*{=fT zf4Ob`v1r~0qe|UGc>aq%>HabTUyinwA42>Oj~9uh`_>r((?p&b{!bpJ4d4RUP=2L@ z7l8ksHrAFB*cWkb@atJf8WD*$4H&G`{sRN)e9y`lX4b`7!|Ly+P5Y`5Ur$uwZFW>B z5BvN}cgSp7l3fjTgtBZmPWkfl$3eSbR{hbJlF@1>2C;K`=zHzoMLR)Nh|E1KJ*v~y znY(xBeBRMF3lPNIcd`vy`e1er%!@r+WwOFIe*L=6At(Fi9Y@fyR?FO}Hj;0NvMj8D zFUIuu$gNYMkz;feeNR5)GvFFNT(TPu9~F-a)8fs@!|&G-b}X7)0zpWjTBuX?`n`uz z;i#p0rs0y|@Nwu6Z3>n;F)0R`4;M$|!Jt15K;WZRNA3K?PxSGy6@XEf8*>Sbz350lLY0d!7& z2cz~g&wS2@f?(}$AK5$){ajDRV!T1;OlJa>V&AXgzDKvgOtCm$G?1~i=-chuxbLvo zgqK;J0hf?c1lh5#|Ey2|KS&H!-P|92kvCqbS`H#`jVe%Sdudgxf@+w^n5*@DoJVz# z6u|1lUWa|pzXhI>a_v)p38gUiLyYdUZ#VX>nTg^&*FSw7SAf;A4lk@PXD(|ws*Vy@ zA|R%T630s5qKolbtx=Nq6}nic#CuiJLLv342hUF}?p0cvmWyt+t=SS-duEdcF&Nk| z@BXEtH&hP?IB}KwhOnK68xB9Aj)UK!DwJZ47s&{ILe{qZlG;>HAQ@-JWLCqTNoukx3ztJx zcP9k!ec9CnVZD*zb`gBg>Xq)b^&k~t1+Z3l=bG@FN!YBtOM{a+Z`C0^e58V>1&h!5yBNf1dIl}?*t0nuM(#v+sxrFOD>+~!t$D7~biIe>%fUE=q5ks^Zu6W=|Q+JL+e?NV(N+n0l{976axPFui zBgQnx#(I=Vn+0>!f5g8W*=Ib5)hg}~mA>y`2`vc}6S`<>+glbjKD%lsqF$ZfNaU&Bn*hvYJn2`4k{R}K=^|ypwJxU zT{Y)FqsB=g4CsM~F~MebQN`O?IkBuMk-Gw92Q+HPm-=T!GGDDqVNB)2Ph(k= ziD1MO?LHob4LnX4o7T`O%e@?AHkM?u$RD#P{>m`>Q6e$6Pb+^?2;afSd}P^JnY-1RQ!DowQlECQiY7rC>(8Pd zjKpLCg_qqS(>>PAW9;GE-`gLoQ~a8cuE7Vqnxo1`I>|V+rS*x^WbQKk_rtp`if*{_ zB^Zf!$9aN=In$_`L)G!(G(**xd3|1282#DCy9c4Wk9N8<*`T4?#QPxjHSS2Lbkk+( zSBF`hWr}+hos<}jLR+%{;%^(J^w3eE(RX)k29LVr4rk=AbEvRz2x%DrCXuCv2P7E8 zj7b~t9waTgUe*(}slt4CP*XMqXyD{p-srCSWoTb{LL(#1 zRFQqqlbO#{v^}Bdtro0Px#e)8U%aTzZcN8ko4h+*Mm<#}67YoVthw)VwP)9Z3x!ri zLzuriT?N|BnUsr$F<{_BN>^2p`LDMJXmKtwLREB+B;G0+kzSLH};N)#i^nq3fttK3^u(Vnd|B52ens5 z86-jgUo}43pHmO92gtKoLxad$V+&9UPx$rNm{`>;cm6DH=Rg+;@>wMVCq!BDPL6fY zB^5jx9AI#6*%j1>5a=mpiG&eQ-zLW;EqA~w0*-QkHN zv_<6=eY$55QSHak0Q-HlYte?gf9VogopUS?l0!SDl2hl6e$tcKLIgJ?%NfPKr!UVd zPPC;H=yX_%d#_#)A`UyrYb%tj_n*KLpI2QR)#Ji_SK%G6%Ff75#8t=&JVy&-o^41r z>%^g(Vpmn&HqB8ZsaKveI~T@e3E8nVn|P6*fv)vA)R4n{ldEp93OhB%N#MXPAec6W zfsnSb_t>wNfJ?q-I~ZCKCCc}ctYtcbvF14mje%?0 zbJoS#?uWWm$)<67!))oEEW%0M{VS&?(K`!`k;OPSy+7apA{7BHv#nn`s z0DV6tFQg(Q{nV%@LI&QKwM?vaw=jc8Ny5`)y3jxhMJLm)a5to-u0J({Ha4I3*TUFR zg4A@;_;HZQV+}aMYZBdi9p;G3Wh5j^d><&|V(!iHp*9^t~^n5bfhVW0Jw5;CnKq3?UJK5p}p!jE6uc8blI6-qLO-Itdh1~_8ERPpsYVAsudX!3~q zQAFggY4pqTWeuN5td5%1UaC4q-37pnYmsXvKh4oD`#r{6@ToE|nu`%MlE zE=OYp(&^J{{q91?V8u*lQ{8bCy=-W`c&7eJoz{MU{LzovB4SF~Cne4->v;L@pd#TB z@`ZF?gDvq(BXBjUenmFZRzu{d`Q;mWyEU=o!|$9dS8%ShI*V4iU^7ErWhOzVW(R}? za)d+Hnlq*TNPHJq$LI0X6SaINvei2+J$p`7dLCPcVt%tegC^?Rm)DqbKzc}Bm&5g9 zS6oN?IgY2p?Zo4>7J0P+o|RtwmidIA-H3Q7kD^t0Oq8<_fS>3QkB@ldFoOWCHYW|o zXxPb%fJEIh?2j|L6dDT&0j;iE}a zu@z4`8&$hHQMm|4o@$a#99N&?;!E~(KvtYGAXH>2_eYm6Q&MR7%xX%BQ?Ds7Lt$rI zA4pV7g3kmSv_l$BHg)z~AA`mWjJ`qZW96Q6)Gr8i(as`BtYx3zjdo^~>wdy{B%mu9 zQi5^5CiW!6(@=l2a4c(yZ{Ypcd8IPHMG!_vR@it;aiXtHANBH@NqTfg{ z<^UJ%6E)gVCT6Kb^NF>Z2J~q0#BKSqm~xaZhUaesm=Q_~qP6CsvkT8wj$GcJRD-q) z3KGqj?;ynPFIKcrC&?mI7UX$-aJ|3RDjwiQeGS*Ja~pv#O2(G36l}uYe2PZE!{5D7 z#vP&tmKlo+82p#G!K~tukyy(!LngXD+OGuxjLS!frAvOmqiM}}|#{~`t2Z{bJxxSs|mnAMYDbx2Y zWJ@wh#K=vQJXls=G-n@s13S3r%pxM4*L3XZMYV9vZHLSZ-G2B>-Iiy&GSx6jQ0Um` zdB)s)9pMTjGRI^}qyj=-a;R4ygI@?Xp;ezRD!{EFAUUEV=9nK7vpuGKSH6<|ZSBW% z_5vd`^CHiTz>oKCl1eM~aV*?LjLc=+FPicX6;rG}*Bfx9n2^g=TtDV*oQov!7aoVM zt1b*>isqF`cnrofBWL|Aq)$UcUw+wlZDe9FUg{o`Hjg8jXg_{vInSyqm#I2Sx`J|v zs&G>JnC%ps%d$Es6|fi6y%H}_#5jDPeXUzfYMEW!rXQ9Brs_g;YRF@AcXm29 zR2wKxAcp_ri7_?+?e*;!S16*;>rUQ^eh992fqHbo5L9}?>!PjR=ZX*-X1r7-vEbj8 z61GqdkMNvoL2TpZC)v2Sw)Bynq_?qX`Bu67{P|}sJ)yE%o9XcG?=s*nBmUAAg(A|q z>wYXvU#lRDwg1He3cN@{W-eYjet}gP(bcO)D5l}6T{ZDi-VAre@C8^<@lsrk6*;Bi z7gZOtMKn;Q$hD&^i`@j`=TX~8$e8Jn|GPuZ2No?i#ubP-&KS>|V_O#%mN_bpb<{-J|cQ> zi8G&+%y}8%gX@-wXx(N+>d~W*)uJ*2_u2;WPGW6n@|myAj~^}~$Pm@^AZ6cw{<=D- zBcD6^scrxhqzdyd*-Zxxkfp^5H1YDH04d9A&v6~l5z`SEE7$Z5eJQL^*6fM`Sn0ei z6mX@xIA;nWK_0SjTK7Ix2{1~JYq+|>>KXT(l5Nxt{M@(5mq@WxnEc{1448ZEqsCSw zLnKD}4@VY{4}l#PTr9lEmU3ihPx@S+!QT%^^DzSf=ZKBR1x`fY%)&#}dG3;>E?m&Q1dee3Gkj7)Vg{ZR&>RsQ9B1Ya;-3k^VZ!@k9u|=Ru9O ztWn^d5(!C!@^|Z0F1w0NQ(QvLbF!1k!Kf{)hy5)t%mdr28iy!a@Wz<720K>zo8`bY zjGK)2kJ}?+E<;vZm!t<8ucK^{gK{hXhNX7!jtf$vOMnf&^M^~smxvhFEx+l0pwL>l zOzzUiB!Qk(soV_R(~0_B`)d@QSAH3Zd0z2MeThhTa#5K&AUa#YlMf(hXt-RteBqqdJUc zD3cXI#tfssgm$%*_leOqsNv`9F%irAH&<%*N5TfyG)kB4(PfUW=qfZpQS5; zeo6QXrE$=8dBj7A3An14?9*_SUF1m{hkzVRAUPbkW~;ZjYZVsQ`!D<67zl?Q{vMh8 zm*D>HDUY>jAg*GB9e(=tQ(AEiAWStf1p1)(!>8!(r;1gb!6ss{@?2+;G(6S zFLNL3Z>}{k0+1^By{)~0o9f>K58xj2%~o@@*1!2$#DV$9*L$_!B*WQ1l}rS<0bfio z^!;DyiHg4v*+?)A&^?u*b552z1$giJ;cV99U+(iEBakV0h-dn*EJ6=dUf~LK5KduI z_^$wi6CltXnbSq`-&FQ&SG4-VybJ^K|6WtWI|2LivVZl9{NH##p4OM_Y2Uz|`S%0r zrwzHs~QRZcplXlyr z+fiFt+2Xy|r4v=N)5L`UUxioW>TtDp8H4oCd#4t4(fR7dsW0FbAZvntGz4G=Bh(aW z?*!F^Y;~y4XRFebK?}RHHEuAKH5$ zuWK?YZ%EXgA|TK2YT)?hfVAmxbNMH^W;Pr7yQNFN58rhU&QE_2j;B%?dUsc%z%(8o zgz8eKt5XKjpbAf%>8PprSpc!)Y|=aHE#c)!T7lEuTK@=6^x<_I22tfZiGJhro+&DY zA(h9|p0d}%0mcv2yY?KMmm?NX3r`+NfK^C;mNPJ+C7w}mHSQ)`FWpq_d9}^^opIVX zwjAvMA~9$U9Jdc8^g=`g)R%SL-=yrpv{);Bgn^v4dqFiz?t!L!wyPLW*uJ-Py`DQD zxfMX=x7pw+I=kFppBv+zo_u&WyqGmR;P2Prymh;`o91r+(d5Ub2+GoSNH*jjb+!_6_Qgn1ZT|u15cizTk{>if+ z`X_c#EbDqTDM+mSGIDNXF-OyWcNRJY>|Ni40_cNy zX9{t5t6&rT`|*lD9n)@tqO^>bM)&Q+Q4u?c0*BYv z4Ke3GV|>6^Cvk1LXXUQ<&|8vsBTv9)5}2jrnv4Gk4KYph{qD5Eva{=Fw<&4K#Y>lm zLIJAgy(XE(E(B4r%Nl{{@`*R<9)Jl*g%wu-4r1pn63EPv&*z*jQiN$wRapSp9p_;LB7Lu1a&->7o zm2vgxEAa45MFskHBHqc+K(lzVGZnh^d{@j~HI(gRY>qp2E zplmi5APk1E`^INKhws;Zn(davz$+l~cjQa=uUIx=oN zOPwDfoo~`TjP%yY^w?R9O7Vrs9}4X>UH8q2wP@RW8;?E8aK;L{OWEQLaqhg_jbeJ( zKFADO!D&$vdu2-Xa;c%@B{)58+}qIR=c13Zg0ra zzi{1?j{h8Cp3~X6zya2Dl0m%iZu|CDnANL4(L=v4#kw`ngBO~uG;g+U>KNKnAzh0K($>lWmhFb@a&o2KiYIKvMr9lPC=QJt0bbHcgD zU-#rcwV=_trOhhz_;N%lJIj3wc8Q%iSK~QkhwbrK4~u^Aej7Jol(Q@QT|sBRwQ&UH zPe-H0RN?0%+(WmL`)Gy$A6lS>vuNy%$-H#-`<48Wk@ia*d+m-7GcT^A`^ZmPLLR3Tq;08!Q0%GO=H^WduU5+Wp_L+w6I#Ki))HzlEJmcCftL zaGR{&>*p|>+bVZKQ{LjQD$5dc*<+pgX|H@aSr=nH(3%1mdhhExk0ZQoG3Ft-#YQXd znai5@@!m9^GF+?QiR?U^ITTD<_BI?x>R2C_OHW2B$egF#LxRk)F)3_)4r?ThmXW3* zpqC1O)~u5p2(@MjSgT=b5s(t|+LXTZu$|#;9VwnLL=xbC>&*E_h&zm*-5q9|WAjBg zD*uEqhWzw*$U4y>#Vr*^)B;=ktu}=U^N)`aF#32uM00ONiWr7&Z~SfQ0FAPrE=N+@ zVkav&ORi$bc~LmeD)xGbcdj1}kA9;O8}U5fR4{REw}pq7pL#r8$y%^Z=$KtUa(n+L z;ih?_rLU*5ta+cE!qMacd6Cnux@V)c#P-wPFAX%HbY_DFpduxK63&$+9+jJ_hW%AHAwu5#GvBch_0id%yT$Zkw|;_wHy>#iLSK$Z2SE`D?S& ze5S?i^uY)B!~U0b>4y5-u-$~5#^Xc3iwW`p=+`SxlncI49q8~JjPm_fRRYo3t0uS4 zt~%pPyPeK|a@iUy=G+|S4W<-QUcNVh3RjcA1u4ho#B0yP1n&@+RnEJ;I0xxf^*#9wp_e zRmwB|BU@kFi_DfFv9GlwD6aibXU8lY7gu{2*d~0)y_*x=YQ{1FN-qYzfr|^O4{?ETuOQUv ztz0+bTRQDG6Xaqqn8)af`iczSKSX3K&1G80q`^FA7g|Ds@WGClLQPu>?o5k+&V4T; zD>L%9n%C4KmSw2q{fz3jlQC1KiyWdd+&4; z=*D=0@+lsjubXA}TJ>$}-Ul#~^oGUIh#^Z{v?u3?P=x$V=AYx{5a0&FXW|&eBvD{+ z#E5sL%RMhs_}y;za*U9*RL&>%Gc{4yvpW?PqpzNmeidZ-%TjUdL7PtUX~w5mC0G4` zWI=`Yjc*ywIkEMwc4n_#Z41!JA2$D2G5$pl)Mtet1HH)o(~-SsJ%GjRDyBIut;Dkb zGT&!G@k7wvOOt0jZ>3b4u+p-JK4$)2N6uLP>gGFIOjA*y(~&C*Rk_c7?zibL4qZS= zBmj?4;~(?D?-r-Xq(J{c*#BScdbTTSb>cofpviu^n3Vxu)RQ9>1f0J>e?$e4lnnT+ zKsCCXeO_##LgZ8Z!c(Kp1Uh7*N&fGz5x~E0as|o*y8l4$-P3p@F4k55ya=H%K>4@| z)+YYIH+6i%>G2$Zx&6h1?|||T#6Jf>^5$A`%`kmDfVg9T30?w{`i?(slj;BR0-}Lb zu&3(x|CbW}cWLm`$^Wa|_*ZWY@c?Y%o0<33eE&RxREE*9x#BzuhCyIePcF$dP^+Id zk~h-fozq&{R zrkfHJhSPBNZj^-ge#oLiffXD86L?0zbI6HxakRU4Z>#k|_Q*K5(wjyM`nTXt-cjvfAV{b1wWlf7*&ysYN;gPsgK6z)9~IGHc`^ z?l5LuAJ9?kHGgea<3Cd<^OAEs!sIZDc-p}XD{MiYYKZ*takXi2E-r7IQ6XQeKF>=)w4}^<4*2RrzTNBadjdc3m~A9_f_CyYgE$?Fh~^HFu5ZDcWyq zKML&`Ws?=}C4LY&N>o*~GcV}#trns@Z-Z+$@Zhp#tKR=AwLh4SY~ek7y#)9F(e>6* zQMO(C@GYVOf=Yw5bc50@-7s_`-5@Q}(%s$N4MT%~v~+`%(w#%YcMaqH{J!U1@4MFg zGwX^ot~2&=>|^iqgHl_RfX_Mhw=0{OA|Jest_NDb@MQ;$!paE-?aw8qkffPFZJZ_C zDIYsC!vvOCo{bN+?~$MM&~!=_V#w}0V*H^bb)YE9C}4cUU9_b>RhYgG5OA@`!>;8+ZN-e(nal~RptGV4yi5>+q-2l}@v zaMWzynb&9j&elwGRJ!5228I*UT(5G!^UEq-Qe9&GeUR(WX)+@7%YWqg_EpGgHuUbq zW^fu`y4yxg%|z-hbVQMX8HYy$vbkk<>d^BX{Q~a|yFQh2T3kg8>3gbvmJD~x8zpdS zv4`gaO9H}l1)z$#rZ{7m@cI-Nfp-|Zls!Y+Of#Qa`xWRR^5}&*?o6yLX2mvX5Cc&s zY{K?(yt+coi)*=Gr*^T=jO8Zkr4VK3_HS_b%bgwQox;lNc4zIf+P;2ZwPYW3M&M3} zN2%xC8Md%64;4vYQGp*%tKjuWY(bO^-{Qr>c?YpA!Q47Tl9(viOK__)t-IY5|E}@{ zShFYb{v;~4igO||d_T#@x00A8t(xt$-(7MSi{oliJxmGG#se!V4_Sm5)lVtIV}XRw zxuzYpQ36x!wW&ogg+Fy-;lv8yOMb>&6sMPUZiO1&Nyy=?bPV> zcJc-yHr)1^_x%0i^K%w(@6C-aXmM#`>25k!8SxtmNWB@Lw2S_Cx;A@+@5CXCA`6Wb zvPDg48e&G)?!>ht0cjxCRXEPvc}_=XPwIINbi{f&Oq8t*X%SzcTfxFzS08QhEgILn zgCz+kH`g~HXTzoYX|!t!)bldIvxPKuPIW=QfVPHAf!=Nv>^M#9YXc+KrP}v-cy#Ll zZA6(rT`4?np1-=OWPE9JWtaERL?WG=9LZAtrg((nrV(}0k>I|3rW}u=dz%$ zB3=HhDU+ABU2N8Y?ipRlC}L^$l~D>>C3Q?-EtI~XRu*P-Js(MDa|ogQ-ShK=$Tz&( zf~MN4w35N+deqrr?cqglGfFUPug7v!j5K}m zMZv>AUm`j{?N;ngqp=`FQ;VlqqG*(&a?+yiriBCGuv99SYopnunNZyJ?Yo(G_GQB9 zE+|e4-G6SIHg$1C84O;cyvga6m`NiV@3?mlpfu}T!7YfG=`D@rYBcsd(af98lV;y$u}`Hgs&s?$5EaXNpZy-M24Y}-Qa{S%=5 zD2#_k>E2Zytc#@h4~5SkBaP&u596y|T;o+ym|6bO21o4`H(}5Y6wbR|M%t;D>mLQ# z;?ENx_rIo_pGBH?j_5Wokml^L;Fn5n$dzZ`w|U*4;fmOASWA+45+XHOA9FeXEN!B1 z;V`5CRXd8-71=~pI+k6zx`Q%pj(>G!AR%b>V^jxHJ$iaBN=R`!JJ~2MU{$1jj54YX z5>Plrm>^1(o-RM>jK)Q*StkB6hU{`Wmb5uI=%tXZ19E*4(U{qepXy>d7mRTz7|qG+ z6eAbFhs%}Xl>E3n59*PX4s<3N1I7K(1-y3=89+`JK0{gOq~fSR758~l zsj~I5_$=Z2$~sPxojb%;%chiuu55;KD|>41ke!AQp$|V+mg=@B0~o)q#H*A}eHP{9 z$A60o&ox58+2bB4tu;fYKKHC!2f69>8jWQRe2G@(Pz27Q+Ou6{i)^S zE>?`efwo{0SL4g|kIZ9cO9RDr!D6~+HvzpUHM(hAeEx6iSkjEOC8Eo&rvB7hTurhS zN@2(3%HfCFVDisp=KJYL(p5NOtQ@fIhF%}%+7{?KXvCdr{Gg(aBk}ns!zHX`!^}f4 zL_Gn`b?gs^$2T4g47_dtUcQBHEvo|xif>GflE&)Fn^lYM^$e6KRIGw1n4&YuH6-;$ zL{vjLwVj4_<~bLwPJ%rl|J>d41i9n)MBeM>`0fTXYtqE;F;=*jMvyI%(V=>RMSX_-ZqV+|7ol z6U;2sRJ@ETwJ@{H!b7Y`+Fk_u?uN>uc|;1R0u$1SRWF`MjClRM!K5qBbGe3Xl?9sl zqlp`xukHfM-?|F3erG*7%`ckq{4Gvxjr}RyiQ@RjIBhbSYfL>|L;l0kQ<~$HXu);v zcO+b>_G(J$-_24;XdjyKOokM9V-S?L3ZvY#Kf~=W%I7WnbCgRq8L(4K7Kz{N>oins zHK*as#D3q@V@EYZYjU7zI?rW|khmG!U`5YN_za2cj-?7|!uj=q-)$SxtK!zM*C_IW z;-@|T4oyni@Oz(D5(1EZo*~O(P?r&vuff#FoO)nEA+ zs|@sH0pMWqu&g(|#W5ar(-($Ql1siw7z3l`-{d>KoDo&o2OVSR&Mgl!fZv2GS$*kB2e62t zkLv)r3eM*PtD!jkD1aM0GPGNvIX-#5qpCH@CFXUR)kgFFkS#WBT6s?LDj#3Ri`=$K%OaL0aky# zF-~wg6JwT}LlCHc>HkXG)~bSc^O!X33do|CeCYXPj~|9R#h}KsV1$bVtS*rPQ0J8K za$=P0o3ZAI96%@GwNLm@Lu{fu3AY~uc9YvLkn5e~JDeslVX9De#|sb!l*- z9rLmN^*-AEK)zsWMNXIu{SbWzA-Nx~WJoX*n2$8&vW6a7=n5+wUxs%-mLda%j&ysX zZ;tC$9e2boRnG`ZnGSF8OQc&JJT3?zVfBKqPWcCR4>P8TvlRCv7vrv}y%g~qmgBTS zA>YKLM`|JSDLfOR0ZotZFYou&To&M6Q?V6Rwr7&Tsp|Kh|LOvexD?<{|BkrSfAaOE z`v@2*xuuRu!+$r+c`pYj`}zLL;J)1)1V3o52Ruxgbj1N7g}m@b>_P3)x9$|T%|^tC zYgA99yAvas={HSp6xkPQxaQHAULv8LS-by%jCk73)I0HB^;Fe48oQfwU11LrI)8X_ zEAyKX-818owtLx}z21K+Mqm^5yKksj7| zuRWNM7b6gWxE2+zUtiSKpau-|JHGXHqo#^*VA1uDz57cA5d$Oixn2zo zZ0#9A?ZYBC$5(R-gwaBb!0b5HPn?s0EiDWHLB9X4QeB5G1-3AbazZV%F6MSg+`7@^ zlaww>PipXt5FroGIy+H#@FVd8Ok!YCO}hHH4hATC7^GdT)T3WW>uV-(fd>5erL;N| zmbTcnp3U&zj@cOeZrA2(;%T_wwqovRQ4U7dAP4Nxg+o^t8R=?Y?=iFK+nwVDBF!px zE~fQG|BR)JOQAvY?1{-1h?-kwn(+98L)!k#Oe-y6uuXAzP?Pwdm^j?HNcKkPI3!IG(`r5G!!pnS%Te9Mw>8OCvN4Vr&(|HLBv;4H>Y+g^AM-*ub zV6v1d{^?0AnuLN4)#mAj{o%w^$)Nq0pjb&~`frp=obk-13z&Gl%Jg4W;vIg;6m(Dh z@JfX`REkz57iU2)J=Labzz5x@7sQJ;Bf6*S1$bG0B#6R^3;T`r74h#3;;2&1wOsDg zd*y5e+e*(ZHzy!v^kH0wBhO{%0z}IjFT@r$-WkZuVcH;rB(c0beTvx$n=ZrvIz`I3 zw#}jR<(eP-JNWC1?wR^ND|20O;VARl(l3ood*AK@shd}B5idVCqFAsM9it0+@7`Zu zcYIDp)J;|a+x7!~s-mu?Fe$?JJ5{{l7EzjHUfCkUw=Nb_pZpwG5_D9J?%2u#`&?Rn z&y(1`Cn}Fh$A`8nt3z^5DRA!lD$|>rCNOvxc+>*Z^mk@l|dfW?RRbL9Ra%HDJ^lH6iTug!O;h?p zUq9uzc>FYHCt6>~D)Q^T$H|T|+>6(PSb|E2Y`2j8CXdl#iyx)WYvE>#(Xj#B^E2b)V~5fIk(}41Kkz7JA7?@l% zOQ`gToHGfHhn~aPMmO5)rYVSB^bq!>eV%x#S2n&6kaW+MQ%B`K)~kHl)h2_elveCe zU5KdI3SI2#q(3+I#BZ>(6) zgbS-IjeIT+V*38Q&dZV7@ULOIPG@4F!;VB*^kZUnhJR}EsUh1KWD^Hc*ynpisn0ZV z+-5}`gH%d+i|tq5S%7OsR8LY1%O-*<3KqZBj?<_$g(Gqsv?zod6&Wb+?lv)KzsAj^ zE*1)NXp|C=+9($p<|J_D-*M{MF(p%(*4_{6=|=i(UXiI&JHq!4uV$i1)poyB?NYn? zrCrLU*T_n-E8(chHlFM2Zi$U#l;&8Z`VRwa-RAavk#!~BQW4mARze1&s`|xqAqXz|KVojo2zcBBz{KtaAmyKBad7=AT(~hSG)4tJ*9?OF^ z`k2mIQ+u{la{Jm3+gY|<&%3rl$v(d%gjY*xnQ=4fc*^{|ghc`(Ipv?hV4p6q*evG? zDZkuapt`s<~k`VBe(A=6EDv$`5s7RQk>tas%x@;WOy{V@I z@&eiJx$@237&xEf>zIT`V7-i^^#0Sh<`LM6?t(R~bn{WNDnFQEpSJ;9fyF9uzP8)l zUxiJ0-6fi)^s}Yb@9B1&_R?ejSJUZJmwJbDS!MFntI1MUH_EZf8LHJ*>Xvoc8-}uA zrS(LGZjp&9(&oK7N7F2>v(;W#k`gFr9ty;_c#E6^nGb=qA@@hHDUce4ECnQEAm%Z? z0E}?^&!gj(CxtP+CD+ORWJMRhnsci*ao10*+mA(fl?QcP49P7aL4I$!Omd$t_If!6 zK@fH5n;06qn`lSwP5D}C{k-;scbrKDJd8hbtmj6kh26<<*!Lu2L^z7_9)AlppS6rq z>lMcgbI<_Uj+HUT=Mm`bI-9;wqUI#A>?Ld1IhBEM6UlP#elsh`Xgr({x*NRK)5K26 z|5Gg38zRVgzQb&NhFgde_Ih!C87DH3;jeHDt?q7NRrOiF0TZMqH)x#tye@}(aM1Wx zdhuiqt?tbE&6jWIdKj1y?2b*m|xR`5C!?|s9&ZgwB} z;)7em#eGs@8-yL+Sw1n>`8>eeKz&|?KY%%w{CR@|v!-^TO%iQAcz(qJjqL0AbC7;$ zu^#qN<;ZUpEtZ@IsGBG4{hw^xW}OA+>2ElLc8i1cU4r`&;e}LH^+r0fB3XTj6P*ZI zgA%|to{A5~2#Y6Iq)KwK6*Y8dvl?8AbtddT&5^UQw@P?tlgf+a80taBQp9UslEd1q z&JtdJB4v|$g}2Ls>9X2Y%s5!JG^#^w?j2Izrz~K$Y_~o;S}y<9K22cAV$gYx5wqI$ zo8wH%WC5N~w&TVX`nA>9hdSYcFt(-{$Am3(fpYqhX(GD05Wl(VRiAxxMV$-1n-AA+ z6{+`_>b&-yOs%ze{cRhn5zB3c*lVZhnibkd0&&rze4DjIqBI(pF(^Lki>Qb)YvP<| z>qvlISRSf$Gf&;*S2k23(#lVwHEA=lT&JV+CqQKJvszPnEM%*oX;vI$+Jn4j97c2* zff?}2#x5{dd@bg*i$P}UuvfMCmq*Jc3nyBrmPC_3P7^*!Cbnaa4iCnu{J=_aNY7Mj z8%M|BR+jQ`8^vCW(r!}_sMN)vi)6+XkhhO#;Vp{}6!%@}^kq@yVF{KV>w8XeIw_sb z8$>X2G3hNmt@lM6jLLhq%%c}}M^}`SxvHkk#mEUY_5M7al{^hly;KHRs3jb>sutVL zo@iWs;il!J(E*nX74xuQLcn0nUPm{!<~rmI9>8zwP&ndGFGwYA>nS!uoX3}yl9NRZ z#QZ=HGEbGNjpaH`rr{h|C~6J@yo&XvikEp_uim@dQk-Q!rxf=L{3NCVSa)ZX*6L-S z!wG`AL&Ih@v3y^>&Iw-7bMMp(bDlSfbhDhZ#yC}ih{dGwk7J%hOF{P_77gl!rW%Su zn&9WCC8dLG{)Af?GE+CPwuBcCLFDUAdy-u}*Un_5l}rEOUwnTYU|M{G=N02c#3?9nA3)E*>;puk1}|DG zoqUCNF|ewQ^=Fk>E2iIVlIOT1^iKo^sR8}nbCGZYa<4$FrGn*;L{Z9lhH|Q{_vo(2 zD$)vOBkmCoN<&^w^TT|8WF`)JTp=Y${9j_Yza@LU@DcFhLPA*j+|K(jDr+)?KCa(9 z3d-qQ&7p=^7b*x5rYcvTZY!?_NaGuQ;~;ll{XsmP@2H*oy4isy`A)-S%d>R)hP0Wt z{MpiHz_N3!>eAr94hX6@Af?_Ol!RlQ#ofnt(aPPZ>(<}w4l1<10d}3XpfCl_fs(`Z zcgESK(e?r}Dy2u5JsD)d4{?qLjvef2-O8rL^se9-9E`$d5TYTl0= z@56f{5+LXr>Ey7d9NKQ$VJ|4#?BKn--yHe9^2|TMP}``H7OlOcqg<)_5}9*`J0H~1 za?A&0g9RPN7`%oN4&nmTJ5&!yFtS8E^9~p^`z8r8oO4((NOl0EtJxq|Idkav$<3_v;f0tils?DCP@0pPtAWuzFF#>VcP6W`B|aEsCaVw5bhCVZ+Q2S*LX zj2`*DiLq2T5^!_kz@<438cTG<1_bDZ#t|je-feR4U&PODnIz_8PF(f+yQekFFiU?)se?bN4{o0= zwIak51q6^@h!cCbBmZ&%0ESMfUX%O{WYeC8OdOs*`__@TAw!3IHNWM0Ou$c(T2B^f z1%IR(+^&4vZLHZfONeGl^hCNZF@7O|ebC-TMeOBEH*YUoIU@9l3^}*8-mZ<*Wec>n z!(K`tfwlwbe}jIouQCAo(H=p+{ov2&ah{SK5x-~NnYai)l5^QEppDCmdeCqm7>STp zOH~XnJLmZK4Ga72DRh>YDUn=&oXZDz) zlx8I!mSr2rP0j>RINfBSMH~ik#%=EaR>n*JHW=xy7f6eGQRA0l-eXDiIpFQL2+p6-00D9-sU#i(**OSNr+(&mf zJO5WM9|>iX8+kn}0euOS-Mav&TPH@(>GXdq%LRy!({QI*c^i&62V_^$!V%`*892g&wMWPyCJB2vjmHM)4qbH?wA z8wYjWDSjU$7f()J9Ym_OJD-Y6B<|J!F4m0tH0Rl_5JM-z;kF(#L4?|>4G~9MzgKzd z=PQ--NK}dw?;@^whl5>^RruX(Ly?xQemLcU85_AMc#Nx@H)(Y}4c9}PwUYN0c6CR} z<%@rBxFoFP4AJYuD0y#7;JeH4yzgIQvYZ*N2p&d|au|+Ab>_8a|GBt@^Gh$_d`Dzw zgK|@s6W{r7T*4A`UG}Z=l?F1ZjJsY;E{3!_y8o1=ftXh4u-M&~V2sHM484PnQsM;! zpl;=A9E+`lv^NQ~n~g#Y(}UoB!lXDk^CSnlF;r5TO3t@jb!1XMPBGX_UG@qW-4u-t zflxePabfr70aBl5d@wf(%^z03H&>$wNO$jbv-GppaVWq#e89a~`!INz_)8Ko^eXMV?zp{3M)=GljT*q**01m#&2oY ziPt-&Rn*ULc3byLLxDX7{v_(3n^Zjbma?2?=RNu2vdz$9XB!n#vD`baV1#0|^3#ga zpJ5~>w10(WQC_`{4yR76PLPYvkgDHi`|hHw+~ATZAu)${23SDA0(9oz!Ot%U%Iy~J zITWLk`h%YhAJi`u;kphRwmBBkk0w3_cAO*t%j(&pF5_Hj{;>Gjx2)W!ZT9EY`QOaMl<)#>Hj6H*;}04xbQFUT2gL|MIvSJ(5a~wg*EV(nZ=M#RY3AS!)cd zqTM}^G{L`%uYyuyO9lJ`5Jw;9=$s_*baL5`Iflpi@`MpsOuw43%weN#;lt5Eqbs5Q znKN}}^2Y@VNW%uq*&ejj$Mp*802#CbuKxlup}>M!GF^dB*qp#`0dwB~Lc!tkFs}JI zVRb^-3daW&urXm;17t0M_I(<3eNCn^_-m^WV*(2f4Ob}4m-GKb`2QLsYj1(;C zhO(jsAAT?k$>Jz1Rg{XUkLUwYyig4y@|*9mAwk#^j1+p%&6+z~c`kKkkgI8PWsHwk zN)~^qz4Cj;kimB_)GY;^obc&!8^%Gm%fCr1x&~|pwOAW-^N#u~=_o^}ZXNgqA$|h9 z9-(HOwhrL|Usc2+rrBRn9R^hha`FjS@FB<*#4@ zi+4pR+0DntIr5({^=Rly%?7mi-wf(7FU|KGsNqOt0EvY8@iaZ4BgwI)zU^$UxGsGs z_2TPV(W;(_II#^dLTVhgX72U2bC?AiEbbWf1r=)D@4U^Gn{T_%S*gbjxpuyvU?<%F z-hVnaMS&bDtH11+DF%1?S`!34Uqo#2TDj^ehOWL=a&o=ukBw*++W12S$sYD}Ik(6B zfPoaFi_Vjv8HBB%y)hG#PoKY<+lzpI$IZQIw8XYR*qNIMkKUEq)ufg#dKwT>R1M0Z zY($&JS8$iKNGPDrLofK{^tI8vP(7)sywF%`L2%LeikqrOkQMa}y`|(7fjJc+>sPOm z9Elb)2o>nyV{7pKiUf8#^Y(0fWpsC_)VDTnPh`}$w#!d3kb+*^9; z`OCDdHhmD?cR3t;1s4%34uq@;Ky%#-#WF8Gh`6sdCDog;yMLOPXOGV(`NG9LX}b9j z_aCd7G-ip(Ve+nB)z-=~hb9Irv$pre4cB*h5nMFcHNCn{Q@=`FjiwOLvjzbZ5q_07+x0Q7($uQ zCwutLr(6tf-Fz!==GNJsnp|H}0u=E^QLugd{i1;T*if^+zF*rabRnTcSW5|~Ai_|4 zT7G3QZibn-SnNEY|LKG$3nx($JN(rma-xS_qk_x=*dL4OChUH|QL!_geB)sIY23Un zy_5^h@yNU*tK(DJ0$RGY9`TiU^R?O6AvE|0f%@y)RUbUQ>_nV=7Z*V!QB_=cbE2F)gGaBI@3^~x*;H3^wP!~5Pc zuF0{%%NVseujw8Tq|(4dGh>vmln~<+jGkg9V>rG+r0oe8=0vYGNHTlkGneos7`qGm z+*hl+c0e+4xO~)o(=B+1aamVOrFb7yB@8OZZ|V?>wGU}hu-ZqRmNICU*m9RI%Ffcu zaObm)Z_blbd?lqas#1iRieMD_+s{?_(yt?t|KEV=S0Uodt`y_+sQ$pLp3j^Aj zrEnQ4nuBXGKq(S$RpZ^M`B3nB60cs5+-YE3%=<`YJ$QhR!9at$ z6rXHy64{-^Yg?UXy9Pa{gke{;7!ChLNZCvg-}wvZ9{(QDhwbR|*-Dxs@#QRwWxor; zQqtbmUK$lf+|50S43zJro|^t=HoKoLx{NW1UXvLSORwQ5=qZizKIK?MMc;AixW^xj zIWb{JdC5JF9`)>5BtNuNMw6n>UYE)s97q6XCb+P^f(Zs$STqBOc6BSN0J7nWdf^ zWLK@><+Su%*zO(ms%h}O-}@{*&0;C38~+1zkL(@N9N9W&Pg32M^llsymmjrLwI*<{ z1fj}_YUlv~t2iAS98b{{?%Htl5LI3hOrU7s@ptLlyfzk_m~R(ufBGa?em_F>%2;OnjwV|KQ%D8GVmYI#%E#xoNP!NnOwngJDwNv^hJ?9Og79+gl@Q?i2qPE^Xwc%O`0$*EyJ;zos$3mE4o0i8mx~qwYX?XKeOX zb#||YcJ_bPF4uSun{}}mU)J7Fsj%15WJ?Csg(*ZToJP!*$M0)iz0WFhDt%3<2@yjC zbSb^?)pfg*V}_(L*Gg8^T22k6&HfpKTFvG8vcfD`>*fVE`&^~^N@j{%-LDkBsM%=@ zCee6g+^m8qSGNXb85tENZPd6v65P$!-M8KioI8Z^Me=+W_)@2?<1#j?R4|~qP-EFj z^6qS_-f}(PD7TMcT6ee;HA02 z-JQlQjrlm%&2QRfV>>P=CdP=dBTpC9jBl0t=|2HmKg5rokaA^jUYHPY*l|(l zmvKF-gMe&%3iZhc%c|!}*97d2b0<10Jdrlz$V^=dxOT&#Y-l=JaRA}6 z5cH$saBy4;K3(<57GJT+>UyuC2+MS_xE9Uc>zmMWUXiwX@J!;uyO++@EN{;hxU}0Q z$FV+sGb2A7SG*Sax?NPAm=c6%8IU~)d20~7n<)9rRcd&bi%RsO#P=OIZ{2*>OJbt9 zvSW`&^u)tTed}kjb-)q_z8Z58%Yk8hxRb5|q%W$FzgQ8ZI;+hFVzIgM;6!ol!c?w) za_jH5J+@Glh0WQxYdZD%!7YZp9V#}feiI?9L8={Rs%*+)rj^EC|(B^oXomaqX~qBy!=p@Ebv zR|874O(oCNhKGgmqQ+it23pPrMU8u;Smgd-yEb2Q7m9i+)2GdB`P*nF%&aE%T>+X^ zq+H$(*b0UB)yw0U{qGf89Jbdcv;%L^+7{V|2su+lGWN{Zf?L2FoFO}xTqkiL^L;!i zy>u{o_!3oJ`-C{ktV`<~%`pWEX&2W;wNeRQwbe+ZJDGPU6rJbS5=J*5gR7Xt_Y&=w z+q5~KnA)UTf*LD?5lk5#_2&Be}D0dbF9AabM zor?)SO~GQ=>OQP?X3xNQ!q zIpj6yh=)>y0O%tGOrC=1n{;EKFZ0-x$Vb&(Vmx}!#@9^X9@U87zkheiT}*CV zBN(aP%)N!y&XoHvV6Er1c(n$o^S<3h-nT|fvU^mY61O3({!3JM!86_IqxC3-B64;q zo0LLzfqLGa!XoWG@hjK#u18i|@{7k!*A!f6eI#&}G>B^qPox_YzcBy%kU?ksYH&+w zjzCaU3BDGep@6!O;vgisE5&Iq=dVumpZ|Jdu4MQRKvm;mtZE$eFwA__-(xc z=#hiWVJ;ZK(IQB!>M%*$GWQzxt^W7aAmx)iPB8X57wSwRq|AT!_%dQ|VPMDw6#@yD zA5*IUV}SuW7QzWMVSMu_)Vs6D|J?Ekj8J7m+mZ&#AI|NshVp9wc@_o?xMk7QJLsvR zfH?T*s}%t9BbaXfs`280=d~pgj9_BhFKGhc?ZO$C8c*23`QOQG%aX8tm|7J$sCCD* z_mcUqRMi7epl@7U)?7TMRRNAf1{$-|%4`$?tIK<6+c>97gJ6UK9-`qlpmON3>aY+{ zfFl9&yl_EW(4+v@7phDW2D3f+rS8@U2O|>7Ws*xXi(%X%ERGTZgqGitJ|LEC1 zb^`6YqwX2cyQ{?{ztm@SRfw=wX$uiAJ2;$#)zGpreziOvW?LzB@mM+wsgPUosBA*X zW1@bX16}|vV50jcn=CkIS;U^J zx4NG8jim49zRp{rge?yDs7ICI`b<_LEj(nA2;M$zI&Ch)=c(woeyxlFbK zMV$Fs&_MHLZtFq&nC!Z|>dUj(>fLqjkn=@nm10z(swIo%lSfsvi?Ek=7{!Vi0j7x3 zhhbaV?4|7%9OJEv_;#*dFbA!_uHA*UVgfH*4W^|E|1AOrtKA#w+=>I`Ukye&YyZw} zDL9>JP}N(p;U?zVp+=Xnv|-*t2v zH4spn#qUmtHYir(y#-BgV=n_Nzfr=*ym_4O?cZZ~+2ORyau)kf_qfy5@Bc{AIJKQP zmbppFbPJaI`o2}JF=&3v>EPQY^1EPI{q8KdhkkaP^0>5KHO&~*bh5ek6*8l=9=m0 zzk?3#BZemJ11@nk#9T5a3V(;3(hnoPGS2eW~*JIxTl6c6HQ~VbY5(rv7ne7>oUV5dK6! zi~!`IBfxLtr$CFP@AF}gjLbODAl)_SM-xPnNWG|7f9dFrgcy|k!hZ89iYzh=`dUoH zdsTYSW@vo-_0QYlLhmR#e(>w#fnn3Lk7S4+v3eI#&;0`m6~4fHOOZs-XSR{EQ^m92 zp!YG+j*tKe-31al05QT1FO#{fWVYxV*+aQ8$s{+;Gf9tnC-EbN6_INrcn3%%yM z`M-c2d1{ZpI`8X4{=Vy9ZT@?Ke_%TMMV4cea*c>xQz>G#)_SKA@22tJol%(Xytq|LFghJ^3FST+b(dYpejC4mP2$UtT^&jAp0XH%9PD9nof)-%F(G9S( z)~zf=7WjvxZR^9)0ZxKUS_Bxa-AIdc2zd`s(qg-KFJdo#sAgG<{d^9!aRk!QzXMx8 z?nE^uCm@91#Y=HLr#e|ntWt!s(tBcrFwQ!L08$$M+{f5EV<9{JHpi#{=ux|fe<%#4 z2ODP&STy$331n<;{nq}~1>_t`Ke~{wguUGN{|)^5+v&h&!ouH^)Cv=|17TtP4z(8M z21T$ff^3BzplNKvD1ifmANxfe*j0a?$g1FV!JfB^0iKuY*@x2BeAfYGS<{y8+jE$M z&VC16`{>;acijswxXO629>arNpb5wB(ch4}nz>(M5rWdhGPK|BtCWdI_m$lVNn4&Q zV9(5mGZc|G2^e}CzQSS8RomzH>U2!f3=b{Fr`+ypN5u1K0hP0c;qy8wL2=J~?kKBG zMW97xIZO8Ss^~^&0LtSDgx~Y!oI2ef`muFg?zA~BCq`0UQy1lAftHjDzGAAj6B(3a z%5iyaSk3tT+Fs9^EFbYUNQFn!&aD6X4^sL-l5G27QzKM;CD*Nxv_@DwaX29 z#rhgXdBxiId*kajd69VeVde6>p2wDIU@={a?L`+Ldt9MBt0ejKA~u+nda4$JLhlRG zMa^6fV!7`=H`j<;d^w}ML$j-lRTKtw(=wuYnJ<0mg`=XvUpuXrQtj-B5D<2$>fPT) zcVrQ^n%&yQR#|lV>aqwfV?rW#04T~U(|zX$tX?hGb`>*{$@;@GD|yF-rHT7Ijn+Lo z;gU|3!+CyU_2b+T+0w|qv4kKrp~eDf1_0d|%~Xs5sNgMNDhN5~;Y?(`4vo zku#Sb8_>kro#>EQp`%~DUS&0@tvitS*-_;ChmQ+Q+~=Pd!0axhI72JuJovGyo6LFM zY+wH6`bB+LhmYpj3s9`WXRn-axNn0psdfvF?+g$$pkQ4y_=wUzh9MM-CNRbnt(J*F z>m}L%E_?1T@Yk%^!3&}C;{4Y_l}_jdZbq@yVcpnZ>cq|j8GQNGAHn}D6sN8sNlg2Z zwNIYmF#*1XX=l9|qC%B*N?BxVhm|8{Oe6OJ_R!xRcb$k^!2CPHcmkYu<7X(y!PvO6 zhc2d6y3l}P{j)Et!7uY2k^)i}MnBKg71-IID>*VLFh1~CzkZmAf;9do#@68IJ3XIN zned+ak^SubcZX$P;!%l1M^N=!3 zb}j7kgYPF1=2PFFR0gF*pNYkuyA)VAa^kUPt z5-AOxZH~s%F623T9-k~#6&Iqd#@d9DO{in8vRf~?EQd#LmZq!T?bvc{us^IZRZ^f6 zGJVkkELmRy|535f(-$PI$_}x9=CdK^d9DG{TiqKR_VIa9?=A2K1de^jT)o0(L*S_7 z-v&4S45bT_^^4ja4?N-^4+J;+)S*$f7MfHIX&F6-`OuA zyAvLi`aHNyqYXZAN=<{A)lgv}AU&QaCVz=Z2C%gvly$4xr+!dRykN6h`1)y|=!d+D ztaGm0cGjN1XzV%Yitr7ZC5wUrG`l{qhXZM;SdM4qnvRey+5L&MY^UuiCdSd)bLZqw z1=SvY^DtUkAWdama4NaXU`qOkm|C4 ziB9WO_TZ<&m$zp77BR~0L{o7gQ&Q?hkSfVBN{+?Sf^NC9iKG0bK3;E?0=-+O#N$*# zep0&ClwdB0>ndm_F?Oi)u$!S;?gxCyf^?S714b2xsDJw^ChW#*n=+xdr8;wCf5*HK zB#xkb*~`50P7r5Y8_{+yN7ApRcIxTE^<5#i3vR2%DVVyGrITH?}+s!y}Y`-3hfM`NXNgMGs*ELo;Y-f4f0 z;jTi(WzhsNbtnff1q~0~4nzuhI<(GK*eSJJnP#b#XcilFe;GK_t2U*s}@afd4SX zNAt(Kog29}gorep^cKg-F?b=}QwWlK+w;Ln1DdQTrY9syhco)*Y*k0KgM@YLbc@gR zXWQL8zp2c9#GEL$PE@%VuaR>q=tGiud5WJG0<#^x5?H*BgaqPqYtnzMca zrrq11EdlH#;MnBE!~;rUk|a&=p}$+Fdv(t9dU^Rmx@dRjVax__4ickLR(MZnKAlJB z0gr-3`%m{XqfOP=kCMw3WjyZr_B@mnFRY`8Yt`OPcUHd0Bax`}5gchjA*Xz^!W>uJ zV)x168u2K8IHvCqb`y+Ae~(+*Bc=Mlo+2U z8liETt@t~ZNNtreI>P~xgABe5JFGgWICrIi?!lXLdHU8|ojG~3Xu>YP5L3I=nq~K# zJISmH)p4&geonUBb<95p9h)Wz8!Robts#TfX|;O4t=VGKN6)>ie99N~yg?QsS}&s# z+QkSTA1g)v!&>fg$Bo|02>(?zuc<_##oeu@I3bTT&_SXXHH|`GFaxTi>@cl%p9Tq3&w;o<3 z;WSIqY15l!H$<^7atEJ>)DJQ=GgRl6rWE8vvU^9*g*haL4Jm<^W5YsSdPJ)^%;`l$ zXq$Y6ksPdg{ofn|z=qfdUQO8vkhArK`ye3tQZ|Zjk@7I_mRI?aH9I4TU72ya`f+M~ zQbO#E6zy6c`fZ2N1xiLF$|o3?h_6rC)E$=~(}jy*OY)G2imxOL(6} zzqoT4H`D;5>|Py*E(4LOHMv`}$HpU}=-h$;!RKW~;?0Kss7W1~vm^2OFV3#<$fS=A zc*mFIzmy&CoYcsUX$4_-ceh{0LDBhIC17a_z_|z$Uo;07;h?|IU;lL|`Hc{;#m8ny z?p%qAY;FxVKe}Od(mzHMM+*4=KRt_o$*`KE&h%I(+(TfnM;Lv_xh7;~VKl4hkK?(_ z|Ip$*%4?WOOr&SI)IgdwuIgePaHOi74Q_p2)&BYM`>X-%`?JtjcN0~qeNgr1PUY9#~U!w~%G z{q-L(w*Y*J8Y^Ky5)8$Q-da#SW8Rp)=6~YB|JP56{0IY}A>*3=!H3W~16(UK`!K4UIV51YomY$i5X2b402LeqZy22d zZXfe?`Bz741&ms&m-P8CrsO}zs15$B4gDKJ+xP$R_0>^TMcucGs33wg(%mK9p>%hb zbY75d5RvX~knZkQy1To(yLsn=e((3*_}&}i{&Vj+_nh5(?YZWf>*9G<0GQN{k^P9_ z{C|W2PNCP*gC{t7ENF~Fo_plNMSPq*=;yO^h$LuL)Y z-s-qTvxW2USGprC^s zA05nomUS+9pHQwA^S} zLr!5_{rD%J*&&F)@m0-h8GA&Rl#34ObuKV_Bb<17VmfNCGMJt>5w#58ScWfD?GN|iEapV56%^qV8diazMchoxnAdLjnbXdzQh0V z&&sF0rEN6YIl9{u>qWb1eLq`k+wk;;G~XB@#Xw?) zv-6XF>!N0-VPUdMIVB0j&G*>L+G=JPDL8fIe9A@4Tc1fxCA z;sU}YZS3)hWa}>BDtx{@rGfHxSyWrT2R18TCD__E@~PY#BPp`dUAbuGsF_lZKUukC zY4Mi9Y6$0&Kn|%zwTHa&M^(DJ@cP4e4E8@2H`>O$4hq*dL(tln6y|gE#rbTt>-whP z(fK7!^gVc@X58_P#ULlHoUCoQLcH9Ku8?qn)A_KG=n{@06C&K8&)8)q3a`+lG7C?0zj7;QOA8#_~J15K-O>r>+Me)`%n-1-*v1VoY2 zC+wX`$cQ|)13TGD;*E}Wb57LE`t5jCAt&C&CtG4UL~h}{?2xg*0)%G`*^rlh^0j*& z|5Yi&w;e*UO>yqq#N6HojswToBX9Q$(s|V3UbamW zi+D8dFYzQ~Bw+83$9u3>H|zIDM7HVV_t*RP!;o=`JZ3!o;5 zawudVI|<#YUYT%C65dST@7d976B^^o1oY9s)pQ{a1>IjX1rL;H72N{UYJ5k3meL?G z{lie!N1r5N?=4_uiX5$i7k0E?;=I*|gYrq(b8>lIjs0ylMxENUwyKX5XpzYI53NKZ z9bcb^?g8Es2skYYwsz_F;lj@u;_a!YrhHkKtUq{0^bE-4QM2!dmtaJ%{<|Tj6 zvggS|9_{E;QkdH%M4j;bjI*x7N*WjPIDl#t`26L}FEvU^vr+gD1uUgy#wV5eq{HYD zf5^vtRE>h&zOV=PUjCj?s)2Gk8K+`7Vc|8V%jK$VRxrB*_>}qZK5UUik`EM!bHNc* z?w46M#X07@Yn+3eh>(y_T=AL00?4e5ud;sEeqQUHd6nC`@HpV@;6dx6!H@g%><~M zl&q+KI4cOoDYU?nUO>|FvU2@7Em+jxMse$ugBC}?|!fh(8RSHS_>1u%Yyy^o+ zDfkJ?q6~5xMcYO*@;^S8{~iPlS2zM%8o=HJB;y1JebtwFn^S_tUO@aRbkG0%OH!|H zECyoSz^xq$Fb)`*a6A55QM?pD*UH;`6#A#Y1i;R=jF%mO)PK!P9N_vMI!qOi@$Xqk z2uQ@eV`M086H^NCos%_6U1B)M2AbW*(+7)GG0_UfJl1JxTr0-+py{*FE6y_wpUBU~ zSqAjaV?z-bDjPa)heuwtXeDC*4=nh_>dIC+%&EatHqW-F!=AWsTvY-BVQfH7u@ z>EA1wFi|v%frbtjn$=Xn?J`R;xRsmkzgy)xD*4?qL*j0YvZvA%}x$iSvqaK`3A_+{DwF4O|ajG=KVVIh{(Lp6QDx@v6+de z+4vrBd3ijF+FAPok@Fq&1cSdE*~T63LB+`ZVo3_y`W{Iv1%S3@N>Yqi8#LMc7Zwh> zDuy8&s`5@x*HkagQfNnD)s@W!VBzS705ISI9HMhJz^CUQEuXpF>urd!?x6T1(VV8x zUBM=;PJ0_UOQI$YvGMK)c}j)q{YHnEd{D@fRr}G0N+yq}KYhy!*$dt@%cKh?Sx)n3 zdQ053kX2s5f=)WB&7Vj)P2mI{lw#}K!&-2Xv{HAKOLy<6{a$5hX=mfgyJtHZZ|0|I~9 zcW~dP^U{q}H0*LO~qH%wp@2r`sPB$*k4@T`5w;#NIs&o$)u1TSz&JrzpIW1ZwM9-kT~|+by`uff;^R zqD$&c3IMAWt9&2Ye?VbRRlKcFkkeTc5?uuI-zXZ4{rhFEF7H35BzXBYExwpN^QK(6 zz$=cmnnq#Bz7!?MtT(A*`n8u8Ng8e@Q1Bj_Xrwi@GRkK``KF~x)Vu41t2 zl0fj{rVyB2q)E&eB7Bm79*5g?Wby0c+j_)SaL$NC((mJ{v9UwK1zTwhe|}w$YBeg# zE3@8~oh~i?0pY>(M^a}3DL`xb)r7Ev&~IkeQ_t1RG&>4+&2xiAaB8Fa1*Yf6@T~}x zn6M_KntfklRLPA`NL|$1p^{40?%%o1s%N`>W!ix_)4$JKzwOQ5#TIqNt)0@B>_jYO zrXfTyPa#Xo!#YspC+0{RY#Xu)z({Ht7#l{o z1N>b_F95LW%jeWEJ1y=j2O&P)Q#4xE-BUTzKYu)DKd`u)bP}K=5(c;?q$uqe_0?26 zYAErXp{ul126zrbGqKwUALvQRryNElOce@2%k|{SM~4x=n2j!dE&6Ru$xKVd30skl z;+l_MhbdZ792R6flbsTcn}5|~%a9bLtlWB`Ti_I9KRfZt^zm0SS)^$EY!M8#POo{+ zt?!|;Ddrc$+%z~`ff*q!Q^=3NIdlmdSX$viGGkpUQ~0@t$OR48f1m6ml}ag_a43jt zD%Vw&G$JPu1ziXSU5xC4vDthglI;u_!-Y3$0DWJJld@+shv`e?DPa&aSBHNaOJI?s zh5L1eOuMAbmF`pE-V(K}8g^WMamyd_^QT)Sh=SBs+i8Z> znKnXSNk-8Soh_37+VHGsvu!vcJT4>cml&>V`tp03&mUtXsdKvQ0FWDqGQcsl+(B$i zq#vji+4T$w&GPc|t4n%;IfVL*1fQTFUs=>`q-{h;3(z(~zx`l-?=}oaMy6;}S`Ay{6kjiG5*nUNbW*Hf4cm}_1-M7F~itGTa!%ZBZY)bk=fXm zh{>7XE4h?c@78@aCSiR@kERYet&(10e7Y}(UYNz>vO>1;=e}WNUk)HiTjTi*f@&cs zKPa~0S#dOW-CHIk$^>JdZ#-xRQsF+f6I3^{_y7OVznEn z`bD)SqZ}A`A^ra%#2se@i{?Q0eYBj;wjmlN2j&-ARj$aU52QG95fEt8m5Lum2b%g! zud!Pf?4VmZNltp)IT5pvlZ(mP!A86$N?5Ef%|zPIe*!HZi7(;b>w9FQ4jAj( zdS3zVo5vhJur@faB85XQHyj7Q{&uv4N?GTd<~!plf?dg0u}Tr*yLGNcTI@SCmu~L&%MUfgkXyuh#q}ZfPg}VIksnd!^ ztLy@I*>B2DDaWcV)r;>(!-C1!)e=fP)9qbiM13Vc*76qWOQ@li5_+t7MsuupX`cKR zy<~agw@C|trD)K++^O;3q@}Nx8>V_MF8$bN*g5DJ+qu$52ZvGd{R_))Xo zXu{0}=gu{+52Gcaowi`ufe!q!vD`6r(Zx`O3bj!?U8qAtg`xeX2-7_OVFA>uTO`L% zc4q@1{jr0w>?gPPh#yZW+(1CBlVXf*#VFXq*Q~0ciiDyetk;d!vtwrMe)KMrs(_yCF>@#jU1VUn^KkFuqPx05DNerKa>{(I4BtN>LC8L)P=zUnUFxr zPe7@?1Pb`^5P;~M+ykfio^8GV5m)!uc6Q_}0F>eIp>Xyorea!!tg<)k=B6I*)>5WdvXlQ6|b=ebyuiDL@sy2Z5Ow_O%xWH3r z1-KkrXa5JElerj+<0({gn)k)O(8%&sE{)+g|8GX;)9LH~3a709(pr`(4uoJ{>8w$_ zjro8sJux&^*0^z$g?+mv4CwVA9Rh?OyyzEM>f#NtZgfw2k$Vc8me`d(umLA1uWkc# zu~^O5zW!g)n#EinoUh{1*mstXbti@KaG^^EiT+1W=~Eqx0L=A2>{)PoQ!@emVZt5w z59pK!`Zss$)APv%$dZe+Wri)GfvNk99t!{duPE#MbY}{-z){{NLGP4FdRqCJ=GYrS`Ij)Dgkz*m^0S1hi5|aZE zs1Fb|ndmZ$!N9Oo6DCrZ+Vd;s@PRqxW$BnxEFKt**dJ>!!XK=|R)(fizC z_g<_2^fc@7t1TsZH4yl(D!K^3etGdOc9hd&^*lA)0?Q)00vVgs3+M_?BW*IdGw!1p zKH#AJd$3BuuOIw{5}|>g!F?F2560{&g)ncw2Rc9MmeL62P#lZ z%-N)!cLHJDPPPZ{g^l^mm1xyc4H6ktfV6{>ckp32*VEQM*=iZWd+n1_Qmw?OE#J5( zQMnuFU66L!F7wOB(l}NNkK%j8+_==Z=r(VDItnDGV;Yc(q2j1f9)ic^uU;s?n}dm= z<`jus9fetjr;BM_=;kmG-mhStQm1PrK*>hB=sGE1sZ&`VT5okupBc>+u3X2T-^L#? zTK{D3Nps=XmbS5)wFo z=&EEnUMO6$*SxA&lBCB+nYD5Y`A&uH@NND)g~NFwN3kZ+B43(E&E9rcx!Zn)-og89 z#``cTb)l0d&X$G*Ku*ky)c+``c8va}Oc~Ve<<;ZW`zdO1nV!EzsZ7+qs(jICEI zDILwqp7!A|O4rbR5VcTi&>K>Sd_qnMRv}zj9^@7!OZRS*Ow?>|UM^|JB>54yVy9!M z5NYNbmtbTV!hI8IHtNSTHi%oWSnNaNN#`I{=VWmH#_W7`@i9EWKz;0~*x$CZ4UPkY zJipQ*ISbOU1tKIL?A>2X$Fe_me!5MIXmtr(co!6`XtGWzWtQSZ*hbHsCU>C3)0ku6 z{V^R{%sL>YcS$UkIp{aKy-*vJbtD?!rW`u9&;Z1Q!+B0wFR2gR2KW<_ zLgtGv>jyMKCf-yZ_~Yb!R0u}({3tdogFJj#a!$^)H`kbMVt!Q-_Os%I!;0T$eJ+~O z-d^WUhFU)FOEB8B7GWC@m=)}UXFy4HtCZq#mKRn&w`mK4;Sj0OaG>NeWPHMsz;b8V zU&S?{^p-kLiv!tM0(hN$=xtEAq^C?^jmv)u1$++7B!fVkg7axbax_`E z4ycMnYR^P}Gp&fi!n0k$-^5abf!Y*gqAlMYacGwr;)CZCoj!8<+BDV(-HV6>x#Cio&xk$0oo}j zNSgAve$gr0V2>@r+LQuKd(?YLPHEq5%5lv0G8o&^!rACNQRe)hKd+y%^+o{D65J?F zuM;F55rekS{|=7$;)MW2g4t*2nod3%wFg>zlhEp4u2^W`-lIZ@>;|% zhwRa2E#Sg-vZuusbk%&L>MOd!b)_)8+}I!HsE41)DbxaF!I;0dW>$2fE`r4}(vEd0ed;_bw3^Ge6RWVCC#D?$EC|m-k_d3AFj3`8Sdbv*u?OHc*|?Q*ll$nV zv(W1@n7H~+yiiee)mz`#;V(9|*Pq<9G&>i)-O=Q>MM1gnC*F}nVkX1S5e@o?P^_?A zaGZQGwc;daw-Xo(yLweNkKf%?&=r6(s~lOceDkzCGJuyyF|l_cEX(AW5jdKyAEN%@RyH`H?wl%!Lcn!DTPCUPLVNPc$0TuUsB@^4a2$|vW8!FN zyE!P1F;fJMWhCXtfTTbHKJoC^k!aMp$RA1sWxZW5I4EgCI7x_vDLWKJ9cFIpmq)-9 zB%s1ztB(3m!)dGQ_{MwV%mbeeD8>$z>fnL8U2p>iizGh~IxwCqa~PRYu6Np{GT?09 z?)GKc>NgV&VM_$7a^nqojQ-|tibg&Dt4Gf&>#ZPVCs*4OdTb7^yMv4=9dAuGi|Fvj zc7IMHB)6`%i>`bkHz58%(-f3WvaiYM-n~H))6hPVu%!vbO8X0{Sap{A57R>}8l>do zpEsFV1CxtviBvz%$~WPBQZ1U5W!$q7pkQJu&+~cHnCSz-w#*DT&`5QnJVQ%mFv

qTee~Bf!9Qp#xj|(jgP;WmHJFt5&q%CDKlJOgVflc

UDOa}pi9J~8bAa}ed0N$XUP%px(|M!={i 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 ZX1Zvr&RYQq{|J1;q^o6sd8%O-@gKE+n`i(4 literal 43125 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%0ALgry0NWt>4H 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 z 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ℜ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 diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 5bd5546..7181479 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -110,7 +110,18 @@ "migrateSubmit": "Complete migration", "initSubmit": "Create and continue", "migrateSuccess": "Migration complete", - "initSuccess": "Setup complete" + "initSuccess": "Setup complete", + "restoreTitle": "Restore from backup", + "restoreSubtitle": "Upload a .phost.tar.gz to restore the full site", + "restoreHint": "Restore replaces all current data. Cloud storage secrets are not in the backup—re-enter them on the Storage page after sign-in.", + "restoreUpload": "Choose backup file", + "restoreSubmit": "Start restore", + "restoreProgress": "Restoring… {progress}/{total}", + "restoreSuccess": "Restore complete. Sign in with the admin account from the backup.", + "restoreFailed": "Restore failed", + "restoreSecretsHint": "Cloud storage secrets are not in the backup. Re-enter them on the Storage page after sign-in.", + "modeInit": "Create admin", + "modeRestore": "Restore backup" }, "register": { "title": "Register", @@ -388,7 +399,125 @@ "deleteConfirmBody": "Delete “{name}”? This cannot be undone.", "secretsRequired": "Access Key and Secret Key are required for new storage", "manageStorage": "Manage object storage", - "manageStorageHint": "Configure R2 / S3 / COS backends and URL serving" + "manageStorageHint": "Configure R2 / S3 / COS backends and URL serving", + "backup": { + "sectionTitle": "Backup & migration", + "sectionSubtitle": "Full-site backup, restore, and cross-backend image migration", + "siteTitle": "Site backup & restore", + "siteSubtitle": "For migration, disaster recovery, and full-site restore", + "siteFooterHint": "Backups include the database and images, not plain-text secret_json.", + "exportTitle": "Create site backup", + "exportSubtitle": "Package the database and all images as .phost.tar.gz", + "exportAction": "Start backup", + "exportStarted": "Backup job started", + "exportFailed": "Failed to start backup", + "exportPathHint": "Exports are saved under data/backups/", + "exportIncludesTitle": "Package includes", + "exportIncludesDb": "Database snapshot (pichost.db)", + "exportIncludesImages": "All image files ({count})", + "exportExcludesSecrets": "Excludes plain-text secret.json for cloud storage", + "exportConcurrencyHint": "Only one backup or migration job can run at a time", + "estimateLoading": "Estimating size…", + "estimateImageCountLabel": "Images", + "estimatePackageSizeLabel": "Est. package", + "estimateDatabaseSnapshotLabel": "Database snapshot", + "estimateStoragePathLabel": "Save location", + "estimateStoragePathValue": "data/backups/", + "estimateImages": "{count} images · {size}", + "estimateDatabase": "Database ~{size}", + "estimateTotal": "Total ~{size}", + "restoreTitle": "Restore from backup", + "restoreSubtitle": "Upload or pick a .phost.tar.gz on the server, preview, then confirm", + "restoreUpload": "Choose backup file", + "restoreUploadLabel": "Upload from device", + "restoreUploadHint": "Click to select a .phost.tar.gz backup", + "restoreUploadAction": "Upload & restore", + "restoreServerAction": "Server backup", + "restoreServerPackages": "Server backups", + "restoreServerSelectPlaceholder": "Select a backup", + "restorePreview": "Preview", + "restorePreviewConfirm": "Preview & confirm", + "restoreConfirm": "Confirm restore", + "restoreConfirmTitle": "Confirm site restore", + "restoreConfirmSource": "Source: {name}", + "restoreOverwriteWarning": "Overwrite mode replaces conflicting images and the database. Ensure you have a current backup.", + "restoreSelectRequired": "Select or upload a backup file", + "restoreStarted": "Restore job started", + "restoreFailed": "Restore failed", + "conflictMode": "Conflict policy", + "conflictSkip": "Skip existing images", + "conflictOverwrite": "Overwrite existing images and database", + "syncTitle": "Cross-backend sync", + "syncMigrateTitle": "Cross-backend migration", + "syncMigrateSubtitle": "Migrate images between configured backends", + "syncSubtitle": "Copy images between configured backends and update the index", + "syncFrom": "Source backend", + "syncTo": "Target backend", + "syncPendingImages": "Images to migrate", + "syncPendingSize": "Est. size", + "syncIncludesTitle": "What sync does", + "syncIncludesCopy": "Copy image files from source to target backend", + "syncIncludesIndex": "Update storage_backend_id in the index", + "syncIncludesConfig": "Site settings and other backends are unchanged", + "syncDryRun": "Dry run only", + "syncSetDefaultAfter": "Set target as default after migration", + "syncStartMigrate": "Start migration", + "syncPreviewOnly": "Preview", + "syncFooterHint": "Only image files and index are migrated; site settings are unchanged.", + "syncDeleteSource": "Delete source files after sync", + "syncSetDefault": "Set target as default after sync", + "syncPreview": "Preview & start", + "syncConfirm": "Start sync", + "syncConfirmTitle": "Confirm cross-backend sync", + "syncDeleteWarning": "Source files will be deleted. This cannot be undone.", + "syncSelectRequired": "Select source and target backends", + "syncSameBackend": "Source and target must differ", + "syncStarted": "Sync job started", + "syncFailed": "Sync failed", + "previewFailed": "Preview failed", + "previewImages": "Images", + "previewNew": "New images", + "previewConflicts": "Conflicts", + "previewCreated": "Backup created", + "previewSize": "Data size", + "jobsTitle": "Recent jobs", + "jobsSubtitle": "Track backup, restore, and migration progress", + "jobsEmpty": "No backup or migration jobs yet", + "jobsEmptyHint": "Progress appears here after export, restore, or sync starts", + "jobsUnit": "jobs", + "colTask": "Task", + "colType": "Type", + "colStatus": "Status", + "colProgress": "Progress", + "colMessage": "Message", + "colCreated": "Created", + "colActions": "Actions", + "jobTypeExport": "Site export", + "jobTypeRestore": "Site restore", + "jobTypeSync": "Cross-backend sync", + "statusPending": "Pending", + "statusRunning": "Running", + "statusDone": "Done", + "statusFailed": "Failed", + "jobFailedUnknown": "Unknown error", + "download": "Download", + "jobView": "View", + "retry": "Retry", + "retryStarted": "Retry started", + "retryFailed": "Retry failed", + "jobRunning": "Another job is already running. Try again later.", + "migrateIn": "Migrate in", + "migrateOut": "Migrate out", + "migrateInHint": "Copy images from the default backend to this one", + "migrateOutHint": "Move images out of this backend", + "syncDraftApplied": "Sync form prefilled — review and start when ready", + "syncNeedTwoBackends": "At least two storage backends are required to sync", + "selectBackend": "Select backend", + "syncConfirmRoute": "{from} → {to}", + "cancel": "Cancel", + "cancelDone": "Job cancelled", + "cancelFailed": "Failed to cancel job" + } }, "stats": { "title": "Gallery", diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json index a2ef923..f812646 100644 --- a/i18n/locales/zh-CN.json +++ b/i18n/locales/zh-CN.json @@ -110,7 +110,18 @@ "migrateSubmit": "完成迁移", "initSubmit": "创建并进入", "migrateSuccess": "账号迁移完成", - "initSuccess": "初始化完成" + "initSuccess": "初始化完成", + "restoreTitle": "从备份包恢复", + "restoreSubtitle": "上传 .phost.tar.gz 恢复整站数据", + "restoreHint": "恢复将覆盖当前全部数据。云存储密钥未包含在备份中,登录后请在存储页重新填写。", + "restoreUpload": "选择备份文件", + "restoreSubmit": "开始恢复", + "restoreProgress": "恢复中… {progress}/{total}", + "restoreSuccess": "恢复完成,请使用备份中的管理员账号登录", + "restoreFailed": "恢复失败", + "restoreSecretsHint": "云存储密钥未包含在备份中,登录后请在存储页重新填写", + "modeInit": "创建管理员", + "modeRestore": "从备份恢复" }, "register": { "title": "注册账号", @@ -388,7 +399,125 @@ "deleteConfirmBody": "确定删除「{name}」?此操作不可撤销。", "secretsRequired": "新建存储需填写 Access Key 与 Secret Key", "manageStorage": "管理对象存储", - "manageStorageHint": "配置 R2 / S3 / COS 等多后端与直链策略" + "manageStorageHint": "配置 R2 / S3 / COS 等多后端与直链策略", + "backup": { + "sectionTitle": "备份与迁移", + "sectionSubtitle": "整站备份恢复与跨后端图片迁移", + "siteTitle": "站点备份与恢复", + "siteSubtitle": "用于换机、灾备与整站恢复", + "siteFooterHint": "备份包含数据库与图片,不包含 secret_json 明文。", + "exportTitle": "创建站点备份", + "exportSubtitle": "打包数据库与全部图片为 .phost.tar.gz", + "exportAction": "开始备份", + "exportStarted": "备份任务已开始", + "exportFailed": "创建备份失败", + "exportPathHint": "导出文件保存在 data/backups/", + "exportIncludesTitle": "备份包含", + "exportIncludesDb": "数据库快照(pichost.db)", + "exportIncludesImages": "全部图片文件({count} 张)", + "exportExcludesSecrets": "不含云存储 secret.json 明文", + "exportConcurrencyHint": "同时仅可运行一个备份或迁移任务", + "estimateLoading": "正在估算体积…", + "estimateImageCountLabel": "图片总数", + "estimatePackageSizeLabel": "预计备份包", + "estimateDatabaseSnapshotLabel": "数据库快照", + "estimateStoragePathLabel": "保存位置", + "estimateStoragePathValue": "data/backups/", + "estimateImages": "图片 {count} 张 · {size}", + "estimateDatabase": "数据库约 {size}", + "estimateTotal": "合计约 {size}", + "restoreTitle": "从备份恢复", + "restoreSubtitle": "上传或选择服务器上的 .phost.tar.gz,预检后确认恢复", + "restoreUpload": "选择备份文件", + "restoreUploadLabel": "本地上传", + "restoreUploadHint": "点击选择 .phost.tar.gz 备份包", + "restoreUploadAction": "上传备份恢复", + "restoreServerAction": "选择服务器备份", + "restoreServerPackages": "服务器已有备份", + "restoreServerSelectPlaceholder": "选择备份包", + "restorePreview": "预检", + "restorePreviewConfirm": "预检并确认", + "restoreConfirm": "确认恢复", + "restoreConfirmTitle": "确认恢复站点", + "restoreConfirmSource": "来源:{name}", + "restoreOverwriteWarning": "覆盖模式将替换冲突图片与数据库,请确认已做好当前站点备份", + "restoreSelectRequired": "请选择或上传备份文件", + "restoreStarted": "恢复任务已开始", + "restoreFailed": "恢复失败", + "conflictMode": "冲突策略", + "conflictSkip": "跳过已存在图片", + "conflictOverwrite": "覆盖已存在图片与数据库", + "syncTitle": "跨后端同步", + "syncMigrateTitle": "跨后端迁移", + "syncMigrateSubtitle": "在已配置后端之间迁移图片", + "syncSubtitle": "在已配置的后端之间拷贝图片并更新索引", + "syncFrom": "源后端", + "syncTo": "目标后端", + "syncPendingImages": "待迁移图片", + "syncPendingSize": "预计体积", + "syncIncludesTitle": "同步说明", + "syncIncludesCopy": "拷贝源端图片文件到目标后端", + "syncIncludesIndex": "更新索引中的 storage_backend_id", + "syncIncludesConfig": "不修改站点配置与其它后端数据", + "syncDryRun": "仅预览 Dry Run", + "syncSetDefaultAfter": "迁移后设为默认后端", + "syncStartMigrate": "开始迁移", + "syncPreviewOnly": "预览", + "syncFooterHint": "仅迁移图片文件与索引,不影响站点配置。", + "syncDeleteSource": "同步后删除源端文件", + "syncSetDefault": "同步后将目标设为默认", + "syncPreview": "预检并开始", + "syncConfirm": "开始同步", + "syncConfirmTitle": "确认跨后端同步", + "syncDeleteWarning": "将删除源后端上的图片文件,此操作不可撤销", + "syncSelectRequired": "请选择源与目标后端", + "syncSameBackend": "源与目标不能相同", + "syncStarted": "同步任务已开始", + "syncFailed": "同步失败", + "previewFailed": "预检失败", + "previewImages": "图片数量", + "previewNew": "新增图片", + "previewConflicts": "冲突图片", + "previewCreated": "备份时间", + "previewSize": "数据量", + "jobsTitle": "最近任务", + "jobsSubtitle": "查看备份、恢复与迁移进度", + "jobsEmpty": "暂无备份或迁移任务", + "jobsEmptyHint": "导出、恢复或同步开始后,进度会显示在这里", + "jobsUnit": "条任务", + "colTask": "任务", + "colType": "类型", + "colStatus": "状态", + "colProgress": "进度", + "colMessage": "说明", + "colCreated": "创建时间", + "colActions": "操作", + "jobTypeExport": "站点导出", + "jobTypeRestore": "站点恢复", + "jobTypeSync": "跨后端同步", + "statusPending": "等待中", + "statusRunning": "进行中", + "statusDone": "已完成", + "statusFailed": "失败", + "jobFailedUnknown": "未知错误", + "download": "下载", + "jobView": "查看", + "retry": "重试", + "retryStarted": "重试任务已开始", + "retryFailed": "重试失败", + "jobRunning": "已有任务正在运行,请稍后再试", + "migrateIn": "迁入", + "migrateOut": "迁出", + "migrateInHint": "从默认后端拷贝图片到此后端", + "migrateOutHint": "将图片从此后端迁出", + "syncDraftApplied": "已填入同步表单,请确认后开始", + "syncNeedTwoBackends": "至少需要两个存储后端才能同步", + "selectBackend": "选择后端", + "syncConfirmRoute": "{from} → {to}", + "cancel": "取消", + "cancelDone": "任务已取消", + "cancelFailed": "取消任务失败" + } }, "stats": { "title": "图库", diff --git a/package-lock.json b/package-lock.json index bd262fd..b886ed2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,13 @@ "cap-widget": "^0.1.57", "nuxt": "^4.4.8", "sharp": "^0.35.3", - "tailwindcss": "^4.3.1" + "tailwindcss": "^4.3.1", + "tar": "^7.5.22" }, "devDependencies": { "@nuxt/eslint": "^1.16.0", "@types/node": "^22.15.0", + "@types/tar": "^6.1.13", "eslint": "^10.6.0", "mermaid": "^11.17.2", "typescript": "^6.0.3", @@ -8772,6 +8774,27 @@ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "license": "MIT" }, + "node_modules/@types/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmmirror.com/@types/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "minipass": "^4.0.0" + } + }, + "node_modules/@types/tar/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -18797,9 +18820,9 @@ } }, "node_modules/tar": { - "version": "7.5.20", - "resolved": "https://registry.npmmirror.com/tar/-/tar-7.5.20.tgz", - "integrity": "sha512-9FcyK4PA6+WbzlTM9WhQm6vB5W7cP7dUiPsv1g7YDwEQnQ1CGpK3MGlKk/ITVWMk05kHZuBhmVhiv8LZoy/PFQ==", + "version": "7.5.22", + "resolved": "https://registry.npmmirror.com/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", diff --git a/package.json b/package.json index cec5001..2f75a12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pichost", - "version": "1.2.8", + "version": "1.3.0", "description": "Self-hosted image hosting for your NAS / home server — Nuxt admin UI, local disk or S3-compatible storage, server-side WebP compression, referer protection, Twikoo/EasyImage compatible.", "homepage": "https://github.com/O96u/PicHost#readme", "repository": { @@ -34,9 +34,11 @@ "test:watch": "vitest", "start": "node .output/server/index.mjs", "reset-password": "node server/cli/reset-password.mjs", - "migrate": "node server/cli/migrate-to-single-images.mjs", "slider": "node server/cli/slider.mjs", "clear-domains": "node server/cli/clear-domains.mjs", + "backup-export": "node server/cli/backup-export.mjs", + "backup-restore": "node server/cli/backup-restore.mjs", + "storage-sync": "node server/cli/storage-sync.mjs", "docs:prepare": "node docs-site/copy-screenshots.mjs", "docs:dev": "npm run docs:prepare && vitepress dev docs-site", "docs:build": "npm run docs:prepare && vitepress build docs-site", @@ -50,11 +52,13 @@ "cap-widget": "^0.1.57", "nuxt": "^4.4.8", "sharp": "^0.35.3", - "tailwindcss": "^4.3.1" + "tailwindcss": "^4.3.1", + "tar": "^7.5.22" }, "devDependencies": { "@nuxt/eslint": "^1.16.0", "@types/node": "^22.15.0", + "@types/tar": "^6.1.13", "eslint": "^10.6.0", "mermaid": "^11.17.2", "typescript": "^6.0.3", diff --git a/server/api/admin/backup/estimate.get.ts b/server/api/admin/backup/estimate.get.ts new file mode 100644 index 0000000..4e8cdc2 --- /dev/null +++ b/server/api/admin/backup/estimate.get.ts @@ -0,0 +1,40 @@ +import { requireAdminAuth } from '../../../utils/access' +import { getBackupExportEstimate } from '../../../utils/backup/stats' +import { getBackupsDir, isSafeBackupFilename } from '../../../utils/backup/paths' +import { promises as fs } from 'node:fs' +import { join } from 'node:path' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const estimate = await getBackupExportEstimate() + + const packages = await (async () => { + try { + await fs.mkdir(getBackupsDir(), { recursive: true }) + const entries = await fs.readdir(getBackupsDir(), { withFileTypes: true }) + const items = await Promise.all( + entries + .filter(entry => entry.isFile() && isSafeBackupFilename(entry.name)) + .map(async (entry) => { + const full = join(getBackupsDir(), entry.name) + const fileStat = await fs.stat(full) + return { + name: entry.name, + bytes: fileStat.size, + modifiedAt: fileStat.mtime.toISOString() + } + }) + ) + items.sort((a, b) => b.modifiedAt.localeCompare(a.modifiedAt)) + return items + } catch { + return [] + } + })() + + return { + estimate, + backupsDir: getBackupsDir(), + packages + } +}) diff --git a/server/api/admin/backup/export.post.ts b/server/api/admin/backup/export.post.ts new file mode 100644 index 0000000..337b827 --- /dev/null +++ b/server/api/admin/backup/export.post.ts @@ -0,0 +1,26 @@ +import { requireAdminAuth } from '../../../utils/access' +import { createApiError } from '../../../utils/api-error' +import { serializeBackupJob } from '../../../utils/backup/api' +import { getBackupExportEstimate } from '../../../utils/backup/stats' +import { startFullExportJob } from '../../../utils/backup/runner' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const config = useRuntimeConfig(event) + const appVersion = String(config.appVersion ?? '0.0.0') + + const estimate = await getBackupExportEstimate() + + try { + const job = startFullExportJob(appVersion) + return { + job: serializeBackupJob(job), + estimate + } + } catch (error) { + if (error instanceof Error && error.message === 'BACKUP_JOB_RUNNING') { + createApiError(event, 'CONFLICT', '已有备份或迁移任务正在运行', 409) + } + throw error + } +}) diff --git a/server/api/admin/backup/jobs/[id].get.ts b/server/api/admin/backup/jobs/[id].get.ts new file mode 100644 index 0000000..5221efd --- /dev/null +++ b/server/api/admin/backup/jobs/[id].get.ts @@ -0,0 +1,19 @@ +import { requireAdminAuth } from '../../../../utils/access' +import { createApiError } from '../../../../utils/api-error' +import { serializeBackupJob } from '../../../../utils/backup/api' +import { getBackupJob } from '../../../../utils/backup/jobs' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const id = getRouterParam(event, 'id') + if (!id) { + createApiError(event, 'INVALID_REQUEST', '缺少任务 ID', 400) + } + + const job = getBackupJob(id) + if (!job) { + createApiError(event, 'INVALID_REQUEST', '任务不存在', 404) + } + + return { job: serializeBackupJob(job) } +}) diff --git a/server/api/admin/backup/jobs/[id]/cancel.post.ts b/server/api/admin/backup/jobs/[id]/cancel.post.ts new file mode 100644 index 0000000..100aeb7 --- /dev/null +++ b/server/api/admin/backup/jobs/[id]/cancel.post.ts @@ -0,0 +1,20 @@ +import { requireAdminAuth } from '../../../../../utils/access' +import { createApiError } from '../../../../../utils/api-error' +import { serializeBackupJob } from '../../../../../utils/backup/api' +import { getBackupJob } from '../../../../../utils/backup/jobs' +import { cancelBackupJob } from '../../../../../utils/backup/runner' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const id = getRouterParam(event, 'id') + if (!id) { + createApiError(event, 'INVALID_REQUEST', '缺少任务 ID', 400) + } + + if (!cancelBackupJob(id)) { + createApiError(event, 'INVALID_REQUEST', '只能取消进行中的任务', 400) + } + + const job = getBackupJob(id) + return { job: job ? serializeBackupJob(job) : null } +}) diff --git a/server/api/admin/backup/jobs/[id]/download.get.ts b/server/api/admin/backup/jobs/[id]/download.get.ts new file mode 100644 index 0000000..2b6b814 --- /dev/null +++ b/server/api/admin/backup/jobs/[id]/download.get.ts @@ -0,0 +1,29 @@ +import { createReadStream } from 'node:fs' +import { basename } from 'node:path' +import { requireAdminAuth } from '../../../../../utils/access' +import { createApiError } from '../../../../../utils/api-error' +import { getBackupJob } from '../../../../../utils/backup/jobs' +import { BACKUP_ARCHIVE_EXT } from '../../../../../utils/backup/paths' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const id = getRouterParam(event, 'id') + if (!id) { + createApiError(event, 'INVALID_REQUEST', '缺少任务 ID', 400) + } + + const job = getBackupJob(id) + if (!job || job.type !== 'full_export' || job.status !== 'done' || !job.outputPath) { + createApiError(event, 'INVALID_REQUEST', '可下载的备份不存在', 404) + } + + const filename = basename(job.outputPath) + if (!filename.endsWith(BACKUP_ARCHIVE_EXT)) { + createApiError(event, 'INVALID_REQUEST', '备份文件无效', 404) + } + + setResponseHeader(event, 'Content-Type', 'application/gzip') + setResponseHeader(event, 'Content-Disposition', `attachment; filename="${filename}"`) + + return sendStream(event, createReadStream(job.outputPath)) +}) diff --git a/server/api/admin/backup/jobs/[id]/retry.post.ts b/server/api/admin/backup/jobs/[id]/retry.post.ts new file mode 100644 index 0000000..31f1eaa --- /dev/null +++ b/server/api/admin/backup/jobs/[id]/retry.post.ts @@ -0,0 +1,28 @@ +import { requireAdminAuth } from '../../../../../utils/access' +import { createApiError } from '../../../../../utils/api-error' +import { retryFailedBackendSync } from '../../../../../utils/backup/backend-sync' +import { serializeBackupJob } from '../../../../../utils/backup/api' +import { getBackupJob } from '../../../../../utils/backup/jobs' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const id = getRouterParam(event, 'id') + if (!id) { + createApiError(event, 'INVALID_REQUEST', '缺少任务 ID', 400) + } + + const job = getBackupJob(id) + if (!job || job.type !== 'backend_sync') { + createApiError(event, 'INVALID_REQUEST', '任务不存在', 404) + } + + try { + await retryFailedBackendSync(id) + } catch (error) { + const message = error instanceof Error ? error.message : '重试失败' + createApiError(event, 'INVALID_REQUEST', message, 400) + } + + const updated = getBackupJob(id) + return { job: updated ? serializeBackupJob(updated) : null } +}) diff --git a/server/api/admin/backup/jobs/index.get.ts b/server/api/admin/backup/jobs/index.get.ts new file mode 100644 index 0000000..2f939f4 --- /dev/null +++ b/server/api/admin/backup/jobs/index.get.ts @@ -0,0 +1,36 @@ +import { requireAdminAuth } from '../../../../utils/access' +import { serializeBackupJob } from '../../../../utils/backup/api' +import { + getActiveBackupJob, + getRunningBackupJob, + listBackupJobsPage, + recoverInterruptedBackupJobs +} from '../../../../utils/backup/jobs' +import { isBackupRunnerBusy } from '../../../../utils/backup/runner' + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + if (getRunningBackupJob() && !isBackupRunnerBusy()) { + recoverInterruptedBackupJobs() + } + const query = getQuery(event) + const pageSize = Math.min(50, Math.max(1, Number(query.pageSize) || 10)) + const pageNum = Math.max(1, Number(query.pageNum) || Number(query.page) || 1) + const { jobs, total } = listBackupJobsPage(pageNum, pageSize) + const totalPages = Math.max(1, Math.ceil(total / pageSize)) + const page = total > 0 ? Math.min(pageNum, totalPages) : 1 + const slice = page === pageNum + ? jobs + : listBackupJobsPage(page, pageSize).jobs + + const activeJob = getActiveBackupJob() + + return { + jobs: slice.map(serializeBackupJob), + total, + page, + pageSize, + totalPages, + activeJob: activeJob ? serializeBackupJob(activeJob) : null + } +}) diff --git a/server/api/admin/backup/restore.post.ts b/server/api/admin/backup/restore.post.ts new file mode 100644 index 0000000..a0c22dc --- /dev/null +++ b/server/api/admin/backup/restore.post.ts @@ -0,0 +1,108 @@ +import type { H3Event } from 'h3' +import { requireAdminAuth } from '../../../utils/access' +import { createApiError } from '../../../utils/api-error' +import { serializeBackupJob } from '../../../utils/backup/api' +import { previewFullRestore } from '../../../utils/backup/full-restore' +import { startFullRestoreJob } from '../../../utils/backup/runner' +import { + BACKUP_ARCHIVE_EXT, + getBackupsDir, + getBackupStagingDir, + isSafeBackupFilename +} from '../../../utils/backup/paths' +import { join } from 'node:path' +import { promises as fs } from 'node:fs' + +interface RestoreBody { + archiveName?: string + conflictMode?: 'skip' | 'overwrite' + dryRun?: boolean +} + +async function resolveRestoreInput(event: H3Event): Promise<{ + archivePath: string + body: RestoreBody + cleanup?: () => Promise +}> { + const contentType = getHeader(event, 'content-type') ?? '' + + if (contentType.includes('multipart/form-data')) { + const form = await readMultipartFormData(event) + const filePart = form?.find(part => part.name === 'file' && part.data?.length) + if (!filePart?.data) { + createApiError(event, 'INVALID_REQUEST', '请上传备份文件', 400) + } + + const conflictField = form?.find(part => part.name === 'conflictMode')?.data?.toString('utf8') + const dryRunField = form?.find(part => part.name === 'dryRun')?.data?.toString('utf8') + const dryRun = dryRunField === 'true' + + if (dryRun) { + const tempDir = getBackupStagingDir(`upload-preview-${Date.now()}`) + await fs.mkdir(tempDir, { recursive: true }) + const archivePath = join(tempDir, 'package.phost.tar.gz') + await fs.writeFile(archivePath, filePart.data) + return { + archivePath, + body: { + conflictMode: conflictField === 'skip' ? 'skip' : 'overwrite', + dryRun: true + }, + cleanup: async () => { + await fs.rm(tempDir, { recursive: true, force: true }).catch(() => {}) + } + } + } + + await fs.mkdir(getBackupsDir(), { recursive: true }) + const safeName = `upload-${Date.now()}${BACKUP_ARCHIVE_EXT}` + const archivePath = join(getBackupsDir(), safeName) + await fs.writeFile(archivePath, filePart.data) + return { + archivePath, + body: { + conflictMode: conflictField === 'skip' ? 'skip' : 'overwrite', + dryRun: false + } + } + } + + const body = await readBody(event) + if (!body?.archiveName || !isSafeBackupFilename(body.archiveName)) { + createApiError(event, 'INVALID_REQUEST', '请选择有效的备份文件', 400) + } + const archivePath = join(getBackupsDir(), body.archiveName) + try { + await fs.access(archivePath) + } catch { + createApiError(event, 'INVALID_REQUEST', '备份文件不存在', 400) + } + return { archivePath, body } +} + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + + const { archivePath, body, cleanup } = await resolveRestoreInput(event) + + const conflictMode = body.conflictMode === 'skip' ? 'skip' : 'overwrite' + + if (body.dryRun) { + try { + const preview = await previewFullRestore(archivePath) + return { preview } + } finally { + await cleanup?.() + } + } + + try { + const job = startFullRestoreJob(archivePath, conflictMode) + return { job: serializeBackupJob(job) } + } catch (error) { + if (error instanceof Error && error.message === 'BACKUP_JOB_RUNNING') { + createApiError(event, 'CONFLICT', '已有备份或迁移任务正在运行', 409) + } + throw error + } +}) diff --git a/server/api/admin/storage/sync.post.ts b/server/api/admin/storage/sync.post.ts new file mode 100644 index 0000000..6d2f48c --- /dev/null +++ b/server/api/admin/storage/sync.post.ts @@ -0,0 +1,50 @@ +import { requireAdminAuth } from '../../../utils/access' +import { createApiError } from '../../../utils/api-error' +import { serializeBackupJob } from '../../../utils/backup/api' +import { previewBackendSync } from '../../../utils/backup/backend-sync' +import { startBackendSyncJob } from '../../../utils/backup/runner' + +interface SyncBody { + fromBackendId?: string + toBackendId?: string + deleteSource?: boolean + setDefault?: boolean + dryRun?: boolean +} + +export default defineEventHandler(async (event) => { + await requireAdminAuth(event) + const body = await readBody(event) + + const fromBackendId = body?.fromBackendId?.trim() ?? '' + const toBackendId = body?.toBackendId?.trim() ?? '' + if (!fromBackendId || !toBackendId) { + createApiError(event, 'INVALID_REQUEST', '请选择源与目标存储后端', 400) + } + + const options = { + fromBackendId, + toBackendId, + deleteSource: Boolean(body?.deleteSource), + setDefault: Boolean(body?.setDefault), + dryRun: Boolean(body?.dryRun) + } + + try { + if (options.dryRun) { + const preview = previewBackendSync(options) + return { preview } + } + + const job = startBackendSyncJob(options) + return { job: serializeBackupJob(job) } + } catch (error) { + if (error instanceof Error) { + if (error.message === 'BACKUP_JOB_RUNNING') { + createApiError(event, 'CONFLICT', '已有备份或迁移任务正在运行', 409) + } + createApiError(event, 'INVALID_REQUEST', error.message, 400) + } + throw error + } +}) diff --git a/server/api/setup/restore.post.ts b/server/api/setup/restore.post.ts new file mode 100644 index 0000000..7f8c393 --- /dev/null +++ b/server/api/setup/restore.post.ts @@ -0,0 +1,36 @@ +import { createApiError } from '../../utils/api-error' +import { isInitialized } from '../../utils/auth' +import { serializeBackupJob } from '../../utils/backup/api' +import { startFullRestoreJob } from '../../utils/backup/runner' +import { BACKUP_ARCHIVE_EXT, getBackupsDir } from '../../utils/backup/paths' +import { join } from 'node:path' +import { promises as fs } from 'node:fs' + +export default defineEventHandler(async (event) => { + if (isInitialized()) { + createApiError(event, 'FORBIDDEN', '系统已初始化,请在存储页恢复备份', 403) + } + + const form = await readMultipartFormData(event) + const filePart = form?.find(part => part.name === 'file' && part.data?.length) + if (!filePart?.data) { + createApiError(event, 'INVALID_REQUEST', '请上传备份文件', 400) + } + + await fs.mkdir(getBackupsDir(), { recursive: true }) + const archivePath = join(getBackupsDir(), `setup-restore-${Date.now()}${BACKUP_ARCHIVE_EXT}`) + await fs.writeFile(archivePath, filePart.data) + + try { + const job = startFullRestoreJob(archivePath, 'overwrite') + return { + job: serializeBackupJob(job), + message: '恢复任务已开始,完成后请使用备份中的管理员账号登录' + } + } catch (error) { + if (error instanceof Error && error.message === 'BACKUP_JOB_RUNNING') { + createApiError(event, 'CONFLICT', '已有备份或迁移任务正在运行', 409) + } + throw error + } +}) diff --git a/server/api/setup/restore/[id].get.ts b/server/api/setup/restore/[id].get.ts new file mode 100644 index 0000000..4126750 --- /dev/null +++ b/server/api/setup/restore/[id].get.ts @@ -0,0 +1,17 @@ +import { createApiError } from '../../../utils/api-error' +import { serializeBackupJob } from '../../../utils/backup/api' +import { getBackupJob } from '../../../utils/backup/jobs' + +export default defineEventHandler((event) => { + const id = getRouterParam(event, 'id') + if (!id) { + createApiError(event, 'INVALID_REQUEST', '缺少任务 ID', 400) + } + + const job = getBackupJob(id) + if (!job || job.type !== 'full_restore') { + createApiError(event, 'INVALID_REQUEST', '任务不存在', 404) + } + + return { job: serializeBackupJob(job) } +}) diff --git a/server/cli/backup-cli-loader.mjs b/server/cli/backup-cli-loader.mjs new file mode 100644 index 0000000..9922e6a --- /dev/null +++ b/server/cli/backup-cli-loader.mjs @@ -0,0 +1,14 @@ +import { createJiti } from 'jiti' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +const root = join(dirname(fileURLToPath(import.meta.url)), '..') + +export const jiti = createJiti(import.meta.url, { + interopDefault: true, + moduleCache: false +}) + +export function loadServerModule(path) { + return jiti(join(root, path)) +} diff --git a/server/cli/backup-export.mjs b/server/cli/backup-export.mjs new file mode 100644 index 0000000..899ea28 --- /dev/null +++ b/server/cli/backup-export.mjs @@ -0,0 +1,47 @@ +/** + * Export a full PicHost site backup (.phost.tar.gz). + * + * Usage: + * node server/cli/backup-export.mjs + * + * Docker: + * docker exec pichost backup-export + */ +import { readFileSync } from 'node:fs' +import { join } from 'node:path' +import { loadServerModule } from './backup-cli-loader.mjs' + +const { ensureBackupSchema } = loadServerModule('utils/backup/schema.ts') +const { createBackupJob, getBackupJob } = loadServerModule('utils/backup/jobs.ts') +const { runFullExportJob } = loadServerModule('utils/backup/full-export.ts') + +function readAppVersion() { + try { + const pkg = JSON.parse(readFileSync(join(process.cwd(), 'package.json'), 'utf8')) + return String(pkg.version ?? '0.0.0') + } catch { + return '0.0.0' + } +} + +async function main() { + ensureBackupSchema() + const job = createBackupJob({ + type: 'full_export', + message: 'CLI 导出' + }) + + await runFullExportJob(job.id, readAppVersion()) + const done = getBackupJob(job.id) + if (!done || done.status !== 'done') { + console.error(`[PicHost] Export failed: ${done?.error ?? done?.message ?? 'unknown error'}`) + process.exit(1) + } + + console.log(`[PicHost] Export complete: ${done.outputPath}`) +} + +main().catch((error) => { + console.error(`[PicHost] Export error: ${error instanceof Error ? error.message : String(error)}`) + process.exit(1) +}) diff --git a/server/cli/backup-restore.mjs b/server/cli/backup-restore.mjs new file mode 100644 index 0000000..b5fa7ed --- /dev/null +++ b/server/cli/backup-restore.mjs @@ -0,0 +1,65 @@ +/** + * Restore PicHost from a .phost.tar.gz backup. + * + * Usage: + * node server/cli/backup-restore.mjs [--overwrite] + * + * Docker: + * docker exec pichost backup-restore /app/data/backups/pichost-xxx.phost.tar.gz + */ +import { access } from 'node:fs/promises' +import { resolve } from 'node:path' +import { loadServerModule } from './backup-cli-loader.mjs' + +const { ensureBackupSchema } = loadServerModule('utils/backup/schema.ts') +const { createBackupJob, getBackupJob } = loadServerModule('utils/backup/jobs.ts') +const { previewFullRestore } = loadServerModule('utils/backup/full-restore.ts') +const { runFullRestoreJob } = loadServerModule('utils/backup/full-restore.ts') + +function usage() { + console.error('Usage: backup-restore [--overwrite]') + process.exit(1) +} + +const args = process.argv.slice(2).filter(arg => arg !== '--') +if (!args.length) usage() + +const overwrite = args.includes('--overwrite') +const archiveArg = args.find(arg => arg !== '--overwrite') +if (!archiveArg) usage() + +const archivePath = resolve(archiveArg) +const conflictMode = overwrite ? 'overwrite' : 'skip' + +async function main() { + try { + await access(archivePath) + } catch { + console.error(`[PicHost] Backup file not found: ${archivePath}`) + process.exit(1) + } + + ensureBackupSchema() + const preview = await previewFullRestore(archivePath) + console.log(`[PicHost] Preview: ${preview.imageCount} images, ${preview.newImages} new, ${preview.conflictingImages} conflicts`) + + const job = createBackupJob({ + type: 'full_restore', + message: 'CLI 恢复', + payload: { archivePath, conflictMode } + }) + + await runFullRestoreJob(job.id, archivePath, { conflictMode }) + const done = getBackupJob(job.id) + if (!done || done.status !== 'done') { + console.error(`[PicHost] Restore failed: ${done?.error ?? done?.message ?? 'unknown error'}`) + process.exit(1) + } + + console.log('[PicHost] Restore complete. Restart PicHost if it is running.') +} + +main().catch((error) => { + console.error(`[PicHost] Restore error: ${error instanceof Error ? error.message : String(error)}`) + process.exit(1) +}) diff --git a/server/cli/migrate-to-single-images.mjs b/server/cli/migrate-to-single-images.mjs deleted file mode 100644 index 56a4594..0000000 --- a/server/cli/migrate-to-single-images.mjs +++ /dev/null @@ -1,166 +0,0 @@ -/** - * 将 data/ 下与 images 并列的顶层目录中的图片迁入 data/images/{原目录名}/... - * - * 用法: - * node server/cli/migrate-to-single-images.mjs # dry-run - * node server/cli/migrate-to-single-images.mjs --apply # 执行迁移 - * - * Docker: - * docker exec pichost migrate - * docker exec pichost migrate --apply - * - * 输出 data/mapping.json(旧 key → 新 key)供替换外链。执行后重启 PicHost。 - */ -import { promises as fs } from 'node:fs' -import { join, relative, dirname } from 'node:path' - -const DATA_DIR = process.env.DATA_DIR || join(process.cwd(), 'data') -const IMAGES_DIR = join(DATA_DIR, 'images') - -const IMAGE_EXT = /\.(jpg|jpeg|png|webp|gif|svg|ico)$/i -const SKIP_TOP_LEVEL_DIRS = new Set(['images']) - -const apply = process.argv.includes('--apply') - -async function exists(path) { - try { - await fs.access(path) - return true - } catch { - return false - } -} - -async function collectImageFiles(dir) { - const files = [] - const entries = await fs.readdir(dir, { withFileTypes: true }) - for (const entry of entries) { - const full = join(dir, entry.name) - if (entry.isDirectory()) { - files.push(...await collectImageFiles(full)) - } else if ( - entry.isFile() - && IMAGE_EXT.test(entry.name) - && !entry.name.endsWith('.meta.json') - ) { - files.push(full) - } - } - return files -} - -async function dirHasAnyFiles(dir) { - let entries - try { - entries = await fs.readdir(dir, { withFileTypes: true }) - } catch { - return false - } - for (const entry of entries) { - if (entry.isFile()) return true - if (entry.isDirectory() && await dirHasAnyFiles(join(dir, entry.name))) { - return true - } - } - return false -} - -async function main() { - if (!await exists(DATA_DIR)) { - console.error(`数据目录不存在: ${DATA_DIR}`) - process.exit(1) - } - - const topEntries = await fs.readdir(DATA_DIR, { withFileTypes: true }) - const sourceDirs = topEntries - .filter(entry => entry.isDirectory() && !SKIP_TOP_LEVEL_DIRS.has(entry.name)) - .map(entry => ({ name: entry.name, path: join(DATA_DIR, entry.name) })) - - if (!sourceDirs.length) { - console.log('未发现需迁移的顶层目录(data/ 下除 images 外无其它目录)') - return - } - - const mapping = {} - const plan = [] - - for (const { name, path } of sourceDirs) { - const files = await collectImageFiles(path) - for (const filePath of files) { - const rel = relative(path, filePath).replace(/\\/g, '/') - const newKey = `images/${name}/${rel}` - const newDisk = join(IMAGES_DIR, name, rel) - const oldKey = `${name}/${rel}` - mapping[oldKey] = newKey - plan.push({ from: filePath, to: newDisk, oldKey, newKey, sourceName: name }) - } - } - - if (!plan.length) { - console.log('未发现需迁移的图片(已扫描 data/ 下除 images 外的顶层目录)') - return - } - - const scanned = sourceDirs.map(dir => dir.name).join(', ') - console.log(`已扫描顶层目录: ${scanned}`) - console.log(`模式: ${apply ? 'APPLY' : 'DRY-RUN'}`) - console.log(`待迁移 ${plan.length} 个文件:`) - for (const item of plan.slice(0, 20)) { - console.log(` ${item.oldKey} → ${item.newKey}`) - } - if (plan.length > 20) { - console.log(` … 另有 ${plan.length - 20} 个`) - } - - const mappingPath = join(DATA_DIR, 'mapping.json') - await fs.writeFile(mappingPath, JSON.stringify(mapping, null, 2)) - console.log(`已写入 ${mappingPath}`) - - if (!apply) { - console.log('未执行文件移动。确认后运行:') - console.log(' docker exec pichost migrate --apply') - console.log(' 或 npm run migrate -- --apply') - return - } - - await fs.mkdir(IMAGES_DIR, { recursive: true }) - - for (const item of plan) { - await fs.mkdir(dirname(item.to), { recursive: true }) - try { - await fs.rename(item.from, item.to) - } catch (error) { - if (error?.code === 'EXDEV') { - await fs.copyFile(item.from, item.to) - await fs.unlink(item.from) - } else { - throw error - } - } - const metaFrom = item.from + '.meta.json' - const metaTo = item.to + '.meta.json' - try { - await fs.rename(metaFrom, metaTo) - } catch { - // optional meta - } - } - - const sourceNames = [...new Set(plan.map(item => item.sourceName))] - for (const name of sourceNames) { - const path = join(DATA_DIR, name) - if (await dirHasAnyFiles(path)) { - console.log(`保留 ${name}/(仍有未迁移文件)`) - continue - } - await fs.rm(path, { recursive: true, force: true }) - console.log(`已移除空目录 ${name}/`) - } - - console.log('迁移完成。请重启 PicHost。') -} - -main().catch((error) => { - console.error(error) - process.exit(1) -}) diff --git a/server/cli/storage-sync.mjs b/server/cli/storage-sync.mjs new file mode 100644 index 0000000..8ea7b92 --- /dev/null +++ b/server/cli/storage-sync.mjs @@ -0,0 +1,72 @@ +/** + * Sync images between storage backends. + * + * Usage: + * node server/cli/storage-sync.mjs --from --to [--delete-source] [--set-default] [--dry-run] + * + * Docker: + * docker exec pichost storage-sync --from local --to s3-xxx + */ +import { loadServerModule } from './backup-cli-loader.mjs' + +const { ensureBackupSchema } = loadServerModule('utils/backup/schema.ts') +const { createBackupJob, getBackupJob } = loadServerModule('utils/backup/jobs.ts') +const { previewBackendSync, runBackendSyncJob } = loadServerModule('utils/backup/backend-sync.ts') + +function usage() { + console.error('Usage: storage-sync --from --to [--delete-source] [--set-default] [--dry-run]') + process.exit(1) +} + +function readArg(name) { + const index = process.argv.indexOf(name) + if (index < 0 || index + 1 >= process.argv.length) return '' + return process.argv[index + 1]?.trim() ?? '' +} + +const fromBackendId = readArg('--from') +const toBackendId = readArg('--to') +const deleteSource = process.argv.includes('--delete-source') +const setDefault = process.argv.includes('--set-default') +const dryRun = process.argv.includes('--dry-run') + +if (!fromBackendId || !toBackendId) usage() + +const options = { + fromBackendId, + toBackendId, + deleteSource, + setDefault, + dryRun +} + +async function main() { + ensureBackupSchema() + + if (dryRun) { + const preview = previewBackendSync(options) + console.log(`[PicHost] Dry run: ${preview.imageCount} images, ${preview.imageBytes} bytes`) + console.log(`[PicHost] From ${preview.fromBackendId} → ${preview.toBackendId}`) + return + } + + const job = createBackupJob({ + type: 'backend_sync', + message: 'CLI 同步', + payload: options + }) + + await runBackendSyncJob(job.id, options) + const done = getBackupJob(job.id) + if (!done || done.status !== 'done') { + console.error(`[PicHost] Sync failed: ${done?.error ?? done?.message ?? 'unknown error'}`) + process.exit(1) + } + + console.log(`[PicHost] Sync complete: ${done.progress}/${done.total}`) +} + +main().catch((error) => { + console.error(`[PicHost] Sync error: ${error instanceof Error ? error.message : String(error)}`) + process.exit(1) +}) diff --git a/server/plugins/backup-jobs.ts b/server/plugins/backup-jobs.ts new file mode 100644 index 0000000..b5c19ac --- /dev/null +++ b/server/plugins/backup-jobs.ts @@ -0,0 +1,8 @@ +import { recoverInterruptedBackupJobs } from '../utils/backup/jobs' + +export default defineNitroPlugin(() => { + const recovered = recoverInterruptedBackupJobs() + if (recovered > 0) { + console.log(`[PicHost] Recovered ${recovered} interrupted backup job(s)`) + } +}) diff --git a/server/utils/backup/api.ts b/server/utils/backup/api.ts new file mode 100644 index 0000000..639ee79 --- /dev/null +++ b/server/utils/backup/api.ts @@ -0,0 +1,31 @@ +import type { BackupJob } from '../../utils/backup/jobs' +import { BACKUP_ARCHIVE_EXT } from '../../utils/backup/paths' + +export function serializeBackupJob(job: BackupJob) { + const archiveName = job.outputPath + ? job.outputPath.split(/[/\\]/).pop() + : typeof job.payload.archiveName === 'string' + ? job.payload.archiveName + : null + + return { + id: job.id, + type: job.type, + status: job.status, + progress: job.progress, + total: job.total, + message: job.message, + payload: job.payload, + outputPath: job.outputPath, + archiveName, + downloadable: Boolean( + job.type === 'full_export' + && job.status === 'done' + && job.outputPath + && archiveName?.endsWith(BACKUP_ARCHIVE_EXT) + ), + error: job.error, + createdAt: job.createdAt, + finishedAt: job.finishedAt + } +} diff --git a/server/utils/backup/backend-sync.ts b/server/utils/backup/backend-sync.ts new file mode 100644 index 0000000..ed7ee1d --- /dev/null +++ b/server/utils/backup/backend-sync.ts @@ -0,0 +1,213 @@ +import { promises as fs } from 'node:fs' +import { join } from 'node:path' +import { + createBackendInstance, + getStorageBackendRow, + setDefaultBackend +} from '../storage-backends' +import { + getImageIndexAsStored, + listImageIndexRowsByBackend, + updateImageBackendId +} from '../image-index' +import { createImageStream } from '../storage' +import { getBackupJob, markJobDone, markJobFailed, updateBackupJob } from './jobs' +import { getBackupStagingDir } from './paths' + +export interface BackendSyncOptions { + fromBackendId: string + toBackendId: string + deleteSource?: boolean + setDefault?: boolean + dryRun?: boolean +} + +export interface BackendSyncPreview { + imageCount: number + imageBytes: number + fromBackendId: string + toBackendId: string +} + +export function previewBackendSync(options: BackendSyncOptions): BackendSyncPreview { + const fromRow = getStorageBackendRow(options.fromBackendId) + const toRow = getStorageBackendRow(options.toBackendId) + if (!fromRow) { + throw new Error('源存储后端不存在') + } + if (!toRow) { + throw new Error('目标存储后端不存在') + } + if (!toRow.enabled) { + throw new Error('目标存储后端未启用') + } + if (options.fromBackendId === options.toBackendId) { + throw new Error('源与目标存储后端不能相同') + } + + const rows = listImageIndexRowsByBackend(options.fromBackendId) + const imageBytes = rows.reduce((sum, row) => sum + row.size, 0) + return { + imageCount: rows.length, + imageBytes, + fromBackendId: options.fromBackendId, + toBackendId: options.toBackendId + } +} + +async function streamToBuffer(stream: NodeJS.ReadableStream): Promise { + const chunks: Buffer[] = [] + for await (const chunk of stream) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)) + } + return Buffer.concat(chunks) +} + +export async function runBackendSyncJob( + jobId: string, + options: BackendSyncOptions +): Promise { + const preview = previewBackendSync(options) + if (options.dryRun) { + markJobDone(jobId, { + message: '预检完成', + payload: { preview } + }) + return + } + + const fromRow = getStorageBackendRow(options.fromBackendId)! + const toRow = getStorageBackendRow(options.toBackendId)! + const fromBackend = createBackendInstance(fromRow) + const toBackend = createBackendInstance(toRow) + + const rows = listImageIndexRowsByBackend(options.fromBackendId) + const failedKeys: string[] = [] + const failedLogPath = join(getBackupStagingDir(jobId), 'failed_keys.jsonl') + + updateBackupJob(jobId, { + total: rows.length, + progress: 0, + message: '正在同步图片…' + }) + + let processed = 0 + for (const row of rows) { + try { + const stream = await createImageStream(row.key) + const bytes = await streamToBuffer(stream) + await toBackend.put(row.key, bytes, { + originalName: row.original_name, + uploadedAt: row.uploaded_at, + contentType: row.content_type, + size: row.size, + userId: row.user_id + }) + + const head = await toBackend.head(row.key) + if (!head) { + throw new Error('目标后端写入校验失败') + } + + updateImageBackendId(row.key, options.toBackendId) + + if (options.deleteSource) { + await fromBackend.delete(row.key) + } + } catch (error) { + failedKeys.push(row.key) + await fs.mkdir(join(failedLogPath, '..'), { recursive: true }).catch(() => {}) + await fs.appendFile( + failedLogPath, + `${row.key}\t${error instanceof Error ? error.message : 'unknown'}\n`, + 'utf8' + ).catch(() => {}) + } + + processed += 1 + updateBackupJob(jobId, { + progress: processed, + message: `正在同步 ${processed}/${rows.length}…` + }) + } + + if (options.setDefault) { + setDefaultBackend(options.toBackendId) + } + + if (failedKeys.length > 0) { + markJobFailed(jobId, `${failedKeys.length} 张图片同步失败`, `部分失败:${failedKeys.length}/${rows.length}`) + updateBackupJob(jobId, { + payload: { failedKeys, failedLogPath, preview } + }) + return + } + + markJobDone(jobId, { + message: '同步完成', + payload: { preview, synced: rows.length } + }) +} + +export async function retryFailedBackendSync(jobId: string): Promise { + const failedLogPath = join(getBackupStagingDir(jobId), 'failed_keys.jsonl') + let raw: string + try { + raw = await fs.readFile(failedLogPath, 'utf8') + } catch { + throw new Error('没有可重试的失败记录') + } + + const keys = raw + .split('\n') + .map(line => line.split('\t')[0]?.trim()) + .filter((key): key is string => Boolean(key)) + + const job = getBackupJob(jobId) + if (!job) throw new Error('任务不存在') + + const fromBackendId = String(job.payload.fromBackendId ?? '') + const toBackendId = String(job.payload.toBackendId ?? '') + const deleteSource = Boolean(job.payload.deleteSource) + const fromRow = getStorageBackendRow(fromBackendId) + const toRow = getStorageBackendRow(toBackendId) + if (!fromRow || !toRow) throw new Error('存储后端配置无效') + + const fromBackend = createBackendInstance(fromRow) + const toBackend = createBackendInstance(toRow) + + const stillFailed: string[] = [] + for (const key of keys) { + const row = getImageIndexAsStored(key) + if (!row) continue + try { + const stream = await createImageStream(key) + const bytes = await streamToBuffer(stream) + await toBackend.put(key, bytes, { + originalName: row.originalName, + uploadedAt: row.uploadedAt, + contentType: row.contentType, + size: row.size, + userId: row.userId + }) + updateImageBackendId(key, toBackendId) + if (deleteSource) { + await fromBackend.delete(key) + } + } catch { + stillFailed.push(key) + } + } + + if (stillFailed.length > 0) { + await fs.writeFile( + failedLogPath, + stillFailed.map(key => `${key}\tretry failed\n`).join(''), + 'utf8' + ) + throw new Error(`仍有 ${stillFailed.length} 张图片同步失败`) + } + + await fs.rm(failedLogPath, { force: true }).catch(() => {}) + markJobDone(jobId, { message: '失败项重试完成' }) +} diff --git a/server/utils/backup/db-snapshot.ts b/server/utils/backup/db-snapshot.ts new file mode 100644 index 0000000..60295d9 --- /dev/null +++ b/server/utils/backup/db-snapshot.ts @@ -0,0 +1,66 @@ +import { copyFile, mkdir, rename, rm } from 'node:fs/promises' +import { join } from 'node:path' +import { closeDb, getDb, setDbReplacing } from '../db' +import { getDataDir } from '../data-dir' + +async function retireCurrentDatabaseFiles(dbPath: string, stamp: number): Promise { + const targets = [ + dbPath, + `${dbPath}-wal`, + `${dbPath}-shm` + ] + for (const path of targets) { + try { + await rename(path, `${path}.bak-${stamp}`) + } catch { + // Missing sidecar files are fine. + } + } +} + +async function cleanupRetiredDatabaseFiles(dbPath: string, stamp: number): Promise { + const paths = [ + dbPath, + `${dbPath}-wal`, + `${dbPath}-shm` + ] + for (const path of paths) { + await rm(`${path}.bak-${stamp}`, { force: true }).catch(() => {}) + } +} + +function sqlitePathLiteral(path: string): string { + return path.replace(/\\/g, '/').replace(/'/g, '\'\'') +} + +export function checkpointDatabase(): void { + getDb().exec('PRAGMA wal_checkpoint(TRUNCATE)') +} + +/** Consistent snapshot while the app keeps the DB open (safe on Windows). */ +export async function copyDatabaseSnapshot(targetPath: string): Promise { + await mkdir(join(targetPath, '..'), { recursive: true }) + checkpointDatabase() + const escaped = sqlitePathLiteral(targetPath) + getDb().exec(`VACUUM INTO '${escaped}'`) +} + +export async function replaceDatabaseFromSnapshot(sourcePath: string): Promise { + const dataDir = getDataDir() + const target = join(dataDir, 'pichost.db') + const stamp = Date.now() + + checkpointDatabase() + closeDb() + setDbReplacing(true) + + try { + await retireCurrentDatabaseFiles(target, stamp) + await copyFile(sourcePath, target) + } finally { + setDbReplacing(false) + const reopened = getDb() + reopened.exec('PRAGMA journal_mode=WAL') + void cleanupRetiredDatabaseFiles(target, stamp) + } +} diff --git a/server/utils/backup/full-export.ts b/server/utils/backup/full-export.ts new file mode 100644 index 0000000..4870003 --- /dev/null +++ b/server/utils/backup/full-export.ts @@ -0,0 +1,134 @@ +import { createWriteStream, promises as fs } from 'node:fs' +import { join } from 'node:path' +import { pipeline } from 'node:stream/promises' +import * as tar from 'tar' +import { getImageTotals, listAllImageIndexRows } from '../image-index' +import { + listStorageBackendRows +} from '../storage-backends' +import { parseS3Config } from '../storage/s3' +import { createImageStream } from '../storage' +import { copyDatabaseSnapshot } from './db-snapshot' +import { markJobDone, markJobFailed, updateBackupJob } from './jobs' +import { BACKUP_FORMAT_VERSION, type BackupManifest, type StorageBackendMetaExport } from './manifest' +import { + BACKUP_ARCHIVE_EXT, + getBackupStagingDir, + getBackupsDir +} from './paths' +import type { StorageBackendRow } from '../storage/types' + +function formatArchiveName(jobId: string): string { + return `pichost-${jobId}${BACKUP_ARCHIVE_EXT}` +} + +function buildStorageBackendsMeta(): StorageBackendMetaExport[] { + return listStorageBackendRows().map((row: StorageBackendRow) => ({ + id: row.id, + name: row.name, + type: row.type, + config: row.type === 's3' ? (parseS3Config(row.config_json) ?? {}) : {}, + servingMode: row.serving_mode, + publicUrl: row.public_url, + quotaBytes: row.quota_bytes, + enabled: row.enabled === 1, + isDefault: row.is_default === 1, + sortOrder: row.sort_order + })) +} + +async function writeStreamToFile(stream: NodeJS.ReadableStream, filePath: string): Promise { + await fs.mkdir(join(filePath, '..'), { recursive: true }) + await pipeline(stream, createWriteStream(filePath)) +} + +export async function runFullExportJob(jobId: string, appVersion: string): Promise { + const stagingRoot = getBackupStagingDir(jobId) + const archiveName = formatArchiveName(jobId) + const archivePath = join(getBackupsDir(), archiveName) + + try { + await fs.rm(stagingRoot, { recursive: true, force: true }) + await fs.mkdir(stagingRoot, { recursive: true }) + await fs.mkdir(getBackupsDir(), { recursive: true }) + + const totals = getImageTotals() + const rows = listAllImageIndexRows() + updateBackupJob(jobId, { + total: totals.count + 1, + message: '正在备份数据库…' + }) + + await copyDatabaseSnapshot(join(stagingRoot, 'database', 'pichost.sqlite')) + updateBackupJob(jobId, { progress: 1, message: '正在写入备份元数据…' }) + + const manifest: BackupManifest = { + formatVersion: BACKUP_FORMAT_VERSION, + appVersion, + createdAt: new Date().toISOString(), + imageCount: totals.count, + imageBytes: totals.bytes, + includesDatabase: true + } + await fs.writeFile( + join(stagingRoot, 'manifest.json'), + JSON.stringify(manifest, null, 2), + 'utf8' + ) + + const metaDir = join(stagingRoot, 'meta') + await fs.mkdir(metaDir, { recursive: true }) + await fs.writeFile( + join(metaDir, 'storage_backends.json'), + JSON.stringify(buildStorageBackendsMeta(), null, 2), + 'utf8' + ) + await fs.writeFile( + join(metaDir, 'readme.txt'), + [ + 'PicHost site backup package.', + 'Restore via Storage → Backup & migration in the admin UI.', + 'Object storage secrets are not included; re-enter keys after restore.' + ].join('\n'), + 'utf8' + ) + + let processed = 1 + for (const row of rows) { + updateBackupJob(jobId, { + progress: processed, + message: `正在导出图片 ${processed}/${totals.count + 1}…` + }) + + const blobPath = join(stagingRoot, 'blobs', row.key) + const stream = await createImageStream(row.key) + await writeStreamToFile(stream, blobPath) + processed += 1 + updateBackupJob(jobId, { progress: processed }) + } + + updateBackupJob(jobId, { message: '正在压缩备份包…' }) + await tar.c( + { + gzip: true, + file: archivePath, + cwd: stagingRoot, + portable: true + }, + ['.'] + ) + + await fs.rm(stagingRoot, { recursive: true, force: true }) + + markJobDone(jobId, { + message: '备份完成', + outputPath: archivePath, + payload: { archiveName } + }) + } catch (error) { + await fs.rm(stagingRoot, { recursive: true, force: true }).catch(() => {}) + const message = error instanceof Error ? error.message : '导出失败' + markJobFailed(jobId, message) + throw error + } +} diff --git a/server/utils/backup/full-restore.ts b/server/utils/backup/full-restore.ts new file mode 100644 index 0000000..9c8fb1a --- /dev/null +++ b/server/utils/backup/full-restore.ts @@ -0,0 +1,182 @@ +import { createReadStream, promises as fs } from 'node:fs' +import { join, relative } from 'node:path' +import { pipeline } from 'node:stream/promises' +import * as tar from 'tar' +import { getImageIndexRow } from '../image-index' +import { getActiveBackend } from '../storage/resolver' +import { replaceDatabaseFromSnapshot } from './db-snapshot' +import { markJobDone, markJobFailed, restoreBackupJobsAfterReplace, snapshotBackupJobs, updateBackupJob } from './jobs' +import { + BACKUP_FORMAT_VERSION, + type BackupManifest, + type BackupRestorePreview +} from './manifest' +import { getBackupStagingDir } from './paths' +import { ensureDefaultBackends } from '../storage-backends' + +async function walkFiles(dir: string): Promise { + const entries = await fs.readdir(dir, { withFileTypes: true }) + const files: string[] = [] + for (const entry of entries) { + const full = join(dir, entry.name) + if (entry.isDirectory()) { + files.push(...await walkFiles(full)) + } else if (entry.isFile()) { + files.push(full) + } + } + return files +} + +async function extractArchive(archivePath: string, targetDir: string): Promise { + await fs.rm(targetDir, { recursive: true, force: true }).catch(() => {}) + await fs.mkdir(targetDir, { recursive: true }) + await tar.x({ + file: archivePath, + cwd: targetDir, + gzip: true + }) +} + +async function readManifest(stagingRoot: string): Promise { + const raw = await fs.readFile(join(stagingRoot, 'manifest.json'), 'utf8') + const manifest = JSON.parse(raw) as BackupManifest + if (manifest.formatVersion !== BACKUP_FORMAT_VERSION) { + throw new Error(`不支持的备份格式版本:${manifest.formatVersion}`) + } + return manifest +} + +export async function previewFullRestore(archivePath: string): Promise { + const stagingRoot = getBackupStagingDir(`preview-${Date.now()}`) + try { + await extractArchive(archivePath, stagingRoot) + const manifest = await readManifest(stagingRoot) + const blobsRoot = join(stagingRoot, 'blobs') + let blobFiles: string[] = [] + try { + blobFiles = await walkFiles(blobsRoot) + } catch { + blobFiles = [] + } + + let conflictingImages = 0 + for (const file of blobFiles) { + const rel = relative(blobsRoot, file).replace(/\\/g, '/') + if (getImageIndexRow(rel)) { + conflictingImages += 1 + } + } + + return { + imageCount: manifest.imageCount, + imageBytes: manifest.imageBytes, + newImages: Math.max(0, blobFiles.length - conflictingImages), + conflictingImages, + formatVersion: manifest.formatVersion, + appVersion: manifest.appVersion, + createdAt: manifest.createdAt + } + } finally { + await fs.rm(stagingRoot, { recursive: true, force: true }).catch(() => {}) + } +} + +export async function runFullRestoreJob( + jobId: string, + archivePath: string, + options: { conflictMode: 'skip' | 'overwrite' } +): Promise { + const stagingRoot = getBackupStagingDir(jobId) + const preservedJobs = snapshotBackupJobs(50) + + try { + updateBackupJob(jobId, { message: '正在解压备份包…', total: 0, progress: 0 }) + await extractArchive(archivePath, stagingRoot) + const manifest = await readManifest(stagingRoot) + + const dbPath = join(stagingRoot, 'database', 'pichost.sqlite') + await fs.access(dbPath) + + updateBackupJob(jobId, { message: '正在恢复数据库…' }) + await replaceDatabaseFromSnapshot(dbPath) + ensureDefaultBackends() + restoreBackupJobsAfterReplace(preservedJobs) + updateBackupJob(jobId, { + status: 'running', + message: '正在恢复图片…', + progress: 0, + total: 0 + }) + + const blobsRoot = join(stagingRoot, 'blobs') + const blobFiles = await walkFiles(blobsRoot) + const total = blobFiles.length + 1 + updateBackupJob(jobId, { total, progress: 1, message: '正在恢复图片…' }) + + const backend = await getActiveBackend() + let processed = 1 + + for (const file of blobFiles) { + const key = relative(blobsRoot, file).replace(/\\/g, '/') + const indexed = getImageIndexRow(key) + + if (!indexed && options.conflictMode === 'skip') { + processed += 1 + continue + } + + const bytes = await fs.readFile(file) + const meta = indexed + ? { + originalName: indexed.original_name, + uploadedAt: indexed.uploaded_at, + contentType: indexed.content_type, + size: indexed.size, + userId: indexed.user_id + } + : { + originalName: key.split('/').pop() ?? key, + uploadedAt: new Date().toISOString(), + contentType: 'application/octet-stream', + size: bytes.length, + userId: null + } + + if (options.conflictMode === 'overwrite' || !indexed) { + await backend.put(key, bytes, meta) + } + + processed += 1 + updateBackupJob(jobId, { + progress: processed, + message: `正在恢复图片 ${processed}/${total}…` + }) + } + + await fs.rm(stagingRoot, { recursive: true, force: true }) + + markJobDone(jobId, { + message: '恢复完成,请重新登录并在存储页检查对象存储密钥', + payload: { + restoredImages: blobFiles.length, + manifest + } + }) + } catch (error) { + await fs.rm(stagingRoot, { recursive: true, force: true }).catch(() => {}) + const message = error instanceof Error ? error.message : '恢复失败' + markJobFailed(jobId, message) + throw error + } +} + +export async function streamBlobToFile( + archivePath: string, + targetPath: string +): Promise { + await fs.mkdir(join(targetPath, '..'), { recursive: true }) + const readStream = createReadStream(archivePath) + const writeStream = (await import('node:fs')).createWriteStream(targetPath) + await pipeline(readStream, writeStream) +} diff --git a/server/utils/backup/index.ts b/server/utils/backup/index.ts new file mode 100644 index 0000000..51a545e --- /dev/null +++ b/server/utils/backup/index.ts @@ -0,0 +1,15 @@ +export { ensureBackupSchema } from './schema' +export * from './jobs' +export * from './paths' +export * from './manifest' +export * from './stats' +export { previewFullRestore } from './full-restore' +export { previewBackendSync } from './backend-sync' +export { + startFullExportJob, + startFullRestoreJob, + startBackendSyncJob, + isBackupRunnerBusy, + cancelBackupJob +} from './runner' +export { retryFailedBackendSync } from './backend-sync' diff --git a/server/utils/backup/jobs.ts b/server/utils/backup/jobs.ts new file mode 100644 index 0000000..3aeb43d --- /dev/null +++ b/server/utils/backup/jobs.ts @@ -0,0 +1,283 @@ +import { randomBytes } from 'node:crypto' +import { getDb } from '../db' +import { ensureBackupSchema } from './schema' + +export type BackupJobType = 'full_export' | 'full_restore' | 'backend_sync' +export type BackupJobStatus = 'pending' | 'running' | 'done' | 'failed' + +export interface BackupJob { + id: string + type: BackupJobType + status: BackupJobStatus + progress: number + total: number + message: string + payload: Record + outputPath: string | null + error: string | null + createdAt: string + finishedAt: string | null +} + +interface BackupJobRow { + id: string + type: BackupJobType + status: BackupJobStatus + progress: number + total: number + message: string + payload_json: string + output_path: string | null + error: string | null + created_at: string + finished_at: string | null +} + +function rowToJob(row: BackupJobRow): BackupJob { + const payload = (() => { + try { + return JSON.parse(row.payload_json) as Record + } catch { + return {} + } + })() + return { + id: row.id, + type: row.type, + status: row.status, + progress: row.progress, + total: row.total, + message: row.message, + payload, + outputPath: row.output_path, + error: row.error, + createdAt: row.created_at, + finishedAt: row.finished_at + } +} + +function generateJobId(): string { + const stamp = new Date().toISOString().replace(/[-:]/g, '').replace(/\..+/, '').slice(0, 15) + const suffix = randomBytes(3).toString('hex') + return `${stamp}-${suffix}` +} + +export function getRunningBackupJob(): BackupJob | null { + ensureBackupSchema() + const row = getDb().prepare(` + SELECT id, type, status, progress, total, message, payload_json, + output_path, error, created_at, finished_at + FROM backup_jobs + WHERE status = 'running' + LIMIT 1 + `).get() as BackupJobRow | undefined + return row ? rowToJob(row) : null +} + +export function getActiveBackupJob(): BackupJob | null { + ensureBackupSchema() + const row = getDb().prepare(` + SELECT id, type, status, progress, total, message, payload_json, + output_path, error, created_at, finished_at + FROM backup_jobs + WHERE status IN ('pending', 'running') + ORDER BY created_at DESC + LIMIT 1 + `).get() as BackupJobRow | undefined + return row ? rowToJob(row) : null +} + +export function createBackupJob(input: { + type: BackupJobType + total?: number + message?: string + payload?: Record +}): BackupJob { + ensureBackupSchema() + const id = generateJobId() + const now = new Date().toISOString() + const payloadJson = JSON.stringify(input.payload ?? {}) + + getDb().prepare(` + INSERT INTO backup_jobs + (id, type, status, progress, total, message, payload_json, output_path, error, created_at, finished_at) + VALUES (?, ?, 'pending', 0, ?, ?, ?, NULL, NULL, ?, NULL) + `).run( + id, + input.type, + input.total ?? 0, + input.message ?? '', + payloadJson, + now + ) + + return getBackupJob(id)! +} + +export function getBackupJob(id: string): BackupJob | null { + ensureBackupSchema() + const row = getDb().prepare(` + SELECT id, type, status, progress, total, message, payload_json, + output_path, error, created_at, finished_at + FROM backup_jobs + WHERE id = ? + `).get(id) as BackupJobRow | undefined + return row ? rowToJob(row) : null +} + +export function listBackupJobs(limit = 20): BackupJob[] { + return listBackupJobsPage(1, limit).jobs +} + +export function countBackupJobs(): number { + ensureBackupSchema() + const row = getDb().prepare('SELECT COUNT(*) AS count FROM backup_jobs').get() as { count: number } + return row.count +} + +export function listBackupJobsPage(page = 1, pageSize = 10): { jobs: BackupJob[], total: number } { + ensureBackupSchema() + const limit = Math.min(50, Math.max(1, pageSize)) + const safePage = Math.max(1, page) + const offset = (safePage - 1) * limit + const total = countBackupJobs() + const rows = getDb().prepare(` + SELECT id, type, status, progress, total, message, payload_json, + output_path, error, created_at, finished_at + FROM backup_jobs + ORDER BY created_at DESC + LIMIT ? OFFSET ? + `).all(limit, offset) as unknown as BackupJobRow[] + return { jobs: rows.map(rowToJob), total } +} + +/** Capture live task history before a full restore swaps the database file. */ +export function snapshotBackupJobs(limit = 50): BackupJob[] { + return listBackupJobs(limit) +} + +/** Restore task history after the database file was replaced from a backup package. */ +export function restoreBackupJobsAfterReplace(preserved: BackupJob[]): void { + ensureBackupSchema() + const db = getDb() + db.exec('BEGIN') + try { + db.prepare('DELETE FROM backup_jobs').run() + const insert = db.prepare(` + INSERT INTO backup_jobs + (id, type, status, progress, total, message, payload_json, output_path, error, created_at, finished_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `) + for (const job of preserved) { + insert.run( + job.id, + job.type, + job.status, + job.progress, + job.total, + job.message, + JSON.stringify(job.payload), + job.outputPath, + job.error, + job.createdAt, + job.finishedAt + ) + } + db.exec('COMMIT') + } catch (error) { + db.exec('ROLLBACK') + throw error + } +} + +/** Mark jobs left in `running` after a crash/restart so new work can start. */ +export function recoverInterruptedBackupJobs(): number { + ensureBackupSchema() + const finishedAt = new Date().toISOString() + const result = getDb().prepare(` + UPDATE backup_jobs + SET status = 'failed', + error = '任务中断(服务重启或异常退出)', + message = '任务已中断,请重试', + finished_at = ? + WHERE status = 'running' + `).run(finishedAt) + return Number(result.changes ?? 0) +} + +export function updateBackupJob( + id: string, + patch: Partial<{ + status: BackupJobStatus + progress: number + total: number + message: string + payload: Record + outputPath: string | null + error: string | null + finishedAt: string | null + }> +): void { + ensureBackupSchema() + const current = getBackupJob(id) + if (!current) return + + const next = { + status: patch.status ?? current.status, + progress: patch.progress ?? current.progress, + total: patch.total ?? current.total, + message: patch.message ?? current.message, + payload: patch.payload ?? current.payload, + outputPath: patch.outputPath !== undefined ? patch.outputPath : current.outputPath, + error: patch.error !== undefined ? patch.error : current.error, + finishedAt: patch.finishedAt !== undefined ? patch.finishedAt : current.finishedAt + } + + getDb().prepare(` + UPDATE backup_jobs + SET status = ?, progress = ?, total = ?, message = ?, payload_json = ?, + output_path = ?, error = ?, finished_at = ? + WHERE id = ? + `).run( + next.status, + next.progress, + next.total, + next.message, + JSON.stringify(next.payload), + next.outputPath, + next.error, + next.finishedAt, + id + ) +} + +export function markJobRunning(id: string, message?: string): void { + updateBackupJob(id, { + status: 'running', + message: message ?? '' + }) +} + +export function markJobDone(id: string, patch?: { + message?: string + outputPath?: string | null + payload?: Record +}): void { + updateBackupJob(id, { + status: 'done', + message: patch?.message ?? '', + outputPath: patch?.outputPath, + payload: patch?.payload, + finishedAt: new Date().toISOString(), + error: null + }) +} + +export function markJobFailed(id: string, error: string, message?: string): void { + updateBackupJob(id, { + status: 'failed', + error, + message: message ?? error, + finishedAt: new Date().toISOString() + }) +} diff --git a/server/utils/backup/manifest.ts b/server/utils/backup/manifest.ts new file mode 100644 index 0000000..6e16766 --- /dev/null +++ b/server/utils/backup/manifest.ts @@ -0,0 +1,33 @@ +export const BACKUP_FORMAT_VERSION = 1 + +export interface BackupManifest { + formatVersion: number + appVersion: string + createdAt: string + imageCount: number + imageBytes: number + includesDatabase: boolean +} + +export interface BackupRestorePreview { + imageCount: number + imageBytes: number + newImages: number + conflictingImages: number + formatVersion: number + appVersion: string + createdAt: string +} + +export interface StorageBackendMetaExport { + id: string + name: string + type: string + config: Record + servingMode: string + publicUrl: string + quotaBytes: number | null + enabled: boolean + isDefault: boolean + sortOrder: number +} diff --git a/server/utils/backup/paths.test.ts b/server/utils/backup/paths.test.ts new file mode 100644 index 0000000..661f229 --- /dev/null +++ b/server/utils/backup/paths.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest' +import { BACKUP_FORMAT_VERSION } from './manifest' +import { BACKUP_ARCHIVE_EXT, isSafeBackupFilename } from './paths' + +describe('isSafeBackupFilename', () => { + it('accepts valid backup archive names', () => { + expect(isSafeBackupFilename(`pichost-abc123${BACKUP_ARCHIVE_EXT}`)).toBe(true) + }) + + it('rejects path traversal and wrong extension', () => { + expect(isSafeBackupFilename('')).toBe(false) + expect(isSafeBackupFilename('../secret.phost.tar.gz')).toBe(false) + expect(isSafeBackupFilename('backup.tar.gz')).toBe(false) + expect(isSafeBackupFilename('nested/pkg.phost.tar.gz')).toBe(false) + }) +}) + +describe('BACKUP_FORMAT_VERSION', () => { + it('is v1', () => { + expect(BACKUP_FORMAT_VERSION).toBe(1) + }) +}) diff --git a/server/utils/backup/paths.ts b/server/utils/backup/paths.ts new file mode 100644 index 0000000..f646afb --- /dev/null +++ b/server/utils/backup/paths.ts @@ -0,0 +1,19 @@ +import { join } from 'node:path' +import { getDataDir } from '../data-dir' + +export const BACKUP_ARCHIVE_EXT = '.phost.tar.gz' + +export function getBackupsDir(): string { + return join(getDataDir(), 'backups') +} + +export function getBackupStagingDir(jobId: string): string { + return join(getBackupsDir(), 'staging', jobId) +} + +export function isSafeBackupFilename(name: string): boolean { + if (!name || name.includes('..') || name.includes('/') || name.includes('\\')) { + return false + } + return name.endsWith(BACKUP_ARCHIVE_EXT) +} diff --git a/server/utils/backup/runner.ts b/server/utils/backup/runner.ts new file mode 100644 index 0000000..892b3e8 --- /dev/null +++ b/server/utils/backup/runner.ts @@ -0,0 +1,112 @@ +import { runBackendSyncJob } from './backend-sync' +import { runFullExportJob } from './full-export' +import { runFullRestoreJob } from './full-restore' +import { + createBackupJob, + getBackupJob, + markJobFailed, + markJobRunning, + recoverInterruptedBackupJobs, + type BackupJob +} from './jobs' + +interface BackupRunnerState { + running: boolean + currentJobId: string | null +} + +const runnerState: BackupRunnerState = (globalThis as typeof globalThis & { + __pichostBackupRunner?: BackupRunnerState +}).__pichostBackupRunner ?? { + running: false, + currentJobId: null +} +;(globalThis as typeof globalThis & { + __pichostBackupRunner?: BackupRunnerState +}).__pichostBackupRunner = runnerState + +export function isBackupRunnerBusy(): boolean { + return runnerState.running +} + +function claimJobSlot(): void { + if (runnerState.running) { + throw new Error('BACKUP_JOB_RUNNING') + } + recoverInterruptedBackupJobs() +} + +export function cancelBackupJob(jobId: string): boolean { + const job = getBackupJob(jobId) + if (!job || (job.status !== 'running' && job.status !== 'pending')) { + return false + } + markJobFailed(jobId, '任务已取消') + if (runnerState.currentJobId === jobId) { + runnerState.running = false + runnerState.currentJobId = null + } + return true +} + +export function scheduleBackupJob( + job: BackupJob, + runner: () => Promise +): void { + if (runnerState.running) { + throw new Error('BACKUP_JOB_RUNNING') + } + runnerState.running = true + runnerState.currentJobId = job.id + markJobRunning(job.id) + + setImmediate(() => { + runner() + .catch(() => {}) + .finally(() => { + runnerState.running = false + runnerState.currentJobId = null + }) + }) +} + +export function startFullExportJob(appVersion: string): BackupJob { + claimJobSlot() + const job = createBackupJob({ + type: 'full_export', + message: '等待开始…' + }) + scheduleBackupJob(job, () => runFullExportJob(job.id, appVersion)) + return getBackupJob(job.id)! +} + +export function startFullRestoreJob( + archivePath: string, + conflictMode: 'skip' | 'overwrite' +): BackupJob { + claimJobSlot() + const job = createBackupJob({ + type: 'full_restore', + message: '等待开始…', + payload: { archivePath, conflictMode } + }) + scheduleBackupJob(job, () => runFullRestoreJob(job.id, archivePath, { conflictMode })) + return getBackupJob(job.id)! +} + +export function startBackendSyncJob(options: { + fromBackendId: string + toBackendId: string + deleteSource?: boolean + setDefault?: boolean + dryRun?: boolean +}): BackupJob { + claimJobSlot() + const job = createBackupJob({ + type: 'backend_sync', + message: options.dryRun ? '预检中…' : '等待开始…', + payload: options + }) + scheduleBackupJob(job, () => runBackendSyncJob(job.id, options)) + return getBackupJob(job.id)! +} diff --git a/server/utils/backup/schema.ts b/server/utils/backup/schema.ts new file mode 100644 index 0000000..81fc03f --- /dev/null +++ b/server/utils/backup/schema.ts @@ -0,0 +1,21 @@ +import { getDb } from '../db' + +export function ensureBackupSchema(): void { + getDb().exec(` + CREATE TABLE IF NOT EXISTS backup_jobs ( + id TEXT PRIMARY KEY, + type TEXT NOT NULL CHECK(type IN ('full_export', 'full_restore', 'backend_sync')), + status TEXT NOT NULL CHECK(status IN ('pending', 'running', 'done', 'failed')), + progress INTEGER NOT NULL DEFAULT 0, + total INTEGER NOT NULL DEFAULT 0, + message TEXT NOT NULL DEFAULT '', + payload_json TEXT NOT NULL DEFAULT '{}', + output_path TEXT, + error TEXT, + created_at TEXT NOT NULL, + finished_at TEXT + ); + CREATE INDEX IF NOT EXISTS idx_backup_jobs_created_at + ON backup_jobs(created_at DESC); + `) +} diff --git a/server/utils/backup/stats.ts b/server/utils/backup/stats.ts new file mode 100644 index 0000000..4e1167e --- /dev/null +++ b/server/utils/backup/stats.ts @@ -0,0 +1,38 @@ +import { stat } from 'node:fs/promises' +import { join } from 'node:path' +import { getDataDir } from '../data-dir' +import { getImageTotals } from '../image-index' +import { getBackupsDir } from './paths' + +export async function getBackupExportEstimate(): Promise<{ + imageCount: number + imageBytes: number + databaseBytes: number + totalBytes: number +}> { + const { count, bytes } = getImageTotals() + const databaseBytes = await (async () => { + try { + const dbStat = await stat(join(getDataDir(), 'pichost.db')) + return dbStat.size + } catch { + return 0 + } + })() + return { + imageCount: count, + imageBytes: bytes, + databaseBytes, + totalBytes: bytes + databaseBytes + } +} + +export async function getAvailableDiskBytes(): Promise { + try { + const { statfs } = await import('node:fs/promises') + const stats = await statfs(getBackupsDir()) + return Number(stats.bavail) * Number(stats.bsize) + } catch { + return null + } +} diff --git a/server/utils/db.ts b/server/utils/db.ts index d239b54..cd4cc10 100644 --- a/server/utils/db.ts +++ b/server/utils/db.ts @@ -36,8 +36,27 @@ export interface ActivityLogInput { } let db: DatabaseSync | null = null +let dbReplacing = false + +export function isDbReplacing(): boolean { + return dbReplacing +} + +export function setDbReplacing(value: boolean): void { + dbReplacing = value +} + +export function closeDb(): void { + if (db) { + db.close() + db = null + } +} export function getDb(): DatabaseSync { + if (dbReplacing) { + throw new Error('DATABASE_REPLACE_IN_PROGRESS') + } if (db) return db const dataDir = getDataDir() diff --git a/server/utils/image-index.ts b/server/utils/image-index.ts index 39c8994..2557e2e 100644 --- a/server/utils/image-index.ts +++ b/server/utils/image-index.ts @@ -369,6 +369,41 @@ function buildBackendFilterSql( return ' AND backend_id = ?' } +export function getImageTotals(): { count: number, bytes: number } { + ensureStorageSchema() + const row = getDb().prepare(` + SELECT COUNT(*) AS count, COALESCE(SUM(size), 0) AS bytes + FROM images + `).get() as { count: number, bytes: number } + return { count: row.count, bytes: Number(row.bytes) } +} + +export function listAllImageIndexRows(): ImageIndexRow[] { + ensureStorageSchema() + return getDb().prepare(` + SELECT key, backend_id, user_id, folder, original_name, content_type, size, uploaded_at + FROM images + ORDER BY key ASC + `).all() as unknown as ImageIndexRow[] +} + +export function listImageIndexRowsByBackend(backendId: string): ImageIndexRow[] { + ensureStorageSchema() + return getDb().prepare(` + SELECT key, backend_id, user_id, folder, original_name, content_type, size, uploaded_at + FROM images + WHERE backend_id = ? + ORDER BY key ASC + `).all(backendId) as unknown as ImageIndexRow[] +} + +export function updateImageBackendId(key: string, backendId: string): void { + ensureStorageSchema() + getDb().prepare(` + UPDATE images SET backend_id = ? WHERE key = ? + `).run(backendId, key) +} + export async function countImages( userFilter?: number | 'admin', backendId?: string