(no subject)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

(no subject)

Valery Tikhonov
> Hey everyone,

>
>
>
>
> I’ve recently built a few applications that handle high volume message passing and all communicate with each other using Erlang’s ssl distribution. I’m working on deploying these to multiple servers - right now I am just using rebar3 release and creating a zipped tar of the release directory, moving it to a new box, and changing the some vm.args and sys.config options on the new machines. This doesn’t seem totally intuitive though… it take far longer than I feel like it should.
>
>
>
>
> I’ve read about Docker and Kubernetes, and those seem promising, but our IT guys aren’t ready to move to containers and are using static nodes right now.
>
>
>
>
> So, what is the best way to quickly distribute your erlang binaries and configure the enviornment? Have a quick script to do it automatically? Is the answer just containerize with Docker and wait a few months for the IT team to catch up with it? Or is there some other option out there?
>
>
>
>
> Thanks for your help!

Please take a look at Enot (https://github.com/comtihon/enot), this is actually I've created it for.
It can help you with both deployment and environment variables handling.

For deployment - just add install steps you perform to enot's config (here is an example https://github.com/comtihon/example_service) and you will be able to install and run it on another linux machine with `enot install you/yourservice`. If your service is private (not open sourced) - you should run your enot auto builder first, to store enot packages there (https://github.com/comtihon/enot_auto_builder).

For templating - you can use environment variables in app.src, relx.conf or vm.args:

{env, [
                {% if MAGIC_GREETING is defined %}
                  {greeting, "{{ MAGIC_GREETING }}"}
                {% else %}
                  {greeting, "hello world!" }
                {% endif %}
              ]}
or:
{% if app.git_branch == 'master' %}
            {log, info}
        {% else %}
            {log, debug}
        {% endif %}
or:
{% if hostname in prod_hosts %}
                {database, [
                        {host, "prod_db"},
                        {password, "super_secure_password"},
                        {pool_size, 400}
                ]}
        {% elif hostname in stage_hosts %}
                {database, [
                        {host, "staging_db"},
                        {password, "other_secure_password"},
                        {pool_size, 200}
                ]}
        {% else %}
                {database, [
                        {host, "dev_host"},
                        {password, "dev_password"},
                        {pool_size, 10}
                ]}
{% endif %}
Regards

_______________________________________________
erlang-questions mailing list
[hidden email]
http://erlang.org/mailman/listinfo/erlang-questions