Отладка кода с помощью прод базы
Недавно к коллеге пришёл баг. Процесс поиска проблемы растянулся на несколько часов. Коллега нашёл нужный микросервис, запустил у себя в Docker (благо это дело работает через Docker) — и... бага не воспроизводится 🤷♂️
Мироксервис имел зависимость от MySQL базы данных. Было решено запустить микросервис локально, НО(!) с базой прода(но в режиме readonly, не волнуйтесь 😅)
Но тут нюанс: база доступна только через SSH-туннель. Просто так из Docker контейнера к ней не достучаться.
Настроить SSH прямо внутри контейнера. Отсюда вытекают такие действия как: установка OpenSSH, пробросить ssh ключи, поднятие соединения и т.д.
Использовать host.docker.internal — это такой специальный адрес, через который контейнер может достучаться до хост-машины. А туннель поднимем на хосте.
Выбрали второй вариант, потому что туннель уже был настроен.
ssh -L 8899:connect-to-db.ru:3306 pankovri@proxy-to-db.ru
DB_DSN="myDbLogin:myDbPassowrd@tcp(host.docker.internal:8899)/myDbName"
Запустили сервис — и через несколько минут отловили багу. Фикс полетел в прод в течение часа. Победа ✌️
А в конце коллега сказал: «Блин, совсем забыл про host.docker.internal. А ведь это было бы сразу проще».