S3cmd — консольная утилита для работы с S3-совместимыми хранилищами в Linux и macOS. Легче AWS CLI, устанавливается из репозитория и удобна для скриптов резервного копирования.
Что понадобится
Access Key и Secret Key из личного кабинета и доступ к серверу по SSH.
Шаг 1. Установка
Debian и Ubuntu:
sudo apt update
sudo apt install s3cmd
CentOS, Rocky Linux и AlmaLinux:
sudo dnf install s3cmd
Через менеджер пакетов Python:
pip3 install s3cmd
Шаг 2. Настройка
Запустите мастер настройки:
s3cmd --configure
Введите значения: Access Key и Secret Key из личного кабинета, Default Region — us-east-1, S3 Endpoint — s3.hostflyby.net, шаблон DNS для бакетов — %(bucket)s.s3.hostflyby.net, шифрование оставьте пустым, Use HTTPS protocol — Yes.
После проверки соединения сохраните настройки. Они запишутся в файл ~/.s3cfg.
Шаг 3. Основные команды
Список бакетов:
s3cmd ls
Список файлов в бакете:
s3cmd ls s3://имя-бакета/
Создание бакета:
s3cmd mb s3://имя-бакета
Загрузка файла:
s3cmd put файл.zip s3://имя-бакета/
Загрузка каталога целиком:
s3cmd put -r /путь/к/каталогу s3://имя-бакета/
Скачивание файла:
s3cmd get s3://имя-бакета/файл.zip
Синхронизация каталога:
s3cmd sync /путь/к/каталогу/ s3://имя-бакета/backups/
Удаление файла:
s3cmd del s3://имя-бакета/файл.zip
Загрузка с открытым доступом по ссылке:
s3cmd put --acl-public файл.jpg s3://имя-бакета/
Шаг 4. Резервное копирование по расписанию
Создайте скрипт /usr/local/bin/backup-s3cmd.sh:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
tar -czf /tmp/site-$DATE.tar.gz /var/www
mysqldump -u root -pПАРОЛЬ --all-databases | gzip > /tmp/db-$DATE.sql.gz
s3cmd put /tmp/site-$DATE.tar.gz s3://имя-бакета/backups/
s3cmd put /tmp/db-$DATE.sql.gz s3://имя-бакета/backups/
rm /tmp/site-$DATE.tar.gz /tmp/db-$DATE.sql.gz
Сделайте скрипт исполняемым и добавьте задание в cron:
chmod +x /usr/local/bin/backup-s3cmd.sh
crontab -e
0 4 * * * /usr/local/bin/backup-s3cmd.sh
Пароль базы данных в скрипте лучше вынести в файл ~/.my.cnf с правами 600, чтобы он не отображался в списке процессов.
Частые ошибки
ERROR: S3 error: 403 Access Denied. Проверьте ключи в файле ~/.s3cfg и права доступа к бакету.
ERROR: SSL certificate verify failed. Убедитесь, что в настройках включён HTTPS, а системные корневые сертификаты обновлены.
Бакет не открывается по имени. Проверьте параметр host_bucket в ~/.s3cfg: он должен соответствовать шаблону %(bucket)s.s3.hostflyby.net
