Руководство описывает, как модифицировать Bash скрипт для создания резервной копии базы данных PostgreSQL внутри Docker контейнера, загрузки бэкапа на FTP-сервер и удаления старых файлов бэкапа.
- Установленный Docker
- Доступ к контейнеру с PostgreSQL
- Данные для доступа к FTP-серверу
-
Install pack on ubuntu
sudo apt install curl lftp
-
Установка переменных: В начале скрипта определите переменные для путей к директориям, именам контейнеров, деталям базы данных и учётным данным FTP.
BACKUP_DIR="/путь/к/бэкапу" CONTAINER_NAME_PART="часть-имени-контейнера" POSTGRES_DB="имя_вашей_бд" POSTGRES_USER="пользователь_бд" FTP_USER="пользователь_ftp" FTP_PASSWORD="пароль_ftp" FTP_HOST="ftp.server.com" FTP_DIR="/путь/на/ftp" DAYS_OLD=7
-
Поиск ID контейнера: Используйте
docker ps
для поиска ID вашего контейнера по части его имени.CONTAINER_ID=$(docker ps | grep $CONTAINER_NAME_PART | awk '{print $1}')
-
Бэкап базы данных: Выполните команду
pg_dump
внутри вашего контейнера для создания бэкапа.docker exec -e PGPASSWORD=$POSTGRES_PASSWORD $CONTAINER_ID pg_dump -U $POSTGRES_USER $POSTGRES_DB > $BACKUP_FILE_NAME
-
Загрузка на FTP: Используйте
curl
для загрузки файла бэкапа на ваш FTP-сервер.curl -T ${BACKUP_FILE_NAME} --user ${FTP_USER}:${FTP_PASSWORD} ftp://${FTP_HOST}${FTP_DIR}/
-
Удаление старых файлов локально: Используйте
find
для удаления файлов бэкапа, которым большеDAYS_OLD
дней.find $BACKUP_DIR -type f -name "*.sql" -mtime +$DAYS_OLD -exec rm {} \;
-
Удаление старых файлов на FTP: Используйте
lftp
для подключения к FTP-серверу и удаления старых файлов.lftp -u ${FTP_USER},${FTP_PASSWORD} ${FTP_HOST} <<EOF set ssl:verify-certificate no cd ${FTP_DIR} cls -1 --sort=date | awk 'NR>$DAYS_OLD' | xargs -r -d '\n' rm bye EOF