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

1. &#x20;Создайте аккаунт в системе <https://www.backblaze.com/>&#x20;
2. Активируйте **B2 cloud storage** для этого: \
   Войдите в аккаунт -> My Settings -> Enabled Products -> \[+] B2 Cloud Storage\
   ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2Fi5dP78No9UFGvf5U9wog%2Fimage.png?alt=media\&token=fd31e8e1-78ed-4724-bc99-01761c2e01c0)
3. Создаем basket куда будем сохранять:\
   ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FNEJOfZDPAeynJy7JKMIk%2Fimage.png?alt=media\&token=7bc07f57-7407-435c-890e-bec7623b5edc)\
   ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F2yKc1GABvbQEecTeWpIv%2Fimage.png?alt=media\&token=09c53f3a-e228-4d80-ba11-647deacf8ef1)
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 (после создания нужно сменить)\
      ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FnYOhW4qkxZCpKRONLhhH%2Fimage.png?alt=media\&token=a644bef6-94e6-4c1e-9357-6312a0e9e1b0)\
      ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F9yy2MYjJDvk5cXw1sd9B%2Fimage.png?alt=media\&token=04c473a9-bbea-4926-ab5f-837d3c1aba91)\
      ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F3wzFarEWbNVfWHmX0Bb0%2Fimage.png?alt=media\&token=7a171469-e17b-431d-9d56-c1e02b129019)
   5. Создать ключ:

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

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

      ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2F19wkHC3WhtKHyXrG7YSU%2Fimage.png?alt=media\&token=5a6a5b23-8077-4bf1-b2f8-4e2d10db98f1)\
      B2 buckets ID:  Buckets -> Your bucket -> **Bucket ID**![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FNFFWdDLVXO4OnjxWJLtg%2Fimage.png?alt=media\&token=c1bb3549-311d-4488-ba19-4eb8edd89367)
   6. Копируем полученные ключи для установки их на нашем сервере. (временно сохраняем их у себя в текстовом файле)\
      ![](https://3272217808-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMtUdLxlDooDfKq13Is6%2Fuploads%2FfzoGmKMtFSRtCvRoJCXl%2Fimage.png?alt=media\&token=4ee1a5b8-38eb-467c-84ca-06cbd60bd5de)
   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 %}
