Nectere suiteObject Store Migrationv20261021-085136

Nectere Amphora

Amphora copies, moves and syncs data between object stores. Add a store once (S3, Azure Blob, Google Cloud Storage, B2, SFTP, WebDAV or a local path), then browse it, upload and download files, or build transfers to another store. A transfer takes a whole path or only the files that match its filters. Dry-run it first and schedule it when it's right.

Copy, move or sync Test before you run S3 · Azure Blob · GCS · B2 · SFTP · WebDAV Per-file audit trail
Get itNectere Array › Menu › Deploy › Nectere Amphora

01The app

The mock is clickable. Sidebar items open each panel with sample data, and most dialog buttons (+ Add Store, Log, Edit) open their dialogs. Dialogs close only from × or Cancel.

Signed in as
Not securehttps://array.corp.lab/i/7d2e4b91/Dashboard

Users is admin-only. Array sign-on removes it and Sign Out, since Array handles accounts.

02How the pieces fit

A store is where data lives. A transfer says what to take from one store and where to put it; each time it executes, that's a run, with its own log. A schedule runs a transfer on a timer.

Object storeA bucket, container, SFTP folder, WebDAV share or local path, with its address and credentials. Secrets aren't shown again after saving.
ExploreFile browser for any store. Make folders, upload, download, rename, delete, or turn a selection into a transfer.
TransferSource, destination and mode (copy, move or sync), with optional age, size and name filters.
RunOne execution of a transfer. A Test run is a dry run and changes nothing.
ScheduleRuns a saved transfer every N minutes or daily at a set time, optionally on chosen weekdays.
LogsApplication log of what users and schedules did, plus a per-file audit trail for transfers.
Source storeLab MinIO / app-logs Transfer mode: copy · move · synccriteria: age, size, include, exclude Destination storeProd S3 Archive / logs/app Schedule (optional) Run → log + audit trail

The usual order

  1. Object Stores: add source and destination. Test each one.
  2. Explore: find the source folder.
  3. Transfers: create the transfer, check its file list with Test criteria, save.
  4. Test the saved transfer, read the log, then press Transfer.
  5. Schedules: add one if the transfer recurs.

03Getting Amphora

Deployed from Nectere Array under Menu › Deploy › Nectere Amphora. The sign-in mode is picked at deploy time. Updates, restarts and logs are on the back of the tile once it shows Running.

Sign-in modes

Array sign-on (recommended)Opening the tile from Array signs you in, no second password. There's no read-only mode, so anyone with the tile can add stores, run transfers and delete files.
Application sign-inAmphora keeps its own users. The first visitor creates the admin account and admins add the rest under Users.

04Sign-in and setup

Array sign-on skips this and opens on the dashboard. With Application sign-in, a new tile shows Initial Setup to create the admin account, and Sign In from then on.

Screen
Sign-in
RuleValue
Sign-in lasts8 hours, then the next click returns to Sign In
First accountAlways admin
Wrong username or passwordInvalid credentials. No lockout.
Password rulesMust not be empty. Nothing else is enforced.

Array sign-on

An expired Array session can land you on Amphora's Sign In form. There are no local accounts to use there. Reopen the tile from Array.

Sidebar
ItemWho sees it
Dashboard, Object Stores, Explore, Transfers, Schedules, LogsEveryone
Usersadmin role only. Hidden with Array sign-on.
Sign OutApplication sign-in only

Footer

Notifications stack above Sign Out. Green ones clear after 5 seconds, red after 8. Below them are the server clock, which schedules follow, and the version.

Opening a panel reloads its data. Refresh reloads it in place.

06Dashboard

Four counts and the ten most recent runs.

State
https://array.corp.lab/i/7d2e4b91/Dashboard
  1. 1Counts. Object stores, active transfers (running or pending), completed and failed runs. Run counts cover the last 100 runs.
  2. 2Recent Transfers. The ten newest runs, manual or scheduled.
  3. 3Name. Scheduled runs get (scheduled) after the name. Test runs have (test) in it.
  4. 4Log and Cancel. Cancel appears only while a run is going. A run that failed before starting shows the reason on a grey line below it.
