@pydjango
Django

Полезная информация и правила: https://github.com/amureki/django_faq Вакансии и резюме: @django_jobs Пофлудить идём сюда: @django_flood Статистика чата: combot.org/chat/-1001063854692

1741 members

Архив канала @pydjango 28 августа 2016 г.

06:18:08 ПП
User 36322986
какие методы вы используете для деплоя нового кода? как-нибудь можно автоматизировать применение миграций и релоад?
06:51:52 ПП
User 2895769
я распространяю код в образах контейнеров
06:52:37 ПП
User 2895769
миграции можно делать со своего рабочего ноутбука, подключившись к базе
06:53:28 ПП
User 2895769
запускаем локально контейнер, в качестве переменной окружения для подключения у СУБД передаём сервер СУБД на продакшене, делаем команду миграции
06:54:19 ПП
User 2895769
так как я не делаю релизы слишком часто (обычно раз в 1-3 недели), то мне кажется более правильным это делать вручную, без автоматизации
06:57:26 ПП
User 36322986
хмм. как-то хочется таки автоматизировать это дело, сейчас период когда часто правки вношу. 
каждый раз вручную мигрировать, хоть это и занимает 2 минуты, неоптимально
06:59:02 ПП
User 2895769
тогда просто <...>/python3 <...>/manage.py migrate
06:59:26 ПП
User 2895769
он не требует какого-либо вмешательства
07:00:34 ПП
User 2895769
то есть ведь нет принципиальной разницы в том, вручную его запускать или в рамках какого-нибудь .sh скрипта
07:01:33 ПП
User 36322986
да я так и делаю, но это все равно ручками получается) 
хочется, условно , сделать git pull (на продакшн сервере*) и чтоб "все работало"
когда-то находил статью про git hook'и но как-то не довелось прочитать/использовать.
кто-нибудь так делает?
07:05:10 ПП
User 2895769
лучше через контейнеры
07:05:20 ПП
User 2895769
git на сервере - это антипаттерн
07:05:23 ПП
User 36322986
речь о Docker?
07:05:31 ПП
User 2895769
или Rkt
07:05:50 ПП
User 157245650
а можно под это все просто шелл скрипты писать?
07:06:34 ПП
User 2895769
ну, у меня шелл-скрипт билдит образ контейнера
07:06:42 ПП
User 2895769
потом я его запихиваю в репозиторий
07:07:06 ПП
User 2895769
а на сервере оттуда скачивается, останавливается текущий контейнер, запускается новый из скаченного образа
07:07:26 ПП
User 157245650
а синхронизация контейнеров не приводит к тому что на каждый чих качаешь сотни мегабайт?
07:07:36 ПП
User 2895769
а там кеш
07:07:43 ПП
User 2895769
контейнер состоит из разных слоёв
07:07:47 ПП
User 157245650
отлично
07:08:18 ПП
User 2895769
код лежит в последнем (это определяется тем, на каком этапе его положили в образ, в Dockerfile'е)
07:09:29 ПП
User 2895769
ну и вариантов тут два: или это билдится на машине разработчика
07:09:38 ПП
User 2895769
или это билдится на сервере, интеграция с CI
07:09:53 ПП
User 2895769
CI или сама билдит или использует сторонние сервисы для этого
07:10:00 ПП
User 2895769
а потом тестирует полученный образ
07:10:10 ПП
User 2895769
то есть запускает контейнер, прогоняет тесты
07:10:22 ПП
User 2895769
если всё зелёное - запускает на продакшене
07:10:38 ПП
User 2895769
если это не делает CI (потому что нет CI) - тогда это делает программист
07:12:31 ПП
User 2895769
у меня в простом случае (без CI) это просто команда ./build (запускается .sh) на ноутбуке, потом я захожу на сервер и делаю там команду reload<projectname>, а потом команду для миграций (снова с ноутбука)
07:12:48 ПП
User 2895769
если бы была настроена CI, то просто hg push хватило бы
07:15:04 ПП
User 2895769
reload<projectname> в моём случае - это просто alias
07:15:11 ПП
User 2895769
например,
 alias reloadbyvshie="systemctl stop byvshie-nginx && systemctl stop byvshie && systemctl restart byvshie-postgresql && systemctl start byvshie && systemctl start byvshie-nginx"
07:15:56 ПП
User 2895769
то есть три контейнера - статика, само приложение и база
07:16:45 ПП
User 2895769
в директории /etc/systemd/system лежат 3 .service файла, каждый относится к своему контейнеру
07:17:47 ПП
User 2895769
например, вот так выглядит один из них (с кодом проекта)
07:17:48 ПП
User 2895769
https://dpaste.de/RWOH
07:20:46 ПП
User 2895769
ну и тут можно было бы сделать ExecStartPost и там выполнять эти миграции
07:22:00 ПП
User 378433
User 2895769
например,
 alias reloadbyvshie="systemctl stop byvshie-nginx && systemctl stop byvshie && systemctl restart byvshie-postgresql && systemctl start byvshie && systemctl start byvshie-nginx"
а мог бы сделать юнит поверх
07:22:07 ПП
User 378433
с Wants
07:22:18 ПП
User 378433
не помню я как там правильно
07:22:23 ПП
User 2895769
ну да
07:22:29 ПП
User 378433
или так не получилось?
07:22:40 ПП
User 2895769
я думаю об облачной архитектуре
07:22:55 ПП
User 2895769
сделал просто отдельно их
07:23:18 ПП
User 2895769
в будущем там будет что-то типа Fleet или Kubernetes
07:23:20 ПП
User 2895769
над ними
07:23:41 ПП
User 2895769
эта команда для релоада она временная
07:24:52 ПП
User 2895769
сейчас у меня для доставки используется DockerHub
07:25:06 ПП
User 2895769
следующая цель - избавиться от него и сделать локально свой сервис для хранения образов
07:25:16 ПП
User 2895769
я стараюсь перейти с докера на ркт
07:25:50 ПП
User 2895769
сейчас у меня ркт на лету , скачивая с докерхаба, меняет формат образа на ACI и запускает его
07:26:22 ПП
User 2895769
в будущем я планирую это делать на стороне разработчика, а распространять сразу ACI образы
07:27:04 ПП
User 2895769
сейчас мой билд скрипт выглядит как-то так
07:27:05 ПП
User 2895769
https://dpaste.de/XgNT
07:27:22 ПП
User 2895769
вот 3 последние строчки там - это пуш на Docker Hub
07:27:44 ПП
User 2895769
вместо них будет конвертация в ACI и пуш в какой-то мой реестр образов
07:28:28 ПП
User 2895769
ну а в далеком будущем - вместо сборки образа из Dockerfile'а и конвертации в ACI, я сразу буду собирать в ACI
07:29:18 ПП
User 2895769
просто конкретно сейчас поддержка Docker'а в OS X лучше, чем Rkt
07:29:57 ПП
User 2895769
во-первых, Docker for Mac вместо Virtualbox'а, во-вторых, есть поддержка в PyCharm'е
07:33:10 ПП
User 2895769
в общем, если у вас 1 проект, над которым вы работаете много и постоянно - делайте через CI, это самый правильный способ
07:33:41 ПП
User 2895769
а если у вас, как и у меня, куча всяких вещей, иногда лень каждый раз ставить CI, тогда через вот эти билд скрипты прямо на ноуте
07:37:08 ПП
User 2895769
кстати, я тут пиарил свой чатик по CoreOS u Rkt?
07:37:16 ПП
User 2895769
@coreos_ru
08:35:32 ПП
User 36322986
спасибо за советы, буду докер внедрять как руки дойдут