> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blnkfinance.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Backup to Disk

> Learn how to backup your Blnk data to a local disk.

export const CtaCallout = props => {
  const {title, buttonLabel, href, trackingEvent, buttonTarget, rel = "noopener noreferrer", children} = props;
  const handleCtaClick = () => {
    if (typeof window === "undefined" || !trackingEvent) {
      return;
    }
    try {
      window.dispatchEvent(new CustomEvent("blnk:docs-cta", {
        detail: {
          name: trackingEvent,
          href
        }
      }));
    } catch {}
    try {
      window.posthog?.capture?.(trackingEvent, {
        href
      });
    } catch {}
    const gaPayload = {
      cta_href: href
    };
    try {
      window.gtag?.("event", trackingEvent, gaPayload);
    } catch {}
    try {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        event: trackingEvent,
        ...gaPayload
      });
    } catch {}
  };
  const isExternal = typeof href === "string" && (/^https?:\/\//i).test(href);
  const target = buttonTarget ?? (isExternal ? "_blank" : undefined);
  const linkRel = isExternal ? rel : undefined;
  return <section className="cta-callout not-prose relative my-8 w-full min-w-0 overflow-hidden rounded-xl border border-zinc-200 p-5 dark:border-white/10">
      <div className="cta-callout-noise" aria-hidden="true" />
      <div className="cta-callout-layout">
        {title ? <div className="cta-callout-title-row">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="14" height="14" className="cta-callout-icon shrink-0 text-zinc-800 dark:text-zinc-200" aria-hidden="true">
              <g fill="none" fillRule="nonzero">
                <path d="M28 0v28H0V0h28ZM14.691833333333335 27.134333333333334l-0.012833333333333334 0.0023333333333333335 -0.08283333333333333 0.04083333333333334 -0.023333333333333334 0.004666666666666667 -0.016333333333333335 -0.004666666666666667 -0.08283333333333333 -0.04083333333333334c-0.011666666666666667 -0.004666666666666667 -0.022166666666666668 -0.0011666666666666668 -0.028000000000000004 0.005833333333333334l-0.004666666666666667 0.011666666666666667 -0.019833333333333335 0.49933333333333335 0.005833333333333334 0.023333333333333334 0.011666666666666667 0.015166666666666667 0.12133333333333333 0.08633333333333333 0.0175 0.004666666666666667 0.014000000000000002 -0.004666666666666667 0.12133333333333333 -0.08633333333333333 0.014000000000000002 -0.018666666666666668 0.004666666666666667 -0.019833333333333335 -0.019833333333333335 -0.4981666666666667c-0.0023333333333333335 -0.011666666666666667 -0.0105 -0.019833333333333335 -0.019833333333333335 -0.021Zm0.3091666666666667 -0.13183333333333336 -0.015166666666666667 0.0023333333333333335 -0.21583333333333335 0.1085 -0.011666666666666667 0.011666666666666667 -0.0035000000000000005 0.012833333333333334 0.021 0.5016666666666667 0.005833333333333334 0.014000000000000002 0.009333333333333334 0.008166666666666668 0.23450000000000004 0.1085c0.014000000000000002 0.004666666666666667 0.026833333333333334 0 0.03383333333333334 -0.009333333333333334l0.004666666666666667 -0.016333333333333335 -0.03966666666666667 -0.7163333333333334c-0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.023333333333333334 -0.023333333333333334 -0.025666666666666667Zm-0.8341666666666667 0.0023333333333333335a0.026833333333333334 0.026833333333334334 0 0 0 -0.0315 0.007000000000000001l-0.007000000000000001 0.016333333333333335 -0.03966666666666667 0.7163333333333334c0 0.014000000000000002 0.008166666666666668 0.023333333333333334 0.019833333333333335 0.028000000000000004l0.0175 -0.0023333333333333335 0.23450000000000004 -0.1085 0.011666666666666667 -0.009333333333333334 0.004666666666666667 -0.012833333333333334 0.019833333333333335 -0.5016666666666667 -0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.011666666666666667 -0.21466666666666667 -0.10733333333333334Z" strokeWidth="1.1667" />
                <path fill="currentColor" d="M14 2.916666666666667A1.75 1.75 0 0 1 15.750000000000002 4.666666666666667v6.302333333333334L21.207666666666668 7.816666666666667a1.75 1.75 0 0 1 1.75 3.031L17.5 14l5.457666666666667 3.151166666666667a1.75 1.75 0 0 1 -1.75 3.031l-5.457666666666667 -3.1500000000000004V23.333333333333336a1.75 1.75 0 0 1 -3.5 0v-6.302333333333334L6.792333333333334 20.183333333333337a1.75 1.75 0 1 1 -1.75 -3.031L10.5 14 5.042333333333334 10.848833333333333a1.75 1.75 0 0 1 1.75 -3.031l5.457666666666667 3.1500000000000004V4.666666666666667A1.75 1.75 0 0 1 14 2.916666666666667Z" strokeWidth="1.1667" />
              </g>
            </svg>
            <p className="cta-callout-title min-w-0 font-semibold text-zinc-800 dark:text-zinc-200">
              {title}
            </p>
          </div> : null}
        <div className={`cta-callout-body text-sm leading-normal text-zinc-800 dark:text-zinc-200${title ? " cta-callout-body--indented" : ""}`}>
          {children}
        </div>
        <a href={href} target={target} rel={linkRel} onClick={handleCtaClick} data-docs-cta={trackingEvent || undefined} className="cta-callout-button inline-flex items-center justify-center gap-1 rounded-full bg-white px-3 py-1.5 text-sm font-semibold transition hover:bg-zinc-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/50 dark:bg-white dark:hover:bg-zinc-200">
          {buttonLabel}
          <span className="cta-callout-button-arrow" aria-hidden="true">
            →
          </span>
        </a>
      </div>
    </section>;
};

