Инструкция: бэкап GitHub

Наш код стоит очень много денег. Мы тратим на его создание сотни тысяч долларов, но совершенно не заботимся о сохранности — храним на одном коммерческом сервисе. Простой способ делать автоматические бэкапы.

Я храню все свои проекты на GitHub, и недавно задумался о бэкапе. Не проблема сохранить сам код — просто клонируем репозиторий и все хорошо. Остаются ишью, пулреквесты, комментарии, вики.

Есть отличный скрипт на Python — python-github-backup. Но это Python, а значит проблемы с версиями, установкой зависимостей и виртуальными окружениями. Я не люблю этих сложностей, поэтому хотел найти докер-контейнер, который бы прятал внутри себя этот скрипт.

И такой контейнер существует — github-backup-docker. Пользоваться им супер просто.

Инструкция

Сначала нужно выпустить токен для доступа к GitHub API. В разделе Personal access tokens нажимаем кнопку Generate new token и даем ему доступ на чтение всего что собираемся бэкапить.

Для использования нужна любая машина, на которой можно запускать докер-контейнеры. Я взял сервер на DigitalOcean, там можно выбрать версию с предустановленным докером, стоит минимальный дроплет всего 5 долларов в месяц.

Не обязательно на дроплете размещать только бэкап GitHub, можно там же запускать еще что-нибудь.

На сервере следует разместить примерно такой docker-compose.yml:

version: "2"

services:
    github-backup:
        image: umputun/github-backup:latest
        container_name: "github-backup"
        hostname: "github-backup"
        restart: always
        logging:
            driver: json-file
            options:
                max-size: "10m"
                max-file: "5"
        environment:
            - GITHUB_USER=name_1,name2,name_2
            - TOKEN=token
            - MAX_BACKUPS=2
            - TIME_ZONE=Europe/Moscow
        volumes:
            - ./data:/srv/var

Где:

  • name_1, name_2, name_3 — те GitHub пользователи или организации, которые следует бэкапить.
  • token — ранее полученный токен для доступа к GitHub API.
  • ./data — относительный путь до папки на сервере, куда следует складывать бэкапы.

Еще можно установить TIME_ZONE (папки, куда кладутся бэкапы содержат в имени время, удобно когда оно местное) и MAX_BACKUPS(полезно хранить не только последнюю доступную версию, но и пару предыдущих).

После первичной настройки запускаем контейнер командой docker-compose up -d и получаем удовольствие. Каждый день контейнер будет выкачивать все данные из указанных GitHub аккаунтов и сохранять их на диск.

Для параноиков

Конечно, бэкап на DigitalOcean — тоже не панацея. На мой взгляд, эти действия необходимо проделать, как минимум, на двух независимых серверах. В идеале, один из них должен стоять в вашем доме.

Резюме

Последнее время в работе GitHub все чаще наблюдаются сбои. За май зафиксировано три эпизода частичной доступности, за июнь — два. Я не готов доверять код сервису, который так относится к надежности работы, но и терять в удобстве использования, переезжая на альтернативные решения не хочется.

Потратив 10 минут времени и совсем немного денег можно обеспечить себе спокойную жизнь, удобство и комфорт работы.