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

Поделиться
HTML-код
  • Опубликовано: 28 окт 2024

Комментарии • 104

  • @Murrengan
    @Murrengan 4 года назад +27

    Этот формат - королевский подгон!
    Понятная речь, доступный формат, минимум понтов.
    Узнал за 20 минут больше фишек, чем за 2 крайних месяца.
    Лайк!

    • @motigold6073
      @motigold6073 4 года назад

      Это значит ты у него спиздел «здорова кротоны»?

    • @woodenproduction21
      @woodenproduction21 4 года назад

      да прибудет с ним сила!

    • @avbolshakov
      @avbolshakov 4 года назад +1

      крайних?

    • @Chel1k7
      @Chel1k7 7 месяцев назад

      Если ты узнал за 20 минут больше чем за 2 месяца, значит ты 2 месяца ничего не делал)

  • @masterbpr0
    @masterbpr0 4 года назад +9

    Спасибо за ваш труд! Было очень интересно и очень полезно! В комуфляже вы супер выглядете.

  • @poacher9834
    @poacher9834 2 года назад

    Спасибо тебе большое за то что делишься такой информацией. Благодаря тебе сэкономил огромное количество времени. Все доходчиво и понятно разобрано!

  • @ИванИванов-н9т9ъ
    @ИванИванов-н9т9ъ 4 года назад +2

    Такому видео я с удовольствием поставил лайк. Спасибо автору.

    • @t0digital
      @t0digital  4 года назад +1

      Спасибо 👍

  • @MrVindor
    @MrVindor 4 года назад +1

    Интересно посмотреть на чужую реализацию, сам делал такую скриптину на дамп в S3. О шифровании и сжатия не подумал, + юзать os. для вызова команды не догадался и ставил фабрику. Еще из различий, выносил в .env ключи и прочие переменные, чтобы было удобно ставить на любой сервак и просто загружать в крон.
    В очередной раз лайк за видос, максимум информации простым языком и без воды.

    • @t0digital
      @t0digital  4 года назад +1

      Да, на гитхабе я тоже вынес в env переменные, так лучше, конечно. На гитхабе немного отрефаченная версия. Спасибо!

  • @andreev09
    @andreev09 4 года назад +1

    отличные видосы, каждый смотрю с удовольствием! спасибо

  • @art61017
    @art61017 4 года назад

    Огромное спасибо! Сэкономил кучу времени, посмотрев данный мануал.. Подписался, лайк поставил!

    • @t0digital
      @t0digital  4 года назад

      Отлично! Рад, что полезно!

  • @yodapunishes
    @yodapunishes 4 года назад +1

    Супер, спасибо!
    Алексей, сделай, пожалуйста, видео о том, как организовать проект на сервере. Не могу понять как лучше это сделать для автоматизации, а именно:
    - что должно быть в докер-контейнере, а что туда не надо класть?
    - где должен быть, например, Nginx? Его настраивать в том же контейнере? Или один раз настроить на сервере? А зачем тогда есть официальный контейнер?
    - по статике жду видео :)
    - как "располагать" сервер БД
    - и т.д.
    В моем понимании сейчас схема выглядит так:
    - купили сервер, настроили доступ, Nginx, DB
    - пулл реквест в VCS
    - CI инструменты прогоняют тесты, в случае успеха собирают контейнер, отправляют его в докерхаб
    - из докерхаба он вытаскивается на сервер
    - на сервере старый останавливается, новый запускается
    - если 200, старый удаляется
    Очень хотелось бы узнать твой опыт и рассуждения на эту тему

  • @dagamandking8670
    @dagamandking8670 4 года назад +1

    Как всегда информативно .

  • @Keriokutori
    @Keriokutori 4 года назад

    Понравился формат изложения: прошлись по каждой функции, описали когда она вызывается и что делает! Супер!
    P.S. Было бы здорово, если бы выпускали больше видео для начинающих) Спасибо!

    • @t0digital
      @t0digital  4 года назад +1

      Стараюсь делать и для новичков, и для продвинутых. Возможно с упором на вторых, потому что материалов для новичков уже есть много

  • @mortea.k.a1925
    @mortea.k.a1925 4 года назад +4

    Дядь, ты положительный брат-близнец Руслана Гительмана!

    • @t0digital
      @t0digital  4 года назад +1

      хорошо, если положительный:)

  • @googleadmin4749
    @googleadmin4749 3 года назад

    При декомпрессии бэкапа перед заливкой его в БД PG не стоит сверить контрольные суммы или еще чего что бы исключить возможность ошибок при архивации и распаковки?

  • @savel2work
    @savel2work 4 года назад +2

    Ого! А я обычным простеньким bash скриптом в папочку на сервере сохраняю дампы и гзипнутую папку media. Ваше решение явно лучше.

  • @serhiiriznychenko4108
    @serhiiriznychenko4108 4 года назад +2

    Превьюшка напомнила улыбку Дукалиса :)

    • @t0digital
      @t0digital  4 года назад +1

      Это наша корова!

  • @deep_development
    @deep_development 4 года назад +2

    Я хочу видос про то как статику хранить в Яндекс Облаке)))))

  • @АнтонинаСмет
    @АнтонинаСмет 4 года назад

    Как всегда лайк ,спасибо !

  • @kl45gp
    @kl45gp Год назад

    спасибо!

  • @jth.000
    @jth.000 4 года назад +3

    Hello darkness, my old friend. Уж простите, но в начале видео Вы какой-то сероватый
    и сразу же как-то вспомнилось 😂

    • @t0digital
      @t0digital  4 года назад

      Пробую разные цветовые профили)))

  • @TheApgreyd
    @TheApgreyd 4 года назад

    Хотелось бы увидеть Ваш список рекомендуемой литературы!

  • @nexgenua
    @nexgenua 4 года назад

    Прибить продакш базу - это же лучший квест, как провести весело выходные)

    • @t0digital
      @t0digital  4 года назад +1

      Мы быстро подняли, но минут 10 сервис лежал. Опыт дело такое:)

  • @stsvalekseev
    @stsvalekseev 4 года назад

    Интересно и по существу.

    • @t0digital
      @t0digital  4 года назад

      Рад, что полезно 💪

  • @andriiderkach8744
    @andriiderkach8744 4 года назад

    У меня возник вопрос: почему connection не закрываем? Мне все время толдычили что нужно закрывать все ресурсы, которые используются в скрипте...
    В сурсе я увидел with statement, но это только один раз :(
    Почему не создать функцию, которая вернёт объект connection, а в других функциях не использовать его в качестве аргумента... А уже в конце этот connection закрыть...
    Или нету смысла париться на счёт закрытие ресурса?

  • @constantinemanoilo5148
    @constantinemanoilo5148 4 года назад

    Спасибо за видео, как раз периодический делаю дамп базы данных, теперь еще и хранилище подключу.
    Подскажите, где правильней хранить дамп с БД приложении Джанго на сервере? в папке Media?

    • @t0digital
      @t0digital  4 года назад +1

      Папка media может быть открыта через веб (иногда открыта), тогда базу сможет скачать любой делающий. Лучше класть в директорию, точно закрытую от веб, в любое место. Я использую /tmp как временное хранилище перед выгрузкой в облако

  • @КириллКалита-ч3ж
    @КириллКалита-ч3ж 4 года назад

    Круто)

  • @JeffandFantom
    @JeffandFantom Год назад

    Я не понял от куда там credential взялся в папке .aws?

  • @BadekYO
    @BadekYO 4 года назад +1

    Все прекрасно, но меня мучает вопрос, почему на 16:52 не "Database decrypted", впрочем это уж точно мелочи.
    p.s.
    Можно было бы вставить ещё пару слов про использование сайтовский exit в скриптах вместо "правильного" sys.exit. Зная любовь автора канала к чистому и красивому коду, это выглядит немного странно.

  • @РусланМузипов-х8ь
    @РусланМузипов-х8ь 4 года назад +2

    Лайк

  • @AlexCoder007
    @AlexCoder007 Год назад

    крутяк ..

  • @dimachen86
    @dimachen86 4 года назад

    Алексей, спасибо за Ваши видео. Очень познавательно. Если будет возможность, запишите, пожалуйста, видео, как делать подобные python скрипты "user friendly", чтобы люди, которые ничего не знают о командной строке могли бы их как-то запускать.

    • @t0digital
      @t0digital  4 года назад

      Я думаю, что такие штуки - для программеров или админов, они должны уметь запускать их в командной строке. А программы для обычных людей на питоне можно собирать в готовые исполнимые пакеты (exe для Windows, например), хотя там всё равно есть много нюансов с зависимостями, их надо хорошо тестировать в разных версиях операционной системы

    • @dimachen86
      @dimachen86 4 года назад

      @@t0digital Спасибо за ответ. Понял. Значит сложности с этим ) Версия операционной системы обновилась и ничего у заказчика не работает.

    • @t0digital
      @t0digital  4 года назад

      вариантов, что могло произойти, много, надо смотреть по ошибке. Что пишет, в чем ошибка?

    • @dimachen86
      @dimachen86 4 года назад

      @@t0digital Нет. Я просто общий случай рассматриваю. Прикидываю стоит в это ввязываться или нет, если такое заказчик попросит. В основном программы пишу для веба.

  • @cotfedor8058
    @cotfedor8058 4 года назад

    Катан) продолжай пожалуйста) я учу python для себя) ты для меня пример для подражания))))

  • @KhanDV
    @KhanDV 4 года назад +1

    о, котан, поправился )

    • @t0digital
      @t0digital  4 года назад

      Жду окончания карантина, ага:)

  • @damntho8540
    @damntho8540 4 года назад +1

    Народ, привет!
    Важная заметка:
    Если у Вас итоговый бекап больше 1.9 Гб - не используйте openssl
    Если зашифровать, с флагом -stream, ещё реально - то вот расшифровка таких файлов становится невозможной средствами openssl --decrypt
    Поскольку в сурс коде есть зашитый лимит на выделение памяти через маллок, куда будет выгружаться архив
    Смотрите в стороны gpg и его потокового шифрования

  • @aleom38
    @aleom38 4 года назад

    Все круто, можно расширить тему по удаленному поднятию db PostgreSQL из скрипта python с одного сервера на другом. Дней 15 бился над этой проблемой и бросил не решив ее. Не проходит из-за прав пользователя. Именно создание базы и пользователя

  • @woodooley
    @woodooley 4 года назад

    Гительман здорового человека)

  • @jeep456789
    @jeep456789 4 года назад

    Приветствую дружище, большой привет с Урала, как всегда приятно смотреть твои выпуски, но что с твоим имиждем ? Вместо стива джобса какой то егерь )))

    • @t0digital
      @t0digital  4 года назад

      Спасибо! С чёрными футболками пока напряжёночка, напряжёночка:)

  • @xm4dn355x
    @xm4dn355x 4 года назад

    Алексей! Воу! А как главы в видео добавлять?) это только с новыми видео работает?)

    • @t0digital
      @t0digital  4 года назад +1

      Вы их видите на этом видео? Я на этом видео только в инкогнито главы вижу:) Это пока не для всех ютуб включил. Вот как их делать:
      1) таймлайны должны начинаться с 0:00 (с 00:00 тоже работает)
      2) в таймлайнах должно быть больше трех меток (глав)
      3) таймлайны должны идти строго друг за другом по времени (если не соблюдена последовательность - не сработает)
      4) расстояние между ближайшими таймлайнами - 10 сек и больше
      5) таймлайн-навигацию нужно распологать в описании к видео

    • @xm4dn355x
      @xm4dn355x 4 года назад

      @@t0digital Да, вижу)) причем залогиненный)) я чего и удивился когда главы увидел)) Спасибо за пояснения)))

    • @t0digital
      @t0digital  4 года назад +3

      О, отлично! Значит всем, кроме меня на моих видосах это уже видно, здорово:)

    • @MadMike93
      @MadMike93 4 года назад

      @@t0digital Странно, а с этого аккаунта не работают главы(((

    • @tech_shirt
      @tech_shirt 4 года назад +1

      @@t0digital А с этого - работают))) Причем вижу главы даже у своих видео)) сейчас затестил по Вашей инструкции написал таймкоды в описании к первому видео на канале и магия заработала))

  • @СергейБакин-ф7р
    @СергейБакин-ф7р 4 года назад

    делай добро и ...делись с людьми. Респект!
    PS// Fabric же есть...www.fabfile.org/

  • @naillatypov1
    @naillatypov1 4 года назад

    Примерно тоже самое делаю - но на bash+s3cmd

  • @clinteastwood957
    @clinteastwood957 4 года назад

    А ты не тот чувак с собеседования hexlet? Если да, расскажи, чем дело кончилось?)

    • @t0digital
      @t0digital  4 года назад

      Это не я тот чувак)

  • @limonred5283
    @limonred5283 4 года назад

    Крута тута)

  • @fatoldman340
    @fatoldman340 2 года назад

    Если пришлось перевыпустить сертификат, старые архивы протухнут?

    • @t0digital
      @t0digital  2 года назад

      Без старых ключей шифрования расшифровать не получится, если речь об этом

  • @neodzen
    @neodzen 4 года назад

    pg_dump не для больших баз данных. На больших он уже работает долго. У себя используем pgBackRest

    • @t0digital
      @t0digital  4 года назад

      Мы планируем яндексовый WAL-G прикручивать с ростом базы. Да, pg_dump это скорее инструмент разработки, не администрирования

  • @msdios1227
    @msdios1227 4 года назад

    Здаров, котан!!!

  • @artcom_net
    @artcom_net 4 года назад +1

    Все хорошо, но я бы не хардкодил константы в скрипте. Лучше передать их как cli args и задать значения по умолчанию, если таковые требуются.

    • @t0digital
      @t0digital  4 года назад

      в версии на гитхабе это есть

  • @Sensys93
    @Sensys93 4 года назад

    Когда видео с code review??

  • @tensorflow4749
    @tensorflow4749 4 года назад

    Доброго времени суток, может кто поможет советом, делаю для формы(Django) регистрации рекапчу подключаю библиотеку requests для обращения к гугл апи, и получаю ошибку ModuleNotFoundError: No module named 'requests' , захожу по ssh на сервер Ubuntu 20 там стоит питон 3.8 проверяю зависимости через pip freeze - библиотека присутствует, пробовал удалить и установить но возникает проблема что я и удалить пакет не могу так как он отсутствует. Хотя физически он есть. Запускал питон в консоли и пробовал импортировать библиотеку там и там она импортируется без проблем. В виртуальном окружении эта библиотека тоже есть но почему то джанго не может её найти. Такая проблема впервые и буду благодарен за любые советы, спасибо

  • @alekskandrpetushkov
    @alekskandrpetushkov 3 года назад

    Почему просто не запаролить архив?

  • @dmmeteo
    @dmmeteo 4 года назад

    А почему `unencrypt_...` а не `decrypt_...` сам флаг команды openssl намекает на такой нейминг?)))

  • @LossevSergey
    @LossevSergey Год назад

    У Яндекс.Облака ограничение 5 Гб на один файл в S3. В текущей реализации может не влезть

  • @luckerspirit9196
    @luckerspirit9196 4 года назад

    Вроде бы у яндекса есть апишка для обычного диска, нужно что то подобное сделать)

    • @t0digital
      @t0digital  4 года назад

      Да, там раньше был webdav, если не прикрыли

  • @villainmadless1503
    @villainmadless1503 4 года назад

    А яндекс за хранение бэкапов не банит?

    • @t0digital
      @t0digital  4 года назад +1

      Нет, конечно, он же платный, ему пофик что вы храните. Ну, в рамках законодательства, думаю:). Стоимость холодного хранилища (для бэкапов) на сегодня 67 коп в месяц за 1 Гб. Стандартного (для статики на сайте) 1.26 руб в месяц за 1 Гб, то есть буквально копейки

  • @dx30-ln3blank7
    @dx30-ln3blank7 3 года назад

    Хорошие скрипты, но эмоджи в терсинале вызывают сомнения.

  • @shahruhkasimov2035
    @shahruhkasimov2035 4 года назад

    В скрипте loader импорт pytz необязателен

    • @t0digital
      @t0digital  4 года назад

      убрал на github'е, там местами отрефаченный код. Да, python это не go, где так вот не наимпортишь лишнего)

  • @saskek1895
    @saskek1895 4 года назад +1

    а где здарова котаны?

    • @t0digital
      @t0digital  4 года назад +3

      Где-то рядом:)

  • @andreya.gorbunov7458
    @andreya.gorbunov7458 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 года назад +3

      В описании видео есть пометка о том, что здесь мы на pg_dump. WAL-G хорош для больших баз под нагрузкой, но он сложнее pg_dump и в для простых случаев избыточен, стрелять из пушки по воробьям.
      Касательно aws-cli - в нашем случае нужно больше гибкости, чем простая цепочка с aws-cli, и кастомные скрипты её дают. Проверка hostname в restore скрипте, например. Понятно, что это можно написать на bash - ну а можно на более читаемом питоне.
      Касательно поддержки - всё нужно аккуратно поддерживать. И aws_cli тоже надо ставить, конфигурить, обновлять и следить, чтобы ничего не сломалось, ноль разницы с virtualenv, который к тому же уже на сервере настроен, если проект на питоне.
      По сути вопрос здесь в том, на чем писать такие админские задачи - вы вероятно за bash, а я за питон. Есть вообще кто на js такое пишет, и нормально себя чувствует. Все варианты хороши:)

  • @karmicdude-
    @karmicdude- 4 года назад +1

    писать такое на питоне грешно

    • @t0digital
      @t0digital  4 года назад +1

      я в надежде, что нас не покарают

  • @synthographyst
    @synthographyst 2 года назад

    ты за два года стал готовится к мобилизации? :)

    • @t0digital
      @t0digital  2 года назад

      коммент в тему сентября 2022:)