[erlang-questions] How do you go to production?

Max Lapshin max.lapshin@REDACTED
Sun Apr 14 11:19:46 CEST 2019


Hi.

I'm developing Flussonic for almost 10 years and we have some practices for
packaging, deploying, running, maintainig that are not well known, however
they are rather good for us.

It is interesting how do other people solve this.

At first, we do not use releases. It is because when we have started our
long path, using of releases was not very easy.  Couple of days ago I've
tested it with rebar3 and it is really easier to use. Perhaps we would use
releases today.




Next: we use our own fpm script replacement for packaging. I can boast that
it seems to be the only existing implementation of rpm outside of original
library, however I'd better never pass this path again. I've written it in
pre-docker era and frankly speaking it is a traumatic experience. However,
we are using it for debian and it is really convenient:
https://github.com/flussonic/epm


Some time ago we have switched to systemd. I personally consider systemd a
very badly designed thing that was created without any discussions with
existing system adminstrators. For example, systemd doesn't offer config
validation before launch. Another brilliant idea is to offer libsystemd for
linking into application. Unknown library with unknown quality. What can go
wrong if you link it into your erlang or java application?

Sorry, but no. We have systemd.erl:
https://gist.github.com/maxlapshin/01773f0fca706acdcb4acb77d91d78bb

Use Type=notify in  youdaemon.service




After you manage to launch your erlang daemon, you need to collect
statistics. We had to add some more linux-related tools to fetch: cpu
usage, disk I/O usage, system ram usage (swap, etc), per-interface network
statistics, udp errors count, nvidia card usage, etc.
If this is worthy outsource, I think we can extract it.





Our os_stat library is linked with our in-erlang pulsedb library. We try to
maintain as less dependencies as possible, so we collect all ticks from
monitoring tools inside erlang library pulsedb:
https://github.com/pulsedb/pulsedb   (maybe should update public branch)

It can save several thousands metrics with one tick per 1-3 seconds.





Support is an important part of our business, because customers cannot just
launch software, they often need help.  We have many people in support
staff and I do not want to manage their own public ssh keys on customer's
servers. So we have written an ssh proxy: system that login to customer
server with one private key and allow support guy to use his own key:
https://github.com/flussonic/ssh-proxy



All these things are rather useless for development and many of them are
not required for in-house development, however it is hard to live without
them when you sell software.
What is your experience with such things that standard erlang lacks?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20190414/da862fef/attachment.htm>


More information about the erlang-questions mailing list