Ensuring the safety and integrity of your financial data on a Blnk server is crucial. This enhanced guide covers the process of backing up your PostgreSQL database, including setup instructions, verification, storage best practices, and restoration steps.

***

## Before you start

Before initiating your first backup, ensure your Blnk server environment is correctly configured. This includes setting up the backup directory with appropriate permissions, ensuring your Blnk server has access to this directory, and updating the Blnk configuration file to recognize the backup directory.

Here are the prerequisites:

* Docker 20.10.11 or later
* Compose 1.29.2 or later
* Basic understanding of cron jobs (for Linux/macOS) or Task Scheduler (for Windows)
* Familiarity with command-line interfaces and shell scripting

***

## Configuring the backup directory

<Steps>
  <Step title="Create a backup directory">
    Choose a secure location on your server to store the backup files. For example, `/var/backups/blnk`.

    ```bash bash theme={"system"}
    mkdir -p /var/backups/blnk
    ```
  </Step>

  <Step title="Set permissions">
    Adjust the directory permissions to ensure that the Blnk server can write to this directory.

    ```bash bash theme={"system"}
    chown youruser:yourgroup /var/backups/blnk
    chmod 700 /var/backups/blnk
    ```

    > Replace `youruser:yourgroup` with the user and group that your Blnk server runs as. This step is crucial for preventing unauthorized access to your backup files.
  </Step>

  <Step title="Update the Blnk configuration file">
    Modify your `blnk.json` configuration file to include the path to the backup directory. This tells the Blnk server where to save the backup files.

    Open your `blnk.json` file in a text editor and add the `backup_dir` key with the path to your backup directory:

    ```json blnk.json theme={"system"}
    {
      ...
      "backup_dir": "/var/backups/blnk",
      ...
    }
    ```

    Save the changes to your configuration file. This step ensures that when the Blnk server initiates a backup, it correctly locates the directory to store the backup files.
  </Step>
</Steps>

***

## Automating backups

Automating the backup process ensures your data is regularly backed up without manual intervention.

<Steps>
  <Step title="Create a backup script">
    Create a script named `backup.sh` that triggers the Blnk server to back up to disk:

    ```bash Create backup script theme={"system"}
    curl -X GET http://localhost:5001/backup \
    -H 'X-blnk-key: <api-key>'
    ```
  </Step>

  <Step title="Schedule the backup with Cron">
    Use cron (Linux/macOS) or Task Scheduler (Windows) to schedule the `backup.sh` script. For example, to run the backup daily at 2 AM:

    ```bash Schedule backup with Cron theme={"system"}
    chmod +x /path/to/backup.sh
    0 2 * * * /path/to/backup.sh
    ```
  </Step>
</Steps>

***

## Best practices for backup storage to disk

* **Off-site Storage**: Regularly copy your backups to an off-site location or cloud storage to protect against local disasters.
* **Encryption**: Encrypt your backup files to protect sensitive data from unauthorized access.
* **Retention Policy**: Implement a retention policy to manage the lifecycle of your backups, ensuring that you keep only what's necessary and avoid unnecessary storage costs.

***

## Restoring from a Backup

In the event of data loss or corruption, having a reliable backup is crucial. Here's how to restore your Blnk database from a backup file:

<Steps>
  <Step title="Locate your backup file">
    Identify the most recent or appropriate backup file for your restoration needs.
  </Step>

  <Step title="Restore the database">
    Use the PostgreSQL `pg_restore` command or a similar tool provided by Blnk to restore your database from the backup file.

    ```bash bash theme={"system"}
    pg_restore -d yourdatabase /path/to/yourbackupfile
    ```
  </Step>

  <Step title="Verify the restoration">
    Ensure that the restoration process was successful and that your Blnk application is functioning correctly.
  </Step>
</Steps>

## Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool.

To ask questions or discuss issues, please [contact us](mailto:support@blnkfinance.com) or [join our Discord community](https://discord.gg/7WNv94zPpx).

<CtaCallout title="Connect your ledger to Blnk Cloud" href="https://cloud.blnkfinance.com/auth/sign-up?utm_source=blnk_docs&utm_medium=documentation&utm_campaign=need-help" buttonLabel="Open Blnk Cloud" trackingEvent="clicked_cloud_signup">
  Sign up and manage your ledger with our back-office dashboard. You can invite teammates to collaborate and manage your ledger operations directly from the dashboard.
</CtaCallout>
