Files
SnapOtter/apps/docs/vi/guide/getting-started.md
T
SnapOtterandGitHub d10d0f544f fix: release QA hardening across processing, media, security, and CI gates (#649)
A release-readiness QA pass over the whole product. The commits split into
defects a user would hit and gates that were reporting green while measuring
nothing.

## Fixes that change behaviour

Rate limiting was bypassable on every install: TRUST_PROXY defaulted to true, so
request.ip came from a client-set header and a forged X-Forwarded-For got past
the login limiter. The default is now a private-network trust list.

A transient Postgres outage stranded in-flight jobs, leaving finished output on
disk with no row pointing at it. A reconciler now resolves those rows and adopts
the bytes rather than dropping the work.

A Redis connection that moved to a new address wedged every read-blocked
consumer, so completions stopped signalling while health still answered 200.
Socket timeouts plus subscriber pings recover it.

Installing more than one AI bundle left the shared venv multi-versioned and
silently broke three tools. The installer now reconciles distributions to one
version each.

Converting an image to JXL at quality 1 through 4 returned a 500, because
libjxl 0.7 rejects the distance those values compute. The quality is floored at
what the encoder honours. A missing ffmpeg was also reported to the user as a
corrupt upload; it now says the engine is unavailable.

RAW uploads reached an unpatched LibRaw on arm64, so it is built from source at
0.22.2, and the release scan was split so it can fail on an unfixed critical
instead of hiding it behind ignore-unfixed.

## Gates that could not fail

Two mutation lanes ran zero mutants because Stryker crawled the gitignored docs
build; coverage discarded its whole report on any failing test; the lint gate
skipped root tests, scripts, and two workspaces; and several generated matrices
counted a host missing ffmpeg as a passing tool. Each now measures what it
claims.

Full evidence and the outstanding release items are tracked locally and are not
part of this branch.
2026-07-27 15:37:30 +08:00

8.9 KiB

description, i18n_source_hash, i18n_provenance, i18n_output_hash, i18n_hash_version
description i18n_source_hash i18n_provenance i18n_output_hash i18n_hash_version
Cài đặt SnapOtter với Docker trong một lệnh. Bao gồm thiết lập Docker Compose, build từ mã nguồn, và tổng quan đầy đủ về tính năng. 8040133a6982 machine 35795f26270f 2

Bắt đầu

::: tip Dùng thử trước khi cài đặt Khám phá toàn bộ giao diện tại demo.snapotter.com, không cần đăng ký hay cài đặt. :::

Bắt đầu nhanh

docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest

Vùng chứa duy nhất này chạy mọi thứ nó cần: không có bộ DATABASE_URL, nó khởi động PostgreSQL và Redis của riêng nó trên giao diện loopback (chế độ nhúng) và giữ tất cả dữ liệu trong ổ SnapOtter-data. Đây là cách nhanh nhất để dùng thử SnapOtter hoặc tự lưu trữ trên homelab. Để sản xuất, hãy sử dụng ngăn xếp Docker Compose chuẩn, để giữ PostgreSQL và Redis trong các vùng chứa riêng của chúng. Chế độ nhúng chạy bằng root (mặc định) và tự động tắt ngay khi bạn đặt DATABASE_URL.

Cài đặt trên Raspberry Pi, laptop cũ, hay một VPS nhỏ? Xem Thiết lập trên phần cứng hạn chế để có hướng dẫn từng bước đã tinh chỉnh và biết nên kỳ vọng gì từ phần cứng hạn chế.

Bạn sẽ được yêu cầu đổi mật khẩu ở lần đăng nhập đầu tiên.

::: tip Phân tích sản phẩm ẩn danh SnapOtter bao gồm phân tích sản phẩm ẩn danh theo mặc định. Để tắt nó, mở Settings → System → Privacy và tắt Anonymous Product Analytics. Nó dừng ngay lập tức cho toàn bộ instance.

Bạn cũng có thể đặt biến môi trường SNAPOTTER_TELEMETRY=0 (falseoff cũng hoạt động) để tắt toàn bộ telemetry cho instance mà không cần xây dựng lại.

Việc giám sát lỗi được cung cấp bởi Sentry, đơn vị tài trợ cho SnapOtter thông qua chương trình mã nguồn mở của họ.

Để biết chi tiết về những gì được thu thập, xem SnapOtter thu thập gì. :::

::: tip Tăng tốc NVIDIA CUDA Thêm --gpus all để loại bỏ nền, nâng cấp, nâng cấp và phục hồi khuôn mặt được tăng tốc CUDA của NVIDIA. OCR vẫn dựa trên CPU và hoạt động trong cùng một hình ảnh có hoặc không có quyền truy cập GPU:

docker run -d --name SnapOtter -p 1349:1349 --gpus all -v SnapOtter-data:/data snapotter/snapotter:latest

Yêu cầu Bộ công cụ bộ chứa NVIDIA. Tự động quay trở lại CPU khi CUDA không khả dụng. Hiện nay, khả năng tăng tốc iGPU của Intel/AMD thông qua VA-API, Quick Sync hoặc OpenCL không được hỗ trợ cho suy luận AI. Xem Thẻ Docker để biết điểm chuẩn. Nếu các công cụ AI chạy trên CPU mặc dù có --gpus all, hãy xem Xác minh khả năng tăng tốc GPU. :::

::: details Cũng có trên GHCR

docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data ghcr.io/snapotter-hq/snapotter:latest

Cả hai registry đều phát hành cùng một image trong mỗi bản phát hành. :::

Docker Soạn

Sử dụng tệp sản xuất được duy trì và thử nghiệm với mỗi bản phát hành thay vì sao chép ví dụ Compose viết tắt từ trang này:

install -d -m 700 snapotter && cd snapotter
curl --proto '=https' --tlsv1.2 -fsSLo docker-compose.yml \
  https://raw.githubusercontent.com/snapotter-hq/SnapOtter/v2.1.0/docker/docker-compose.yml

# Keep generated service credentials out of shell history and world-readable files.
umask 077
POSTGRES_PASSWORD="$(openssl rand -hex 32)"
REDIS_PASSWORD="$(openssl rand -hex 32)"
printf 'POSTGRES_PASSWORD=%s\nREDIS_PASSWORD=%s\n' \
  "$POSTGRES_PASSWORD" "$REDIS_PASSWORD" > .env

docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d --no-build

docker/docker-compose.yml chuẩn bao gồm tất cả bốn khối thời gian chạy, kiểm tra tình trạng, giới hạn tài nguyên, cấu hình Redis bền vững, hình ảnh bộ đệm/cơ sở dữ liệu được ghim và tăng cường vùng chứa hiện tại. Thay đổi mật khẩu quản trị mặc định ngay sau lần đăng nhập đầu tiên. Để triển khai có thể lặp lại, hãy ghim hình ảnh ứng dụng SnapOtter vào thẻ phát hành hoặc thông báo mà bạn đã xác minh thay vì theo dõi latest.

Xem Cấu hình để biết tất cả các biến môi trường và Bảo mật & tăng cường để biết bí mật, chính sách mạng và hướng dẫn sao lưu.

Build từ mã nguồn

Điều kiện tiên quyết: Node.js 22.22+, pnpm 9+, Docker (cho Postgres + Redis), Python 3.11+ (cho các tính năng AI), Git.

git clone https://github.com/snapotter-hq/SnapOtter.git
cd SnapOtter
docker compose -f docker-compose.dev.yml up -d   # start Postgres + Redis
pnpm install
pnpm dev

Những gì bạn có thể làm

Xử lý tập tin (200+ công cụ)

Phương thức Số lượng Công cụ ví dụ
Hình ảnh 107 Thay đổi kích thước, Cắt, Nén, Chuyển đổi, Xóa nền, Nâng cấp độ phân giải, OCR, Đóng dấu, Ghép ảnh, Tô màu, Công cụ GIF, preset định dạng
Video 57 Cắt, Cắt khung, Nén, Chuyển đổi, Gộp, Trích xuất âm thanh, Phụ đề tự động, Video sang GIF, Thay đổi kích thước, Ổn định, preset định dạng
Âm thanh 27 Cắt, Gộp, Chuyển đổi, Chuẩn hóa, Giảm nhiễu, Phiên âm, Dịch cao độ, Fade, Tạo nhạc chuông, preset định dạng
PDF / Tài liệu 29 Gộp, Tách, Nén, OCR, Đóng dấu, Che thông tin, Word sang PDF, Excel sang PDF, Xoay, Bảo vệ, Sửa chữa
Tập tin 23 CSV sang JSON, JSON sang XML, Gộp CSV, Tách CSV, Tạo ZIP, Giải nén ZIP, Tạo biểu đồ, YAML/JSON

Pipeline

Ghép chuỗi các công cụ thành các quy trình nhiều bước và áp dụng chúng cho một hình ảnh hoặc cả một lô:

  1. Mở Pipelines ở thanh bên.
  2. Thêm các bước (công cụ bất kỳ, cài đặt bất kỳ).
  3. Chạy trên một tập tin đơn, hoặc cả một lô cùng lúc.
  4. Lưu pipeline để tái sử dụng sau này.

Pipeline cho phép 20 bước theo mặc định. Đặt MAX_PIPELINE_STEPS=0 để giới hạn thành không giới hạn.

Thư viện tập tin

Mọi tập tin bạn xử lý đều có thể được lưu vào thư viện Files của bạn. SnapOtter theo dõi toàn bộ lịch sử phiên bản để bạn có thể lần theo mọi bước xử lý từ tải lên gốc đến kết quả cuối cùng.

Việc lưu là tường minh: các kết quả bạn lưu vào thư viện được giữ lại cho đến khi bạn xóa chúng, trong khi các kết quả bạn xử lý và để chưa lưu sẽ tự động bị xóa sau 72 giờ (có thể cấu hình thông qua FILE_MAX_AGE_HOURS).

REST API & API Key

Mọi công cụ đều có thể truy cập qua HTTP:

curl -X POST http://localhost:1349/api/v1/tools/image/resize \
  -H "Authorization: Bearer si_<your-api-key>" \
  -F "file=@photo.jpg" \
  -F 'settings={"width":800,"height":600,"fit":"cover"}'

Tạo API key trong mục Settings → API Keys. Xem tham chiếu REST API để biết tất cả các endpoint, hoặc truy cập http://localhost:1349/api/docs để có tham chiếu tương tác.

Đa người dùng & Nhóm

Bật nhiều người dùng với kiểm soát truy cập dựa trên vai trò:

  • Admin: toàn quyền, quản lý người dùng, nhóm, cài đặt, tất cả tập tin/pipeline/API key
  • User: dùng công cụ, quản lý tập tin/pipeline/API key của riêng mình

Tạo các nhóm trong mục Settings → Teams để nhóm người dùng lại.

Đặt AUTH_ENABLED=true (hoặc false cho trường hợp một người dùng/tự sử dụng mà không cần đăng nhập).