-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
ssl/ | ||
.Ulysses-favorites.plist | ||
.Ulysses-Group.plist |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
+++ | ||
date = "2016-04-07T15:18:03+03:00" | ||
draft = false | ||
title = "Перенос блога и Docker Cloud" | ||
|
||
+++ | ||
|
||
В общем, решил мигрировать блог на [hugo][1] - генерилку статичных страниц, написанную на go, так как вордпрес меня в конец достал своим существованием и непредсказуемостью, а так html он и есть html. | ||
|
||
Соответственно если что-то делать, то можно заодно посмотреть на какие-то новые штуки, до которых всё равно не доходили руки, а тут как раз подвернулся [Docker Cloud][2] - решение из разряда всё в одном. | ||
|
||
Из плюсов которые меня привлекли: | ||
|
||
1. Он умеет билдить имеджи по хукам гитхаба, так что я первым делом сделал [docker образ][3] для hugo. Также это удобно для того что б не париться лишний раз с CI. | ||
2. У Docker Cloud есть интеграция с различными [облачными провайдерами][4], а так же возможность подключать докеры даже к провайдерам [не из списка][5] . Мне был нужен DO, так что я просто присоединил его аккаунт к Docker Cloud и в админке докер клауда создал новую ноду | ||
3. Он бесплатен для одной ноды, что меня вполне устраивает на текущий момент и вообще делает из себя вид что он какой-то месос\кубернетис. | ||
4. У него есть поддержка [stacks][6] эдакого варианта docker-compose для клауда, в котором можно обычным yaml описать нужную тебе инфратсруктуру. Важно что этот stacks приватный, соответственно можно складывать в него всякие ключи, которые нельзя хранить в репе (в моём случае это был ключ от slackin для [ukrops][7]) | ||
5. Всё работает в связке: ты делаешь коммит в гит, гит дёргает докерхаб, который собирает твой имедж и после апдейта имеджа он деплоится на твою ноду. | ||
|
||
|
||
Я сразу решил что такой сервис, да ещё и забесплатно как раз то, что мне нужно. В итоге у меня должно было бы получится что-то такое: | ||
|
||
{{< figure src="/images/docker-cloud.png" >}} | ||
|
||
Есть [репо][8], в котором лежит сайт в hugo формате и конфиг nginx. По коммиту, при помощи ctrlok/hugo имеджа докер билдит статику и экспортит это всё дело в волюмы. | ||
|
||
{{<highlight docker "style=friendly">}} | ||
FROM ctrlok/hugo | ||
MAINTAINER Vsevolod Polyakov [[email protected]][9] | ||
ADD config.toml /opt/ctrlok.com/ | ||
ADD content/ /opt/ctrlok.com/content | ||
ADD themes/ /opt/ctrlok.com/themes | ||
RUN mkdir /opt/ctrlok.com/public | ||
WORKDIR /opt/ctrlok.com | ||
RUN hugo -t angels-ladder | ||
VOLUME /opt/ctrlok.com/public | ||
ADD nginx/default.conf /etc/nginx/conf.d/default.conf | ||
VOLUME /etc/nginx/conf.d | ||
{{< / highlight >}} | ||
|
||
Эти волюмы цепляет к себе nginx:alpine, который в свою очередь ещё залинкован на имедж с slackin. То есть ничего сложного. | ||
|
||
В итоге я сделал stack файл, и вроде бы всё заработало, но линк на slackin не заработал. Его просто не видно по DNS. Более-менее сразу гуглится [ответ][10]: если у вас не работают линки по DNS, то используйте env переменные. Насколько я понял там не обычная линковка, а сеть, которую они менеджат при помощи [weave][11], что уже само по себе подозрительно. | ||
Переменные окружения в nginx использовать не очень удобно, для этого нам надо по конфигу раскидать | ||
|
||
{{<highlight nginx "style=friendly">}} | ||
# в основном контексте, чтобы пробросить переменную к воркерам | ||
env SLACKIN\_PORT\_3000\_TCP\_ADDR; | ||
# в контексте http, чтобы заюзать | ||
perl\_set $slackin 'sub { return $ENV{"SLACKIN\_PORT\_3000\_TCP\_ADDR"}; }'; | ||
{{< / highlight >}} | ||
|
||
Попробовал внести эти изменения и оказалось что контейнер с nginx, который берёт волюмы с другого контейнера не рестартуется когда тот контейнер меняется и передеплаивается (кстати, сама по себе пауза между сборкой контейнера и его передеплоем может быть больше двух минут). | ||
|
||
Самое забавное что даже если ты руками из консоли стопаешь и стартуешь nginx, то он всё равно поднимается с волюмами предыдущего контейнера. Так что нет никакой возможности обновлять сайт\конфиг через волюмы. | ||
|
||
После этого я стопнул всё, стартанул опять и проблема повторилась. Я так понял что надо просто вообще все сервисы убивать и заново создавать :) Фиг знает чем они думали и зачем так делали. | ||
|
||
Сама по себе консоль хоть и отзывчивая, но любит посыпать всякими странными ошибками, когда меняешь конфиги. Я не заскриншотил, но когда ты одновременно `restart policy` и `destroy policy`, то она сходит с ума и не разрешает вообще ничего сделать. | ||
|
||
Пару раз нарывался на невозможность стартануть контейнер. В общем мне непонятно за что просят 12 баксов за ноду. Это Docker Cloud ещё должен доплачивать. | ||
|
||
В итоге я пока решил не делать CI, переписал всё на [grammarly/rocker][12] и [grammarly/rocker-compose][13] и заюзал докер-машину с DO. | ||
|
||
[1]: https://gohugo.io | ||
[2]: https://cloud.docker.com/onboarding/ | ||
[3]: https://github.com/ctrlok/docker-hugo | ||
[4]: https://docs.docker.com/docker-cloud/getting-started/use-hosted/ | ||
[5]: https://docs.docker.com/docker-cloud/tutorials/byoh/ | ||
[6]: https://docs.docker.com/docker-cloud/feature-reference/stacks/ | ||
[7]: http://slack.ukrops.club | ||
[8]: https://github.com/ctrlok/ctrlok.com | ||
[9]: mailto:[email protected] | ||
[10]: https://docs.docker.com/docker-cloud/feature-reference/service-links/ | ||
[11]: https://www.weave.works/ | ||
[12]: https://github.com/grammarly/rocker | ||
[13]: https://github.com/grammarly/rocker-compose |