Шифруем и бэкапим PostgreSQL в Яндекс Object Storage / S3 на Python

  Рет қаралды 14,504

Диджитализируй!

Диджитализируй!

Күн бұрын

Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
Резервное копирование баз данных - всегда актуально. В этом видео мы покажем, как написать два Python скрипта, один снимает полный дамп с PostgreSQL, затем архивирует, шифрует и загружает его в Яндекс Object Storage (S3-совместимое хранилище); а второй - выкачивает последний по времени дамп базы из хранилища, расшифровывает его, распаковывает и накатывает на БД.
Исходники - github.com/alexey-goloburdin/... (прочтите описание, код из видео и в репозитории несколько отличаются).
Яндекс утилиту WAL-G здесь не используем, только стандартный pg_dump. Возможно, в следующих видео расскажем о WAL-G:)
0:00 О скриптах резервного копирования PostgreSQL
0:30 О Яндекс Object Storage / S3
1:07 Обзор скрипта бэкапа
4:44 Шифрование бэкапов с openssl
5:40 Продолжение обзора скрипта бэкапа
10:48 Emoji и разноцветный текст в консоли
11:45 Просмотр всех бэкапов в браузере
12:08 Обзор скрипта автоматической распаковки бэкапа в PostgreSQL
18:45 Выводы
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...