Run statusBadgeMeans
pendingpendingQueued. Normally starts within a couple of seconds.
runningrunningMoving files
completedcompletedFinished without errors
failedfailedThe log lists the failed files and why
cancelledcancelledStopped with Cancel or Cancel run
interruptedinterruptedAmphora restarted or was updated mid-run. Copied files stay; run the transfer again.

07Object Stores

Each store has a name, a type and that type's connection settings. Search matches name, type, description and visible settings like endpoint or bucket, so minio and corp.lab both work.

https://array.corp.lab/i/7d2e4b91/Object Stores

An empty list reads No object stores yet. Click "+ Add Store" to start moving data. and hides the search box.

ButtonDoes
+ Add StoreOpens Add Object Store
EditSame dialog, prefilled. Secrets show as dots and are kept unless changed.
TestLists the store and reports Connection OK or Connection failed: … in the sidebar
DeleteConfirms with Delete this object store? Transfers referencing it will fail. Transfers still using the store don't block it.

The store form

The form shows the fields for the selected type, and changing type clears it. Required fields have an orange *. Where there's an Authentication dropdown, only the chosen method's fields are saved: switching from account key to SAS URL drops the key.

Type
Edit Object Store
Add Object Store, missing fields

Store types

TypeRequiredOptional
S3-Compatible (AWS / Wasabi / MinIO / R2 / etc.)Access key ID, Secret access keyProvider (AWS, Wasabi, MinIO, Cloudflare R2, DigitalOcean Spaces, Ceph, Other S3-compatible), Region (needed for AWS), Endpoint URL (needed for everything except AWS), Bucket, Base path
Azure Blob StorageEither Storage account name and Account key, or a SAS URLContainer, Base path
Google Cloud StorageService account JSON key (paste the whole file)Project number (only to create buckets), Bucket, Base path
Backblaze B2Application key ID, Application keyBucket, Base path
SFTP / SSHHost, Username, and either a Password or a Private key PEM (unencrypted)Port (22 if blank), Base path
WebDAVURLUsername and Password (leave both blank for anonymous), Base path
Local / Mounted VolumeRoot path, such as /dataNone

With Bucket (or Container) blank, Explore opens on every bucket the key can see and transfer paths start with the bucket name. Set it and the store is that one bucket. Base path pins the store to a folder inside it.

A Local / Mounted Volume root path has to be a folder made available to Amphora. Ask whoever runs the Array host which ones exist.

Saving and testing

Save checks required fields and shows Name is required or Required: … listing what's missing. Test in the dialog saves first, then tests, and leaves the dialog open for fixes, so a failed test still leaves a saved store. Test on a row checks the saved settings.

08Explore

Nothing loads until you pick a store and press Explore. Folder tools stay disabled until then, and switching stores clears the view.

The mock opens on Lab MinIO. Folders, breadcrumbs, the ↰ .. row and checkboxes all work, and buttons that raise a browser prompt show it.

https://array.corp.lab/i/7d2e4b91/Explore

Folder tools and row buttons

ButtonWhat happens
New FolderPrompts New folder name: and creates it in the current folder. No slashes.
UploadOpens the browser's file picker. Multiple files go into the current folder.
RefreshReloads the current folder
Download (row)Files download as-is. Folders arrive zipped as <folder>.zip.
Rename (row)Prompts Rename "name" to:. Stays in the same folder.
Delete (row)Confirms with Delete file "name"? This cannot be undone. or Delete folder "name" and all its contents? This cannot be undone.

Selections

Ticking items brings up a bar with the count. Download fetches each item separately, Delete removes them all after one confirmation, Clear unticks. Changing folder also clears the selection.

