Перейти к содержанию

Эксплуатация и жизненный цикл

Эта страница — канонический владелец правил persistence, остановки, удаления контейнеров и destructive cleanup. Выберите жизненный цикл до первой загрузки.

Managed VPS: обновление и откат

Для временного стенда нормальный путь — создать VPS, провести тест и удалить VPS. Обновление на месте нужно только долгоживущей установке.

xferry update загружает manifest, executable и attestations во временный каталог вне /opt, проверяет manifest/tag/platform/size/SHA-256 и provenance, а затем устанавливает версию в новый release directory. Символическая ссылка current переключается atomically. Успех фиксируется только после запуска и authenticated health check; при ошибке восстанавливаются предыдущая ссылка и состояние service.

sudo xferry update
sudo xferry update --version VERSION
sudo xferry rollback
sudo xferry rollback --to VERSION

Хранятся текущий и один предыдущий verified release. Команды не доверяют floating tag и не помещают credentials в argv или logs.

Обычный uninstall удаляет runtime под /opt/xferry, но сохраняет /etc/xferry, /var/lib/xferry, auth/config, uploads и ACME state:

sudo xferry uninstall

Удаление данных требует двойного гейта:

# DESTRUCTIVE: удаляет config, credentials, data и ACME state.
sudo xferry uninstall --purge-data --yes

Docker: выбор lifecycle

Вариант /data После остановки Необратимое действие
Disposable anonymous -v /data container и volume удаляются через --rm остановка удаляет uploads и notes
Persistent named -v xferry-data:/data volume сохраняется docker volume rm xferry-data
Compose named volumes docker compose down сохраняет данные docker compose down --volumes

Удаление container и удаление данных — разные операции для named volume.

Persistent named volume

Используйте тот же verified XFERRY_IMAGE, что и в Quick Start, но выберите named volume до первой загрузки:

docker run --rm --pull=missing -v xferry-data:/data \
  --name xferry-persistent \
  --init --read-only \
  --tmpfs /tmp:rw,nosuid,nodev,noexec,mode=1777 \
  --cap-drop ALL --security-opt no-new-privileges=true \
  --pids-limit 256 --memory 768m --cpus 1 \
  -p 127.0.0.1:8080:8080 \
  "$XFERRY_IMAGE" \
  --host 0.0.0.0 --port 8080 --dir /data --body-memory-budget 512

Ctrl+C и --rm удалят container, но uploads и encrypted notes останутся в xferry-data.

docker volume inspect xferry-data

# DESTRUCTIVE: безвозвратно удаляет uploads и notes.
docker volume rm xferry-data

Для Compose используйте down без --volumes, если данные нужны:

docker compose -f <compose-file> down

# DESTRUCTIVE: удаляет named volumes проекта.
docker compose -f <compose-file> down --volumes

Где хранятся данные

  • /data/uploads/ — пользовательские файлы.
  • /data/notes/ — encrypted blobs и plaintext metadata заметок, но не ключ долговременного восстановления.
  • /home/xferry/.xferry/acme/ — ACME account keys, private keys и chains.
  • /tmp — временные runtime-файлы и self-signed certificate material.

Потеря клиентского session key делает старую Secure Notepad заметку невосстановимой даже при сохранённом volume. ACME volume защищайте как secret.

Ресурсы и квоты

--body-memory-budget — admission budget для одновременно принятых request bodies, а не RSS ceiling. Дополнительная память нужна Python objects, decoded payloads, TLS buffers, worker threads и WebSocket connections.

Persistent capacity состоит из двух уровней:

  1. hard quota файловой системы, volume или платформы;
  2. application limits: --upload-storage-limit, --upload-file-limit, --upload-reserve-free, лимиты Notepad и retention SMUGGLE.

Меняйте memory limit, workers, --max-size и body budget совместно после измерений. Для public-direct используйте отдельную процедуру.

Contributor-only Compose

examples/docker/docker-compose.yml собирает xferry:local из checkout и не заменяет отсутствующий published digest:

docker compose -f examples/docker/docker-compose.yml up --build xferry
docker compose -f examples/docker/docker-compose.yml down

Default service публикует только 127.0.0.1:8080.