This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

Cơ sở dữ liệu

SnapOtter sử dụng PostgreSQL 17 với Drizzle ORM (pg-core / node-postgres) để lưu trữ dữ liệu bền vững. Lược đồ được định nghĩa trong apps/api/src/db/schema.ts.

Kết nối được cấu hình qua biến môi trường DATABASE_URL (mặc định postgres://snapotter:snapotter@postgres:5432/snapotter). Trong Docker Compose, container Postgres lưu dữ liệu của nó trong volume có tên SnapOtter-pgdata.

Bảng

users

Lưu trữ các tài khoản người dùng. Được tạo tự động ở lần chạy đầu tiên từ DEFAULT_USERNAMEDEFAULT_PASSWORD.

CộtKiểuGhi chú
iduuidKhóa chính
usernamevarcharDuy nhất, bắt buộc
passwordHashvarcharBăm scrypt
rolevarcharadmin, editor, hoặc user
mustChangePasswordbooleanCờ buộc đặt lại mật khẩu
createdAttimestampThời điểm tạo
updatedAttimestampThời điểm cập nhật gần nhất

sessions

Các phiên đăng nhập đang hoạt động. Mỗi hàng liên kết một token phiên với một người dùng.

CộtKiểuGhi chú
idvarcharKhóa chính (token phiên)
userIduuidKhóa ngoại tới users.id
expiresAttimestampThời điểm hết hạn
createdAttimestampThời điểm tạo

teams

Các nhóm để tổ chức người dùng. Quản trị viên có thể gán người dùng vào các nhóm.

CộtKiểuMô tả
iduuidKhóa chính
namevarchar (duy nhất, tối đa 50 ký tự)Tên nhóm
createdAttimestampThời điểm tạo

api_keys

Các khóa API để truy cập lập trình. Khóa thô chỉ được hiển thị một lần khi tạo; chỉ giá trị băm được lưu trữ.

CộtKiểuGhi chú
iduuidKhóa chính
userIduuidKhóa ngoại tới users.id
keyHashvarcharBăm scrypt của khóa
namevarcharNhãn do người dùng cung cấp
createdAttimestampThời điểm tạo
lastUsedAttimestampĐược cập nhật ở mỗi yêu cầu đã xác thực

Các khóa có tiền tố si_ theo sau bởi 96 ký tự hex (48 byte ngẫu nhiên).

pipelines

Các chuỗi công cụ đã lưu mà người dùng tạo trong giao diện.

CộtKiểuGhi chú
iduuidKhóa chính
namevarcharTên pipeline
descriptionvarcharMô tả tùy chọn
stepsjsonbMảng các đối tượng { toolId, settings }
createdAttimestampThời điểm tạo

user_files

Thư viện tệp bền vững với việc theo dõi chuỗi phiên bản. Mỗi bước xử lý lưu một kết quả sẽ tạo một hàng mới liên kết tới hàng cha của nó qua parentId, tạo thành một cây phiên bản.

CộtKiểuMô tả
iduuidKhóa chính
userIduuidFK tới users (CASCADE DELETE)
originalNamevarcharTên tệp tải lên gốc
storedNamevarcharTên tệp trên đĩa
mimeTypevarcharKiểu MIME
sizeintegerKích thước tệp tính bằng byte
widthintegerChiều rộng ảnh tính bằng px
heightintegerChiều cao ảnh tính bằng px
versionintegerSố phiên bản (1 = bản gốc)
parentIduuid hoặc nullFK tới user_files (phiên bản cha)
toolChainjsonbCác ID công cụ được áp dụng theo thứ tự để tạo ra phiên bản này
createdAttimestampThời điểm tạo

jobs

Theo dõi các tác vụ xử lý để báo cáo tiến độ và dọn dẹp.

CộtKiểuGhi chú
iduuidKhóa chính
typevarcharĐịnh danh công cụ hoặc pipeline
statusvarcharqueued, processing, completed, hoặc failed
progressrealPhân số 0.0-1.0
inputFilesjsonbMảng các đường dẫn tệp đầu vào
outputPathvarcharĐường dẫn tới tệp kết quả
settingsjsonbCác thiết lập công cụ đã sử dụng
errorvarcharThông báo lỗi nếu thất bại
createdAttimestampThời điểm tạo
completedAttimestampThời điểm hoàn thành

settings

Kho lưu trữ khóa-giá trị cho các thiết lập phạm vi toàn máy chủ mà quản trị viên có thể thay đổi từ giao diện.

CộtKiểuGhi chú
keyvarcharKhóa chính
valuevarcharGiá trị thiết lập
updatedAttimestampThời điểm cập nhật gần nhất

roles

Các vai trò tùy chỉnh với quyền chi tiết.

CộtKiểuGhi chú
iduuidKhóa chính
namevarcharTên vai trò duy nhất
descriptionvarcharMô tả tùy chọn
permissionsjsonbMảng các chuỗi quyền
createdAttimestampThời điểm tạo

audit_log

Nhật ký các hành động liên quan đến bảo mật.

CộtKiểuGhi chú
iduuidKhóa chính
userIduuidFK tới users
actionvarcharLoại hành động
detailsjsonbDữ liệu riêng cho hành động
createdAttimestampThời điểm hành động

Di trú

Drizzle xử lý việc di trú lược đồ. Các tệp di trú nằm trong apps/api/drizzle/. Trong quá trình phát triển:

bash
cd apps/api
npx drizzle-kit generate   # generate a migration from schema changes
npx drizzle-kit migrate    # apply pending migrations

Trong môi trường sản xuất, các di trú đang chờ được áp dụng tự động khi khởi động.

Sao lưu và khôi phục

Cơ sở dữ liệu quan hệ nằm trong volume SnapOtter-pgdata của container Postgres, không phải volume /data của ứng dụng.

Tùy chọn 1: pg_dump (khuyến nghị)

bash
# Dump the database while the stack is running
docker exec SnapOtter-postgres pg_dump -U snapotter snapotter > backup.sql

# Restore into a fresh database
cat backup.sql | docker exec -i SnapOtter-postgres psql -U snapotter snapotter

Tùy chọn 2: Ảnh chụp nhanh volume

bash
# Stop the stack, then snapshot the pgdata volume
docker compose down
docker run --rm -v SnapOtter-pgdata:/data -v $(pwd)/backup:/backup \
  alpine tar czf /backup/snapotter-pgdata.tar.gz -C /data .

Di trú từ 1.x (SQLite)

Nâng cấp từ SnapOtter 1.x có hướng dẫn riêng: xem Nâng cấp từ 1.x lên 2.0. Nói ngắn gọn, hãy tái sử dụng volume /data hiện có của bạn và 2.0 sẽ tự động phát hiện và nhập /data/snapotter.db ở lần khởi động đầu tiên (hoặc đặt SQLITE_MIGRATE_PATH để trỏ tới nó một cách tường minh). Hãy sao lưu toàn bộ volume /data trước, không chỉ snapotter.db: 1.x dùng chế độ SQLite WAL, nên một container đã dừng thường để lại phần lớn dữ liệu của nó trong snapotter.db-wal bên cạnh một snapotter.db gần như rỗng.