Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.
Backups cover different failure modes. A local Harly archive is useful for a
failed update; disaster recovery requires off-host PostgreSQL and object
storage protection.
For a single-region self-hosted deployment, a practical target is RPO 15
minutes and RTO 60 minutes. Validate the target against provider quotas,
credentials, and restore capacity.
The CLI stops application workers, creates a PostgreSQL custom-format dump,
includes local uploads and configuration, checksums archive contents, and
writes a private rollback archive. Encrypted archives require an age
recipient and a private identity stored outside the server.
A local archive disappears with the VPS. Copy it to an encrypted off-host
bucket and enable object versioning. S3 uploads require an independent
backup policy because they are not embedded in the archive.
npx @harly/cli restore backups/harly-2026-...tar.gz --forcenpx @harly/cli doctor
Restore verifies checksums, creates a safety backup, stops workers, restores
PostgreSQL and local uploads, and requires readiness before returning success.
Run a restore drill monthly and after backup code changes. Record the archive
checksum, restore duration, row counts, and upload checksum.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Harly","colors":{"primary":"#2a331a","light":"#bfdc82","dark":"#7e9650"},"logo":{"light":"https://mintcdn.com/vytral/9d3pwg8gD0R4MdJy/logo/light.svg?fit=max\u0026auto=format\u0026n=9d3pwg8gD0R4MdJy\u0026q=85\u0026s=3450008c08743d23df7f664f40a63334","dark":"https://mintcdn.com/vytral/9d3pwg8gD0R4MdJy/logo/dark.svg?fit=max\u0026auto=format\u0026n=9d3pwg8gD0R4MdJy\u0026q=85\u0026s=58b6f0d0d80d02ded522cc46cb77aff1"},"favicon":"https://mintcdn.com/vytral/9d3pwg8gD0R4MdJy/logo/light.svg?fit=max\u0026auto=format\u0026n=9d3pwg8gD0R4MdJy\u0026q=85\u0026s=3450008c08743d23df7f664f40a63334","navbar":{"links":[{"href":"https://github.com/vytral/harly","label":"GitHub"}]},"footer":{"socials":{"github":"https://github.com/vytral/harly"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vytral","hasAudioNarration":false,"actualSubdomain":"vytral","customDomains":["docs.harly.dev"],"gitSource":{"type":"github","owner":"vytral","repo":"harly","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae405a60f52c26d772224d3","collectionId":"b9defb67-95f9-468d-868d-efcd62fbd579","liveDeploymentHistoryId":"6ae405a60f52c26d772224d3","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae405a60f52c26d772224d3","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":77},{"language":"default","tag":"Integrations","count":13},{"language":"default","tag":"Jobs","count":13},{"language":"default","tag":"Using Harly","count":12},{"language":"default","tag":"Candidates","count":11},{"language":"default","tag":"Automations","count":8},{"language":"default","tag":"Webhooks","count":8},{"language":"default","tag":"Applications","count":7},{"language":"default","tag":"Offers","count":7},{"language":"default","tag":"API and automation","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"6a73f32e21eb3c1ff54c5205","deploymentId":"6a6d12944e4f6b4c9442fec6","questionText":"What are the requirements?","status":"active","generatedBy":"manual","createdAt":"2026-08-06T02:36:30.888Z","updatedAt":"2026-08-06T02:36:30.888Z","__v":0},{"_id":"6a73f31e21eb3c1ff54c519e","deploymentId":"6a6d12944e4f6b4c9442fec6","questionText":"How do i install Harly?","status":"active","generatedBy":"manual","createdAt":"2026-08-06T02:36:14.262Z","updatedAt":"2026-08-06T02:36:14.262Z","__v":0}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"operations/backups","slug":"/operations/backups","pageMetadata":{"title":"Backups and restore","description":"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.","href":"/operations/backups"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Backups cover different failure modes. A local Harly archive is useful for a\nfailed update; disaster recovery requires off-host PostgreSQL and object\nstorage protection.`}),`\n`,_jsx(Heading,{level:`2`,id:`recommended-recovery-contract`,children:`Recommended recovery contract`}),`\n`,_jsx(_components.p,{children:`For a single-region self-hosted deployment, a practical target is RPO 15\nminutes and RTO 60 minutes. Validate the target against provider quotas,\ncredentials, and restore capacity.`}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-backup`,children:`Create a backup`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @harly/cli`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backup`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @harly/cli`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backup`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --encrypt`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The CLI stops application workers, creates a PostgreSQL custom-format dump,\nincludes local uploads and configuration, checksums archive contents, and\nwrites a private rollback archive. Encrypted archives require an `,_jsx(_components.code,{children:`age`}),`\nrecipient and a private identity stored outside the server.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`A local archive disappears with the VPS. Copy it to an encrypted off-host\nbucket and enable object versioning. S3 uploads require an independent\nbackup policy because they are not embedded in the archive.`})}),`\n`,_jsx(Heading,{level:`2`,id:`restore`,children:`Restore`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @harly/cli`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` restore`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backups/harly-2026-...tar.gz`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --force`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @harly/cli`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` doctor`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Restore verifies checksums, creates a safety backup, stops workers, restores\nPostgreSQL and local uploads, and requires readiness before returning success.`}),`\n`,_jsx(Heading,{level:`2`,id:`prove-recovery`,children:`Prove recovery`}),`\n`,_jsx(_components.p,{children:`Use only a throwaway installation:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`HARLY_DESTRUCTIVE_OK`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`1`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tooling/harly/test/backup-restore.destructive.sh`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /path/to/throwaway-install`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Run a restore drill monthly and after backup code changes. Record the archive\nchecksum, restore duration, row counts, and upload checksum.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Backups and restore","description":"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.","href":"/operations/backups"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Recommended recovery contract","slug":"recommended-recovery-contract","depth":2,"children":[]},{"title":"Create a backup","slug":"create-a-backup","depth":2,"children":[]},{"title":"Restore","slug":"restore","depth":2,"children":[]},{"title":"Prove recovery","slug":"prove-recovery","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"vytral","siteName":"Harly","title":"Backups and restore - Harly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-25T02:59:48.136Z","originalFileLocation":"operations/backups.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Harly\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Backups and restore - Harly\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Harly\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.harly.dev/operations/backups\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vytral.mintlify.app/_mintlify/api/og/v2?division=Operations\u0026amp;title=Backups+and+restore\u0026amp;description=Create+rollback+archives%2C+ship+encrypted+backups+off-host%2C+restore+a+Harly+installation%2C+and+verify+database+and+file+recovery+with+a+throwaway+instance.\u0026amp;theme=e7953bd5cc93b2d42cf27bd6\u0026amp;signature=3a00d768a92797f31b20a32ee2d347daf2cddb0a20ae33b066f2259db8b2c749\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Backups and restore - Harly\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vytral.mintlify.app/_mintlify/api/og/v2?division=Operations\u0026amp;title=Backups+and+restore\u0026amp;description=Create+rollback+archives%2C+ship+encrypted+backups+off-host%2C+restore+a+Harly+installation%2C+and+verify+database+and+file+recovery+with+a+throwaway+instance.\u0026amp;theme=e7953bd5cc93b2d42cf27bd6\u0026amp;signature=3a00d768a92797f31b20a32ee2d347daf2cddb0a20ae33b066f2259db8b2c749\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/vytral/6vO5K6_b8ukeDatV/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Harly\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2a331a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.harly.dev/operations/backups\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/operations/backups.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.harly.dev/#organization\",\"name\":\"Harly\",\"url\":\"https://docs.harly.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vytral/9d3pwg8gD0R4MdJy/logo/light.svg?fit=max\u0026auto=format\u0026n=9d3pwg8gD0R4MdJy\u0026q=85\u0026s=3450008c08743d23df7f664f40a63334\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.harly.dev#website\",\"name\":\"Harly\",\"url\":\"https://docs.harly.dev\",\"publisher\":{\"@id\":\"https://docs.harly.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.harly.dev/operations/backups#webpage\",\"url\":\"https://docs.harly.dev/operations/backups\",\"name\":\"Backups and restore\",\"description\":\"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.\",\"dateModified\":\"2026-09-25T02:59:48.136Z\",\"isPartOf\":{\"@id\":\"https://docs.harly.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.harly.dev/operations/backups#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.harly.dev/operations/backups#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Operations\",\"item\":\"https://docs.harly.dev/self-hosting/operations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backups and restore\",\"item\":\"https://docs.harly.dev/operations/backups\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.harly.dev/operations/backups#article\",\"headline\":\"Backups and restore\",\"name\":\"Backups and restore\",\"description\":\"Create rollback archives, ship encrypted backups off-host, restore a Harly installation, and verify database and file recovery with a throwaway instance.\",\"url\":\"https://docs.harly.dev/operations/backups\",\"mainEntityOfPage\":{\"@id\":\"https://docs.harly.dev/operations/backups#webpage\"},\"dateModified\":\"2026-09-25T02:59:48.136Z\",\"publisher\":{\"@id\":\"https://docs.harly.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.harly.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Harly\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Harly","nav":{"global":null,"groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Create your first workspace","href":"/getting-started/first-workspace"},{"title":"Daily recruiting workflow","href":"/getting-started/daily-workflow"}]},{"group":"Tutorials","icon":"graduation-cap","pages":[{"title":"Tutorial: your first hire","href":"/tutorials/first-hire"},{"title":"Tutorial: set up integrations","href":"/tutorials/setup-integrations"},{"title":"Tutorial: build an API integration","href":"/tutorials/api-integration"}]},{"group":"Using Harly","icon":"compass","pages":[{"title":"How Harly's core hiring loop fits together","sidebarTitle":"Using Harly","href":"/product/overview"},{"title":"Jobs","href":"/product/jobs"},{"title":"Candidates and pipeline","href":"/product/candidates-and-pipeline"},{"title":"Interviews and scheduling","href":"/product/interviews-and-scheduling"},{"title":"Offers and signatures","href":"/product/offers-and-signatures"},{"title":"Inbox and email","href":"/product/inbox-and-email"},{"title":"Tasks and scorecards","href":"/product/tasks-and-scorecards"},{"title":"Documents","href":"/product/documents"},{"title":"Career page","href":"/product/career-page"},{"title":"Candidate portal","href":"/product/candidate-portal"},{"title":"Reports and analytics","href":"/product/reports-and-analytics"},{"title":"AI features","href":"/product/ai-features"}]},{"group":"Deploy Harly","icon":"server","pages":[{"title":"Self-hosting overview","href":"/self-hosting/overview"},{"title":"Proxy modes","href":"/self-hosting/proxy-modes"},{"title":"Deploy with the Harly CLI","href":"/deployment/cli"},{"title":"Managed cloud deployments","href":"/deployment/cloud"},{"title":"Configuration reference","href":"/deployment/configuration"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"How Harly integration credentials and connections work","sidebarTitle":"Integrations overview","href":"/integrations/overview"},{"title":"JOIN.com candidate import","href":"/integrations/join"},{"title":"Greenhouse candidate import","href":"/integrations/greenhouse"},{"title":"Workable candidate import","href":"/integrations/workable"},{"title":"Ashby candidate import","href":"/integrations/ashby"},{"title":"Lever candidate import","href":"/integrations/lever"},{"title":"Email, inbound replies, and mailboxes","href":"/integrations/email"},{"title":"Google Calendar and Google Meet","href":"/integrations/google-calendar"},{"title":"Microsoft Outlook and Teams","href":"/integrations/microsoft"},{"title":"Video interview providers","href":"/integrations/video"},{"title":"Slack, Discord, and Telegram notifications","href":"/integrations/notifications"},{"title":"E-signatures and offer signing","href":"/integrations/signatures"},{"title":"File storage","href":"/integrations/storage"}]},{"group":"Security","icon":"shield-check","pages":[{"title":"Access control and workspace security","href":"/security/access-control"},{"title":"SSO and SCIM provisioning","href":"/security/sso-scim"},{"title":"Privacy and data retention","href":"/security/privacy"}]},{"group":"API and automation","icon":"code","pages":[{"title":"API overview","href":"/developers/api-overview"},{"title":"API authorization","href":"/developers/api-authorization"},{"title":"API resource reference","href":"/developers/api-reference"},{"title":"Webhooks","href":"/developers/webhooks"},{"title":"Realtime updates","href":"/developers/realtime"},{"title":"Automations","href":"/developers/automations"}]},{"group":"API Reference","icon":"brackets-curly","pages":[{"group":"Jobs","pages":[{"title":"List jobs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/jobs","href":"/api-reference/jobs/list-jobs"},{"title":"Create job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/jobs","href":"/api-reference/jobs/create-job"},{"title":"Get job","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/jobs/{id}","href":"/api-reference/jobs/get-job"},{"title":"Delete job","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/jobs/{id}","href":"/api-reference/jobs/delete-job"},{"title":"Update job","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/jobs/{id}","href":"/api-reference/jobs/update-job"},{"title":"Publish job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/jobs/{id}/publish","href":"/api-reference/jobs/publish-job"},{"title":"Close job","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/jobs/{id}/close","href":"/api-reference/jobs/close-job"},{"title":"List job stages","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/jobs/{id}/stages","href":"/api-reference/jobs/list-job-stages"},{"title":"Create job stage","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/jobs/{id}/stages","href":"/api-reference/jobs/create-job-stage"},{"title":"Delete job stage","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/jobs/{id}/stages/{stageId}","href":"/api-reference/jobs/delete-job-stage"},{"title":"Update job stage","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/jobs/{id}/stages/{stageId}","href":"/api-reference/jobs/update-job-stage"},{"title":"Reorder job stages","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/jobs/{id}/stages/reorder","href":"/api-reference/jobs/reorder-job-stages"},{"title":"Archive job stage","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/jobs/{id}/stages/{stageId}/archive","href":"/api-reference/jobs/archive-job-stage"}]},{"group":"Candidates","pages":[{"title":"List candidates","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/candidates","href":"/api-reference/candidates/list-candidates"},{"title":"Create candidate","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/candidates","href":"/api-reference/candidates/create-candidate"},{"title":"Get candidate","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/candidates/{id}","href":"/api-reference/candidates/get-candidate"},{"title":"Delete candidate","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/candidates/{id}","href":"/api-reference/candidates/delete-candidate"},{"title":"Update candidate","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/candidates/{id}","href":"/api-reference/candidates/update-candidate"},{"title":"List candidate notes","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/candidates/{id}/notes","href":"/api-reference/candidates/list-candidate-notes"},{"title":"Create candidate note","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/candidates/{id}/notes","href":"/api-reference/candidates/create-candidate-note"},{"title":"List candidate tags","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/candidates/{id}/tags","href":"/api-reference/candidates/list-candidate-tags"},{"title":"Create candidate tag","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/candidates/{id}/tags","href":"/api-reference/candidates/create-candidate-tag"},{"title":"Delete candidate tag","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/candidates/{id}/tags/{tagId}","href":"/api-reference/candidates/delete-candidate-tag"},{"title":"List candidate files","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/candidates/{id}/files","href":"/api-reference/candidates/list-candidate-files"}]},{"group":"Applications","pages":[{"title":"List applications","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/applications","href":"/api-reference/applications/list-applications"},{"title":"Create application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/applications","href":"/api-reference/applications/create-application"},{"title":"Get application","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/applications/{id}","href":"/api-reference/applications/get-application"},{"title":"Move application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/applications/{id}/move","href":"/api-reference/applications/move-application"},{"title":"Reject application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/applications/{id}/reject","href":"/api-reference/applications/reject-application"},{"title":"Hire application","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/applications/{id}/hire","href":"/api-reference/applications/hire-application"},{"title":"Bulk create applications","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/applications/bulk","href":"/api-reference/applications/bulk-create-applications"}]},{"group":"API Keys","pages":[{"title":"List API keys","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/api-keys","href":"/api-reference/api-keys/list-api-keys"},{"title":"Create API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/api-keys","href":"/api-reference/api-keys/create-api-key"},{"title":"Delete API key","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/api-keys/{id}","href":"/api-reference/api-keys/delete-api-key"},{"title":"Rotate API key","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/api-keys/{id}/rotate","href":"/api-reference/api-keys/rotate-api-key"}]},{"group":"Webhooks","pages":[{"title":"List webhooks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Delete webhook","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/webhooks/{id}","href":"/api-reference/webhooks/delete-webhook"},{"title":"Update webhook","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/webhooks/{id}","href":"/api-reference/webhooks/update-webhook"},{"title":"Test webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks/{id}/test","href":"/api-reference/webhooks/test-webhook"},{"title":"List webhook deliveries","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/webhooks/{id}/deliveries","href":"/api-reference/webhooks/list-webhook-deliveries"},{"title":"Replay webhook delivery","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/webhooks/{id}/deliveries/{deliveryId}/replay","href":"/api-reference/webhooks/replay-webhook-delivery"},{"title":"List webhook delivery attempts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/webhooks/{id}/deliveries/{deliveryId}/attempts","href":"/api-reference/webhooks/list-webhook-delivery-attempts"}]},{"group":"Interviews","pages":[{"title":"List interviews","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/interviews","href":"/api-reference/interviews/list-interviews"},{"title":"Create interview","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/interviews","href":"/api-reference/interviews/create-interview"},{"title":"Get interview","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/interviews/{id}","href":"/api-reference/interviews/get-interview"},{"title":"Update interview","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/interviews/{id}","href":"/api-reference/interviews/update-interview"},{"title":"Cancel interview","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/interviews/{id}/cancel","href":"/api-reference/interviews/cancel-interview"},{"title":"Complete interview","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/interviews/{id}/complete","href":"/api-reference/interviews/complete-interview"}]},{"group":"Offers","pages":[{"title":"List offers","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/offers","href":"/api-reference/offers/list-offers"},{"title":"Create offer","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/offers","href":"/api-reference/offers/create-offer"},{"title":"Get offer","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/offers/{id}","href":"/api-reference/offers/get-offer"},{"title":"Update offer","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/offers/{id}","href":"/api-reference/offers/update-offer"},{"title":"Send offer","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/offers/{id}/send","href":"/api-reference/offers/send-offer"},{"title":"Decide offer","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/offers/{id}/decision","href":"/api-reference/offers/decide-offer"},{"title":"Withdraw offer","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/offers/{id}/withdraw","href":"/api-reference/offers/withdraw-offer"}]},{"group":"Scorecards","pages":[{"title":"List scorecards","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/scorecards","href":"/api-reference/scorecards/list-scorecards"},{"title":"Create scorecard","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/scorecards","href":"/api-reference/scorecards/create-scorecard"}]},{"group":"Tasks","pages":[{"title":"List tasks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tasks","href":"/api-reference/tasks/list-tasks"},{"title":"Create task","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/tasks","href":"/api-reference/tasks/create-task"},{"title":"Get task","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/tasks/{id}","href":"/api-reference/tasks/get-task"},{"title":"Delete task","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/tasks/{id}","href":"/api-reference/tasks/delete-task"},{"title":"Update task","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/tasks/{id}","href":"/api-reference/tasks/update-task"}]},{"group":"Activity","pages":[{"title":"List activity events","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/activity-events","href":"/api-reference/activity/list-activity-events"}]},{"group":"Pool","pages":[{"title":"List pool entries","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/pool-entries","href":"/api-reference/pool/list-pool-entries"},{"title":"Create pool entry","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/pool-entries","href":"/api-reference/pool/create-pool-entry"},{"title":"Remove pool entry","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/pool-entries/{id}","href":"/api-reference/pool/remove-pool-entry"},{"title":"Assign pool entry","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/pool-entries/{id}/assign","href":"/api-reference/pool/assign-pool-entry"}]},{"group":"Auth","pages":[{"title":"Get current API key context","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/me","href":"/api-reference/auth/get-current-api-key-context"}]},{"group":"Automations","pages":[{"title":"List automations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/automations","href":"/api-reference/automations/list-automations"},{"title":"Create automation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/automations","href":"/api-reference/automations/create-automation"},{"title":"Get automation","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/automations/{id}","href":"/api-reference/automations/get-automation"},{"title":"Delete automation","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/automations/{id}","href":"/api-reference/automations/delete-automation"},{"title":"Update automation","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/automations/{id}","href":"/api-reference/automations/update-automation"},{"title":"List automation runs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/automations/{id}/runs","href":"/api-reference/automations/list-automation-runs"},{"title":"Retry automation run","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/automations/{id}/runs/{runId}/retry","href":"/api-reference/automations/retry-automation-run"},{"title":"Cancel automation run","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/automations/{id}/runs/{runId}/cancel","href":"/api-reference/automations/cancel-automation-run"}]}]},{"group":"Operations","icon":"wrench","pages":[{"title":"Health checks, scheduler, backups, and upgrades","sidebarTitle":"Operations","description":"Day-two operations for a self-hosted Harly installation — health checks, the background scheduler, encrypted backups, restore steps, and version upgrades.","href":"/self-hosting/operations"},{"title":"Backups and restore","href":"/operations/backups"},{"title":"Troubleshooting","description":"Diagnose common Harly failures — installation errors, proxy misconfiguration, scheduler stalls, email delivery, integrations, API errors, and realtime drops.","href":"/operations/troubleshooting"},{"title":"Screenshots and visual evidence","href":"/operations/screenshots"}]}]},"basePath":"","title":"Backups and restore - Harly","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}