# Настройка бекап на B2

1. &#x20;Создайте аккаунт в системе <https://www.backblaze.com/>&#x20;
2. Активируйте **B2 cloud storage** для этого: \
   Войдите в аккаунт -> My Settings -> Enabled Products -> \[+] B2 Cloud Storage\
   ![](/files/t41BSSzrQZt04XZrhTLV)
3. Создаем basket куда будем сохранять:\
   ![](/files/glxvd5OmjS7BVlpnMwsh)\
   ![](/files/Ubkv63wfD6uFJ3Z26HFX)
4. После нужно создать **App key** который сможет только делать запись без возможности удалять уже созданный бекап к сожалению через панель это сделать не получится поэтому мы [сделали готовый скрипт](https://gitlab.com/BoxExchanger-public/b2-backups/-/raw/main/b2-new-key.js) который умеет создавать безопасный ключ через API backblaze)\
   **Для этого необходимо:**&#x20;
   1. Клонировать репо:

      <pre class="language-bash"><code class="lang-bash"><strong>cd /root/
      </strong><strong>git clone https://gitlab.com/BoxExchanger-public/b2-backups.git
      </strong></code></pre>
   2. Перейти в папку с проектом:&#x20;

      ```bash
      cd b2-backups
      ```
   3. Установить пакеты:&#x20;

      ```bash
      npm i
      ```
   4. Получить Master KEY (после создания нужно сменить)\
      ![](/files/VzBPW1acwVBWSBHQcaa1)\
      ![](/files/SQwonQ3xJUAUn4RnNHKT)\
      ![](/files/l3GTTJzwHFTsbkTn126j)
   5. Создать ключ:

      ```bash
      npm run new-key
      ```

      B2 application key ID: **keyID** полученный на предыдущем шаге\
      B2 application key: **applicationKey** полученный на предыдущем шаге&#x20;

      ![](/files/2hODUQvSBPbLEd1eobqc)\
      B2 buckets ID:  Buckets -> Your bucket -> **Bucket ID**![](/files/dbLVLHqVJuT5I2IOwGMq)
   6. Копируем полученные ключи для установки их на нашем сервере. (временно сохраняем их у себя в текстовом файле)\
      ![](/files/cdhpBwAj2JZVKmmL8l33)
   7. Пересоздаем ключ полученный на 4.4 шаге для того чтоб старый был более не доступен (копировать его уже не нужно)
5. [Установить rclone](https://rclone.org/install/) на сервер.
6. Установить полученные ключи на сервер для этого используем следующие команды:&#x20;

   ```bash
   rclone config
   ```

   Далее нас запросит ответить на вопросы:

   <pre><code><strong>e/n/d/r/c/s/q> n
   </strong>name> b2
   Storage> 5
   account> (App Key Id c шага 4.6)
   key> (App Key c шага 4.6)
   </code></pre>
7. Конфигурируем `backup.sh` для правильного создания бекап и уведомления администратора.

   ```bash
   cd /root/b2-backups
   nano backup.sh
   ```

   Конфигурируем блок `# -- Configuration --`

   <pre class="language-bash" data-title="backup.sh" data-overflow="wrap"><code class="lang-bash"># rclone remote name.
   RCLONE_REMOTE="b2"
   # b2 bucket name.
   B2_BUCKET="name-project"
   # Telegram Bot Token
   BOT_TOKEN="1234567890:ABCDEF1234567890ABCDEF1234567890ABC"
   # (list) of Telegram Chat IDs.
   # e.g: CHAT_IDS=("1234567890" "0987654321")
   CHAT_IDS=("1234567890")
   </code></pre>

   Описание конфигураций: \
   **RCLONE\_REMOTE** - имя конфигурации rclone (6 шаг указали как name> **b2**)\
   **B2\_BUCKET** - имя корзины в BackBlaze (3 шаг)\
   **BOT\_TOKEN** - Токен телеграм бота полученный в [@BotFather](https://t.me/BotFather) в котором вы нажали кнопку /start\
   **CHAT\_IDS** - ид клиентов telegram которые должны получать уведомление о бекап статусе получить свой ид можно в телеграм боте [@myidbot](https://t.me/myidbot)&#x20;
8. Даем права на запуск bash-script файлу `backup.sh`

   ```bash
   chmod +x backup.sh
   ```

   &#x20;Если скрипт выполнил работу верно последняя строка будет:\
   `Backup completed successfully.`\
   Также в .телеграм вам должно прийти сообщение: \
   `📦 Backup on`` `*`hostname`*` ``completed successfully.`
9. Проверяем работу бекап скрипта&#x20;

   ```bash
   ./root/b2-backups/backup.sh
   ```
10. Устанавливаем авто бекап по крону (в примере каждый день в 4 ночи по времени сервера обычно по GMT)&#x20;

    ```bash
    (crontab -l; echo "0 */4 * * * bash /root/b2-backups/backup.sh >> /tmp/bk.log 2>&1") | crontab -
    ```

{% hint style="info" %}
Для работы скрипта необходимы права **root**.\
\
По умолчанию скрипт ищет конфигурацию API в папке \
`/var/www/exchanger-api/config/app_config.json`.\
Если у вас иной путь исправьте `BOXEXCHANGER_API_PATH` в файле `backup.sh` в разделе \
`# -- Init Default Vars --`\
`В файле конфигурации обязательно должен быть uri к mongodb`&#x20;
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://manual.boxexchanger.net/dlya-razrabotchikov/nastroika-bekap-na-b2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
