Как установить и настроить Restic REST-сервер в Linux
Restic — эффективная и современная система резервного копирования с дедупликацией, поддерживающая шифрование; он может хранить резервные копии локально и удаленно, через соединение SFTP или на одной из многих поддерживаемых платформ хранения, таких как корзины Amazon S3 и облачное хранилище Google. Используя серверный API restic REST, также можно отправлять резервные копии с использованием протоколов HTTP или HTTPS на удаленный сервер, который реализует API restic REST.
В этом руководстве мы узнаем, как использовать Docker для развертывания и настройки экземпляра рестикированного сервера REST в Linux.
В этом уроке вы узнаете:
- Как развернуть REST-сервер Restic с помощью Docker в Linux
- Как настроить аутентификацию и использовать шифрование SSL/TLS
Создание каталога репозитория и генерация учетных данных
Прежде чем мы сможем развернуть наш restic REST-сервер с помощью Docker, нам нужно выбрать каталог, в котором будет размещен наш репозиторий и данные резервного копирования. Для этого урока я создам каталог «data» внутри своего HOME. Этот каталог будет смонтирован по привязке внутри контейнера:
$ mkdir ~/data
Restic REST-сервер, работающий внутри Docker-контейнера, имеет включенную по умолчанию аутентификацию. Это важно для того, чтобы избежать несанкционированного доступа к нашим данным. Аутентификация остального сервера REST реализуется через файл .htpasswd; сервер REST ищет этот файл в том же каталоге, где хранятся снимки.
Чтобы сгенерировать учетные данные для аутентификации, нам нужно использовать утилиту htpasswd. В Fedora и ее дистрибутивах эта утилита включена в пакет httpd-tools. Мы можем установить его с помощью dnf:
$ sudo dnf install httpd-tools
Вместо этого в Debian и дистрибутивах на его основе пакет называется apache2-utils:
$ sudo apt-get update && sudo apt-get install apache2-utils
Чтобы заполнить файл .htpasswd, мы запускаем:
$ htpasswd -B -c ~/data/.htpasswd resticuser
С помощью приведенной выше команды мы создаем конфигурацию, необходимую для доступа к серверу с именем пользователя «resticuser». Если мы не укажем пароль непосредственно в качестве аргумента команды, нам будет предложено ввести его в интерактивном режиме:
New password:
Re-type new password:
Adding password for user restserver
Поскольку мы использовали опцию -B
, пароль будет хеширован с использованием алгоритма bcrypt, который считается очень безопасным.
Запуск контейнера restic REST-сервера
Restic REST-сервер — это бесплатное программное обеспечение с открытым исходным кодом; Как и приложение restic, оно написано на Go и разработано на GitHub. Самый быстрый и простой способ развернуть REST-сервер — использовать Docker (или Podman) для запуска контейнера на основе образа сервера, предоставленного проектом и доступного на DockerHub. Чтобы создать и запустить контейнер REST-сервера Restic, все, что нам нужно сделать, — это использовать следующую команду:
$ docker run -p 8000:8000 -v ~/data:/data:z --name restic_rest_server docker.io/restic/rest-server
Давайте посмотрим на параметры, которые мы использовали с командой. По умолчанию сервер REST внутри контейнера прослушивает порт 8000, поэтому мы использовали опцию -p
, чтобы сопоставить порт 8000 на хосте с тем же портом внутри контейнера (мы могли бы использовать любой порт хоста , например порт 80, но используя непривилегированный порт, мы можем легко создать контейнер от имени пользователя без полномочий root. Посмотрите это руководство. Если вы хотите использовать более высокий порт при запуске Docker или Podman без привилегий root).
Чтобы сделать резервные копии постоянными, как было сказано ранее, мы привязали каталог ~/data
на хосте к тому же каталогу внутри контейнера, где хранятся снимки. В примере мы использовали параметр :z для монтирования привязки: это требуется только в том случае, если SELinux активен, и вызывает изменение контекста смонтированного каталога, чтобы он был доступен из контейнера.
Инициализация репозитория
На этом этапе мы уже должны иметь возможность инициализировать restic-репозиторий с помощью restic-клиента, используя URL-адрес rest:http://resticuser:resticpassword@localhost:8000:
restic -r rest:http://resticuser:resticpassword@localhost:8000 init
Если все пойдет так, как ожидалось, репозиторий будет сгенерирован и инициализирован правильно:
created restic repository 0216975ff5 at rest:http://resticuser:***@localhost:8000/
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Хотя репозиторий был сгенерирован правильно, нам следует избегать передачи учетных данных через HTTP-соединение в виде открытого текста. Чтобы использовать сервер REST через HTTPS, нам необходимо использовать сертификат SSL/TLS. Давайте посмотрим, как это сделать.
Использование безопасного HTTPS-соединения
Есть много способов получить сертификат SSL/TLS. Если мы намерены предоставить доступ к нашему restic REST-серверу Интернету, нам необходимо использовать действительный сторонний сертификат для нашего домена. Мы можем легко получить его от Let’s Encrypt, используя certbot. Однако, если мы просто хотим выполнить некоторые тесты или планируем использовать наш сервер исключительно в нашей собственной сети, достаточно сгенерировать самозаверяющий сертификат.
Здесь я предполагаю, что у нас уже есть сертификат (который содержит открытый ключ) и закрытый ключ, хранящиеся как public_key и private_key соответственно. Самый простой способ использовать их с сервером REST, работающим внутри контейнера докеров, — это разместить оба в каталоге данных, который мы смонтировали с помощью привязки внутри контейнера (тот же каталог, где находится файл .htpasswd). ) и запустите сервер, используя опцию --tls
. Однако, поскольку мы не запускаем сервер напрямую, нам необходимо передать эту опцию через переменную среды OPTIONS
при запуске контейнера:
$ docker run -p 8000:8000 -v ~/data:/data:z -e OPTIONS="--tls" --name restic_rest_server docker.io/restic/rest-server
Теперь мы можем общаться с сервером через HTTPS. Поскольку в данном случае мы использовали недействительный самозаверяющий сертификат, нам нужно запустить restic-клиент с опцией --insecure-tls
, которая пропускает проверку TLS-сертификата при подключении к репозиторию:
$ restic -r rest:https://resticuser:resticpassword@localhost:8000 --insecure-tls init
Выводы
В этом руководстве мы узнали, как развернуть REST-сервер REST с помощью Docker в Linux. С помощью Restic мы можем создавать резервные копии локально или удаленно, используя соединения SFTP, одну из поддерживаемых сторонних служб хранения или сервер Restic REST. Последний обеспечивает лучшую производительность по сравнению с SFTP и дает нам возможность запускать соединения только для добавления. Чтобы узнать больше о Restic и о том, как выполнять эффективное резервное копирование, вы можете просмотреть наше пошаговое руководство.