Пікірлер: 104
@Murrengan
@Murrengan 4 жыл бұрын
Этот формат - королевский подгон! Понятная речь, доступный формат, минимум понтов. Узнал за 20 минут больше фишек, чем за 2 крайних месяца. Лайк!
@motigold6073
@motigold6073 4 жыл бұрын
Это значит ты у него спиздел «здорова кротоны»?
@woodenproduction21
@woodenproduction21 4 жыл бұрын
да прибудет с ним сила!
@avbolshakov
@avbolshakov 4 жыл бұрын
крайних?
@Chel1k7
@Chel1k7 3 ай бұрын
Если ты узнал за 20 минут больше чем за 2 месяца, значит ты 2 месяца ничего не делал)
@poacher9834
@poacher9834 2 жыл бұрын
Спасибо тебе большое за то что делишься такой информацией. Благодаря тебе сэкономил огромное количество времени. Все доходчиво и понятно разобрано!
@masterbpr0
@masterbpr0 4 жыл бұрын
Спасибо за ваш труд! Было очень интересно и очень полезно! В комуфляже вы супер выглядете.
@t0digital
@t0digital 4 жыл бұрын
Спасибооо!
@andreev09
@andreev09 4 жыл бұрын
отличные видосы, каждый смотрю с удовольствием! спасибо
@t0digital
@t0digital 4 жыл бұрын
Спасибо!
@art61017
@art61017 3 жыл бұрын
Огромное спасибо! Сэкономил кучу времени, посмотрев данный мануал.. Подписался, лайк поставил!
@t0digital
@t0digital 3 жыл бұрын
Отлично! Рад, что полезно!
@user-lz3ez3nn4j
@user-lz3ez3nn4j 4 жыл бұрын
Как всегда лайк ,спасибо !
@user-oi1zl6de8i
@user-oi1zl6de8i 4 жыл бұрын
Такому видео я с удовольствием поставил лайк. Спасибо автору.
@t0digital
@t0digital 4 жыл бұрын
Спасибо 👍
@yodapunishes
@yodapunishes 4 жыл бұрын
Супер, спасибо! Алексей, сделай, пожалуйста, видео о том, как организовать проект на сервере. Не могу понять как лучше это сделать для автоматизации, а именно: - что должно быть в докер-контейнере, а что туда не надо класть? - где должен быть, например, Nginx? Его настраивать в том же контейнере? Или один раз настроить на сервере? А зачем тогда есть официальный контейнер? - по статике жду видео :) - как "располагать" сервер БД - и т.д. В моем понимании сейчас схема выглядит так: - купили сервер, настроили доступ, Nginx, DB - пулл реквест в VCS - CI инструменты прогоняют тесты, в случае успеха собирают контейнер, отправляют его в докерхаб - из докерхаба он вытаскивается на сервер - на сервере старый останавливается, новый запускается - если 200, старый удаляется Очень хотелось бы узнать твой опыт и рассуждения на эту тему
@dagamandking8670
@dagamandking8670 4 жыл бұрын
Как всегда информативно .
@t0digital
@t0digital 4 жыл бұрын
Спасибо!
@Keriokutori
@Keriokutori 4 жыл бұрын
Понравился формат изложения: прошлись по каждой функции, описали когда она вызывается и что делает! Супер! P.S. Было бы здорово, если бы выпускали больше видео для начинающих) Спасибо!
@t0digital
@t0digital 4 жыл бұрын
Стараюсь делать и для новичков, и для продвинутых. Возможно с упором на вторых, потому что материалов для новичков уже есть много
@MrVindor
@MrVindor 4 жыл бұрын
Интересно посмотреть на чужую реализацию, сам делал такую скриптину на дамп в S3. О шифровании и сжатия не подумал, + юзать os. для вызова команды не догадался и ставил фабрику. Еще из различий, выносил в .env ключи и прочие переменные, чтобы было удобно ставить на любой сервак и просто загружать в крон. В очередной раз лайк за видос, максимум информации простым языком и без воды.
@t0digital
@t0digital 4 жыл бұрын
Да, на гитхабе я тоже вынес в env переменные, так лучше, конечно. На гитхабе немного отрефаченная версия. Спасибо!
@stsvalekseev
@stsvalekseev 4 жыл бұрын
Интересно и по существу.
@t0digital
@t0digital 4 жыл бұрын
Рад, что полезно 💪
@kl45gp
@kl45gp Жыл бұрын
спасибо!
@cotfedor8058
@cotfedor8058 4 жыл бұрын
Катан) продолжай пожалуйста) я учу python для себя) ты для меня пример для подражания))))
@user-sf9nn6dh2q
@user-sf9nn6dh2q 3 жыл бұрын
Круто)
@mortea.k.a1925
@mortea.k.a1925 4 жыл бұрын
Дядь, ты положительный брат-близнец Руслана Гительмана!
@t0digital
@t0digital 4 жыл бұрын
хорошо, если положительный:)
@deep_development
@deep_development 4 жыл бұрын
Я хочу видос про то как статику хранить в Яндекс Облаке)))))
@user-ts4di5ud8s
@user-ts4di5ud8s 4 жыл бұрын
Лайк
@savel2work
@savel2work 4 жыл бұрын
Ого! А я обычным простеньким bash скриптом в папочку на сервере сохраняю дампы и гзипнутую папку media. Ваше решение явно лучше.
@AlexCoder007
@AlexCoder007 8 ай бұрын
крутяк ..
@limonred5283
@limonred5283 4 жыл бұрын
Крута тута)
@t0digital
@t0digital 4 жыл бұрын
тута дааа:)
@serhiiriznychenko4108
@serhiiriznychenko4108 4 жыл бұрын
Превьюшка напомнила улыбку Дукалиса :)
@t0digital
@t0digital 4 жыл бұрын
Это наша корова!
@msdios1227
@msdios1227 4 жыл бұрын
Здаров, котан!!!
@aleom38
@aleom38 4 жыл бұрын
Все круто, можно расширить тему по удаленному поднятию db PostgreSQL из скрипта python с одного сервера на другом. Дней 15 бился над этой проблемой и бросил не решив ее. Не проходит из-за прав пользователя. Именно создание базы и пользователя
@jth.000
@jth.000 4 жыл бұрын
Hello darkness, my old friend. Уж простите, но в начале видео Вы какой-то сероватый и сразу же как-то вспомнилось 😂
@t0digital
@t0digital 4 жыл бұрын
Пробую разные цветовые профили)))
@TheApgreyd
@TheApgreyd 4 жыл бұрын
Хотелось бы увидеть Ваш список рекомендуемой литературы!
@woodooley
@woodooley 4 жыл бұрын
Гительман здорового человека)
@t0digital
@t0digital 4 жыл бұрын
Спасибо
@googleadmin4749
@googleadmin4749 2 жыл бұрын
При декомпрессии бэкапа перед заливкой его в БД PG не стоит сверить контрольные суммы или еще чего что бы исключить возможность ошибок при архивации и распаковки?
@KhanDV
@KhanDV 4 жыл бұрын
о, котан, поправился )
@t0digital
@t0digital 4 жыл бұрын
Жду окончания карантина, ага:)
@user-zc3zk8wd8p
@user-zc3zk8wd8p 4 жыл бұрын
делай добро и ...делись с людьми. Респект! PS// Fabric же есть...www.fabfile.org/
@dimachen86
@dimachen86 4 жыл бұрын
Алексей, спасибо за Ваши видео. Очень познавательно. Если будет возможность, запишите, пожалуйста, видео, как делать подобные python скрипты "user friendly", чтобы люди, которые ничего не знают о командной строке могли бы их как-то запускать.
@t0digital
@t0digital 4 жыл бұрын
Я думаю, что такие штуки - для программеров или админов, они должны уметь запускать их в командной строке. А программы для обычных людей на питоне можно собирать в готовые исполнимые пакеты (exe для Windows, например), хотя там всё равно есть много нюансов с зависимостями, их надо хорошо тестировать в разных версиях операционной системы
@dimachen86
@dimachen86 4 жыл бұрын
@@t0digital Спасибо за ответ. Понял. Значит сложности с этим ) Версия операционной системы обновилась и ничего у заказчика не работает.
@t0digital
@t0digital 4 жыл бұрын
вариантов, что могло произойти, много, надо смотреть по ошибке. Что пишет, в чем ошибка?
@dimachen86
@dimachen86 4 жыл бұрын
@@t0digital Нет. Я просто общий случай рассматриваю. Прикидываю стоит в это ввязываться или нет, если такое заказчик попросит. В основном программы пишу для веба.
@naillatypov1
@naillatypov1 4 жыл бұрын
Примерно тоже самое делаю - но на bash+s3cmd
@constantinemanoilo5148
@constantinemanoilo5148 4 жыл бұрын
Спасибо за видео, как раз периодический делаю дамп базы данных, теперь еще и хранилище подключу. Подскажите, где правильней хранить дамп с БД приложении Джанго на сервере? в папке Media?
@t0digital
@t0digital 4 жыл бұрын
Папка media может быть открыта через веб (иногда открыта), тогда базу сможет скачать любой делающий. Лучше класть в директорию, точно закрытую от веб, в любое место. Я использую /tmp как временное хранилище перед выгрузкой в облако
@damntho8540
@damntho8540 4 жыл бұрын
Народ, привет! Важная заметка: Если у Вас итоговый бекап больше 1.9 Гб - не используйте openssl Если зашифровать, с флагом -stream, ещё реально - то вот расшифровка таких файлов становится невозможной средствами openssl --decrypt Поскольку в сурс коде есть зашитый лимит на выделение памяти через маллок, куда будет выгружаться архив Смотрите в стороны gpg и его потокового шифрования
@nexgenua
@nexgenua 4 жыл бұрын
Прибить продакш базу - это же лучший квест, как провести весело выходные)
@t0digital
@t0digital 4 жыл бұрын
Мы быстро подняли, но минут 10 сервис лежал. Опыт дело такое:)
@jeep456789
@jeep456789 4 жыл бұрын
Приветствую дружище, большой привет с Урала, как всегда приятно смотреть твои выпуски, но что с твоим имиждем ? Вместо стива джобса какой то егерь )))
@t0digital
@t0digital 4 жыл бұрын
Спасибо! С чёрными футболками пока напряжёночка, напряжёночка:)
@andreya.gorbunov7458
@andreya.gorbunov7458 4 жыл бұрын
Спасибо за имоджи.😏
@t0digital
@t0digital 4 жыл бұрын
Они хороши)))
@andriiderkach8744
@andriiderkach8744 4 жыл бұрын
У меня возник вопрос: почему connection не закрываем? Мне все время толдычили что нужно закрывать все ресурсы, которые используются в скрипте... В сурсе я увидел with statement, но это только один раз :( Почему не создать функцию, которая вернёт объект connection, а в других функциях не использовать его в качестве аргумента... А уже в конце этот connection закрыть... Или нету смысла париться на счёт закрытие ресурса?
@artcom_net
@artcom_net 4 жыл бұрын
Все хорошо, но я бы не хардкодил константы в скрипте. Лучше передать их как cli args и задать значения по умолчанию, если таковые требуются.
@t0digital
@t0digital 4 жыл бұрын
в версии на гитхабе это есть
@xm4dn355x
@xm4dn355x 4 жыл бұрын
Алексей! Воу! А как главы в видео добавлять?) это только с новыми видео работает?)
@t0digital
@t0digital 4 жыл бұрын
Вы их видите на этом видео? Я на этом видео только в инкогнито главы вижу:) Это пока не для всех ютуб включил. Вот как их делать: 1) таймлайны должны начинаться с 0:00 (с 00:00 тоже работает) 2) в таймлайнах должно быть больше трех меток (глав) 3) таймлайны должны идти строго друг за другом по времени (если не соблюдена последовательность - не сработает) 4) расстояние между ближайшими таймлайнами - 10 сек и больше 5) таймлайн-навигацию нужно распологать в описании к видео
@xm4dn355x
@xm4dn355x 4 жыл бұрын
@@t0digital Да, вижу)) причем залогиненный)) я чего и удивился когда главы увидел)) Спасибо за пояснения)))
@t0digital
@t0digital 4 жыл бұрын
О, отлично! Значит всем, кроме меня на моих видосах это уже видно, здорово:)
@MadMike93
@MadMike93 4 жыл бұрын
@@t0digital Странно, а с этого аккаунта не работают главы(((
@tech_shirt
@tech_shirt 4 жыл бұрын
@@t0digital А с этого - работают))) Причем вижу главы даже у своих видео)) сейчас затестил по Вашей инструкции написал таймкоды в описании к первому видео на канале и магия заработала))
@JeffandFantom
@JeffandFantom Жыл бұрын
Я не понял от куда там credential взялся в папке .aws?
@luckerspirit9196
@luckerspirit9196 4 жыл бұрын
Вроде бы у яндекса есть апишка для обычного диска, нужно что то подобное сделать)
@t0digital
@t0digital 4 жыл бұрын
Да, там раньше был webdav, если не прикрыли
@BadekYO
@BadekYO 4 жыл бұрын
Все прекрасно, но меня мучает вопрос, почему на 16:52 не "Database decrypted", впрочем это уж точно мелочи. p.s. Можно было бы вставить ещё пару слов про использование сайтовский exit в скриптах вместо "правильного" sys.exit. Зная любовь автора канала к чистому и красивому коду, это выглядит немного странно.
@neodzen
@neodzen 4 жыл бұрын
pg_dump не для больших баз данных. На больших он уже работает долго. У себя используем pgBackRest
@t0digital
@t0digital 4 жыл бұрын
Мы планируем яндексовый WAL-G прикручивать с ростом базы. Да, pg_dump это скорее инструмент разработки, не администрирования
@Sensys93
@Sensys93 4 жыл бұрын
Когда видео с code review??
@t0digital
@t0digital 4 жыл бұрын
Скоро
@tensorflow4749
@tensorflow4749 4 жыл бұрын
Доброго времени суток, может кто поможет советом, делаю для формы(Django) регистрации рекапчу подключаю библиотеку requests для обращения к гугл апи, и получаю ошибку ModuleNotFoundError: No module named 'requests' , захожу по ssh на сервер Ubuntu 20 там стоит питон 3.8 проверяю зависимости через pip freeze - библиотека присутствует, пробовал удалить и установить но возникает проблема что я и удалить пакет не могу так как он отсутствует. Хотя физически он есть. Запускал питон в консоли и пробовал импортировать библиотеку там и там она импортируется без проблем. В виртуальном окружении эта библиотека тоже есть но почему то джанго не может её найти. Такая проблема впервые и буду благодарен за любые советы, спасибо
@fatoldman340
@fatoldman340 2 жыл бұрын
Если пришлось перевыпустить сертификат, старые архивы протухнут?
@t0digital
@t0digital 2 жыл бұрын
Без старых ключей шифрования расшифровать не получится, если речь об этом
@clinteastwood957
@clinteastwood957 4 жыл бұрын
А ты не тот чувак с собеседования hexlet? Если да, расскажи, чем дело кончилось?)
@t0digital
@t0digital 4 жыл бұрын
Это не я тот чувак)
@shahruhkasimov2035
@shahruhkasimov2035 4 жыл бұрын
В скрипте loader импорт pytz необязателен
@t0digital
@t0digital 4 жыл бұрын
убрал на github'е, там местами отрефаченный код. Да, python это не go, где так вот не наимпортишь лишнего)
@dx30-ln3blank7
@dx30-ln3blank7 3 жыл бұрын
Хорошие скрипты, но эмоджи в терсинале вызывают сомнения.
@villainmadless1503
@villainmadless1503 4 жыл бұрын
А яндекс за хранение бэкапов не банит?
@t0digital
@t0digital 4 жыл бұрын
Нет, конечно, он же платный, ему пофик что вы храните. Ну, в рамках законодательства, думаю:). Стоимость холодного хранилища (для бэкапов) на сегодня 67 коп в месяц за 1 Гб. Стандартного (для статики на сайте) 1.26 руб в месяц за 1 Гб, то есть буквально копейки
@alekskandrpetushkov
@alekskandrpetushkov 3 жыл бұрын
Почему просто не запаролить архив?
@t0digital
@t0digital 3 жыл бұрын
надёжнее
@LossevSergey
@LossevSergey 8 ай бұрын
У Яндекс.Облака ограничение 5 Гб на один файл в S3. В текущей реализации может не влезть
@dmmeteo
@dmmeteo 3 жыл бұрын
А почему `unencrypt_...` а не `decrypt_...` сам флаг команды openssl намекает на такой нейминг?)))
@saskek1895
@saskek1895 4 жыл бұрын
а где здарова котаны?
@t0digital
@t0digital 4 жыл бұрын
Где-то рядом:)
@Petyaumniy
@Petyaumniy 4 жыл бұрын
Ааа... как это развидеть? Бекапить postgres кустомным скриптом на питоне? Серьезно? Можно же просто в 1 строчку: pg_dump | gzip | openssl | aws-cli В этой же одной строчке можно пульнуть статус бекапа в эластик/прометей/etc и еще чегото сделать, если надо. Зачем так усложнять? Кто с этим потом будет разбираться и как поддерживать? Ставить virtenvs, когда библиотеки с еще нужными для чегонибудь разойдутся по версиям, сам питон обновится? Поражаюсь тому как современное поколение ИТшников безалаберно относится к ничем не мотивированному увеличению сложности. (особенно этим стратают те кто как-то связан с JS) Если хочется хорошего бекапа постгреса есть рассово верный wal-g, а для универсальности бекапа вообще restic. С аналогичным уровнем сервиса b2 сторадж как правило сильно дешевле.
@t0digital
@t0digital 4 жыл бұрын
В описании видео есть пометка о том, что здесь мы на pg_dump. WAL-G хорош для больших баз под нагрузкой, но он сложнее pg_dump и в для простых случаев избыточен, стрелять из пушки по воробьям. Касательно aws-cli - в нашем случае нужно больше гибкости, чем простая цепочка с aws-cli, и кастомные скрипты её дают. Проверка hostname в restore скрипте, например. Понятно, что это можно написать на bash - ну а можно на более читаемом питоне. Касательно поддержки - всё нужно аккуратно поддерживать. И aws_cli тоже надо ставить, конфигурить, обновлять и следить, чтобы ничего не сломалось, ноль разницы с virtualenv, который к тому же уже на сервере настроен, если проект на питоне. По сути вопрос здесь в том, на чем писать такие админские задачи - вы вероятно за bash, а я за питон. Есть вообще кто на js такое пишет, и нормально себя чувствует. Все варианты хороши:)
@karmicdude-
@karmicdude- 4 жыл бұрын
писать такое на питоне грешно
@t0digital
@t0digital 4 жыл бұрын
я в надежде, что нас не покарают
@synthographyst
@synthographyst Жыл бұрын
ты за два года стал готовится к мобилизации? :)
@t0digital
@t0digital Жыл бұрын
коммент в тему сентября 2022:)
아이스크림으로 체감되는 요즘 물가
00:16
진영민yeongmin
Рет қаралды 3,1 МЛН
Heartwarming: Stranger Saves Puppy from Hot Car #shorts
00:22
Fabiosa Best Lifehacks
Рет қаралды 18 МЛН
Внутри S3
31:08
Yandex Cloud
Рет қаралды 3,6 М.
👑 Шифруем файлы и пароли аки Царь с GPG и Pass!
26:53
Диджитализируй!
Рет қаралды 71 М.