Move / Copy… opens New Transfer with the source store filled in. One ticked item becomes the source path. With several, the current folder is the source path and the items go into Include patterns, folders with /** appended.

MessageWhen
Add an object store first.No stores exist yet
Pick a store and click Explore.No store open
This location is empty. Use New Folder or Upload to add something.Store root is empty
Folder created / Renamed / Deleted / Deleted 4 item(s)Success
Uploading 3 file(s)… then Uploaded 3 file(s)Upload progress, then done
Preparing 2026-09.zip…Folder download being zipped
Folder 'scratch' is empty - nothing to downloadDownloaded folder has no files
2 item(s) could not be deletedPart of a multi-delete failed, usually permissions
List failed: …Store can't be read. Replaces the listing.

09Transfers

Nothing moves until a transfer runs. If one of its stores was deleted, the source → destination line shows the store's id instead of its name (see Old NAS sweep).

https://array.corp.lab/i/7d2e4b91/Transfers
ButtonDoes
TransferRuns it. Shows Transfer started and opens the log.
TestDry run. Logs what each file would get without copying or deleting. Shows Test run started (dry run) and opens the log.
LogOpens the log. The Run dropdown lists every run of this transfer.
EditOpens the editor. Past runs keep the settings they ran with.
DeleteConfirms with Delete this saved transfer? Schedules pointing at it will stop firing. Past runs stay in history.

The transfer editor

Source on the left, filters in the middle, destination on the right. A blank path means the top of the store. Unnamed transfers get the date and time, e.g. Transfer 2026-10-26 14:05.

Mode
Everything
New Transfer
ModeWhat it doesWatch out for
Copy — leave source intactCopies new and changed files. Unchanged files are skipped.Never deletes
Move — delete from source after copyCopies each file, then deletes the source copy once it has arrivedEmptied folders stay at the source. Files that fail to copy aren't deleted.
Sync — make destination match sourceCopies new and changed files, then deletes destination files that aren't in the sourceDeletes at the destination. Run Test first and check what it removes.

Criteria filters

Every filled-in filter must match. Blank ones are ignored, and Everything turns them all off.

FilterTakesExample
Only items older than (days)Last modified more than N days ago30: a month or older
Only items newer than (days)Modified within N days7: this week
Min size (MB) / Max size (MB)Size floor or ceiling100 skips small files
Include patternsComma-separated. Only matching files are taken.*.log,backups/**
Exclude patternsComma-separated. Matching files are left out.*.tmp,cache/**

Patterns match the path relative to the source path. * stays inside one folder name and ** crosses folders, so *.log only matches top-level logs and **/*.log matches at any depth. Check include and exclude combinations with Test criteria.

Test criteria

Scans the source with the editor's current filters, saved or not, and lists matches without copying anything. Only the first 1,000 are listed; the transfer still handles all of them.

Result
Matching files
MessageWhen
Source and destination stores are requiredSaved without both stores
Pick a source store firstTest criteria with no source store
Preview failed: …Source can't be read, often a wrong source path
Transfer savedSaved, editor closed

10Runs

The log updates live and follows the tail while scrolled to the bottom. Scroll up and it holds still. The Run dropdown lists every run of the transfer, newest first, as run or test with status and start time. Cancel run shows while the selected run is active.

Run
Transfer log

Reading the log

  • The first === line gives the run, mode, dry-run flag and criteria.
  • Then one line per file: Copied (new), Copied (replaced existing), Deleted (move and sync), or Skipped copy as --dry-run is set in a test. ERROR lines name the file and the reason the store gave.
  • Progress every 5 seconds: amount moved, percent, speed, time left.
  • The last === line has the result, OK or FAILED (exit n), with counts like (212 copied, 212 deleted, 3 failed).

The window holds the last 500 lines. The audit trail under Logs has every file.

MessageWhen
(no runs recorded yet)Never run
(no output yet)Run just started
Cancel this run?Confirms Cancel run
Destination store 9f04c3b2 not foundUnder the run on the dashboard. One of the transfer's stores was deleted.
CancellingCancel stops the run mid-file. Files already copied stay, and for move their source copies are already gone. A re-run skips what arrived and finishes the rest.

11Schedules

Each schedule runs one saved transfer. Its runs show in the transfer's log like any other.

State
https://array.corp.lab/i/7d2e4b91/Schedules

A schedule whose transfer was deleted reads (deleted transfer) and skips every time it comes due. Delete it or point it at another transfer.

The schedule editor

Set either Every N minutes (5 or more) or …or daily at. If both are set, minutes win. The day buttons in the mock toggle.

Kind
New Schedule

Schedules table shows:

SettingHow it behaves
Every N minutesCounted from the last run, or from save time if it hasn't run
Daily atServer time (the sidebar clock)
Days of weekNone selected means every day. An interval run that lands on an off day waits for midnight of the next allowed one.
EnabledUntick to pause and keep the settings

A run can start up to a minute after its time. Saving with neither field set shows Set an interval or a daily time. With no transfers to choose from it shows Pick a saved transfer - create one on the Transfers panel first.

Overlapping runsThe next run starts on time even if the last one is still going. For big transfers use an interval longer than a run takes, or a daily time.

12Logs

Application log records what users and schedules did. Audit trail (per-file) has a line for every file a transfer copied, deleted, skipped or failed on, tagged with the run id. Both show today's entries, last 400 lines. Auto-refresh reloads every 5 seconds.

View
https://array.corp.lab/i/7d2e4b91/Logs
TagCovers
Setup, AuthFirst account, sign-ins, users added or removed
StoresStores saved or deleted, and by whom
ExploreNew folders, uploads, downloads, renames, deletes
TransfersTransfers saved or deleted, run starts, Test criteria scans
JobsHow each run ended, cancels included
SchedulesSchedules saved, fired or skipped
AUDITRUN START, one line per file (COPIED, MOVED, RENAMED, DELETED, SKIPPED, FAILED), then RUN END with the result

Empty views read (empty), or (no audit entries today - run a transfer) for the audit trail. Both reset at midnight server time. The tile's Logs button in Array shows the same entries.

13Users

Application sign-in only. An admin can do everything. A user can do everything but this panel, which still includes adding stores, running transfers and deleting files.

https://array.corp.lab/i/7d2e4b91/Users
Add User
Add User
  • Create needs both fields and shows User created.
  • Delete confirms with Delete user "mreyes"? and signs the user out immediately. You can't delete yourself.
  • There's no Edit. To change a password or role, delete the account and add it again.

14Things to know

  • Test before Sync and Move. Sync deletes at the destination, Move at the source.
  • Runs are snapshots. Editing a transfer doesn't change what past runs show.
  • Re-running is safe. Unchanged files already at the destination are skipped, so a re-run after a failure or cancel only moves what's missing.
  • Deleting a store doesn't check its transfers. They fail on their next run with Destination store … not found or Source store not found.
  • Folders in buckets. Object stores have no real folders, so New Folder writes a hidden .amphora_keep file to hold one open. Amphora hides it. Other tools may not.
  • Renaming a big folder is slow. Each object is copied to the new name and the old one deleted.
  • Upload and Download go through the browser. Use a transfer for anything large.
  • Two clocks. Daily times follow the server clock in the sidebar, usually UTC. Next run and Last run are shown in browser time and can look a few hours off.

15Troubleshooting

You seeDo this
Connection failed: directory not foundBucket, container or base path is wrong. Check it in Edit, or clear the bucket and browse in Explore to see what the key can reach.
AccessDenied or 403 in a test or logKey lacks permission. Listing needs read. Transfers need write at the destination, plus delete for move and sync.
no such host or a timeoutEndpoint unreachable. Check the Endpoint URL and port, and that the host is reachable from Amphora.
S3 store against AWS fails, MinIO worksAWS needs Region set and Endpoint URL blank. Other S3 providers need the endpoint.
A run finished OK but copied nothingRun Test criteria with the same settings. Usually the source path is a level off, or *.log was used where **/*.log was meant.
Run is interruptedAmphora restarted mid-run. Run it again; files that arrived are skipped.
Run stays pendingWait a few seconds and Refresh. Still pending after a minute: restart the tile from Array, then start the transfer again once the run shows interrupted.
A schedule didn't fireCheck it's enabled, today is one of its days, and the time is server time. (deleted transfer) rows never fire.
Server error (HTTP 408) or Download failed (HTTP 408)Timed out, usually a large folder download or Test criteria over a huge bucket. Narrow the source path, and use a transfer for big folders.
Sign In form appears while using Array sign-onArray session expired. Reopen the tile from Array.
Users panel is missingYour role is user, or the tile uses Array sign-on.