Re: Sample rc.d script for Elixir apps
- In reply to: Mike Jakubik : "Sample rc.d script for Elixir apps"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 12 Sep 2021 17:46:22 UTC
On Sun, 12 Sep 2021, at 16:26, Mike Jakubik wrote: > Hello, > > I am looking for a simple rc.d script that i could use to start our > Elixir apps on boot up, something that root will run as defined user > and basically just run elixir --erl "-detached" -S mix phx.server and > track PID. Hi Mike Use releases, possibly with pid_file https://hex.pm/packages/pid_file This is probably more than you need, but you can likely trim it down or adapt as you need. https://git.sr.ht/~dch/elixir-freebsd-rc-skeleton/tree Basically this runs in our CI, builds an elixir release, creates a standard FreeBSD package directly, without needing a Makefile to maintain, and drops the resulting tarball into our package repos and it can simply be `pkg install...` or upgraded. Use ansible or whatever to leave /usr/local/etc/${APP} and any /etc/rc.conf.d/${APP} settings. I use this in numerous projects, where, for historical reasons), we don't build in a classic ports tree, but use pkg-create(8) to build a compatible package. We can then distribute this elixir app like any other project. If I re-did it today, it would probably be a mix task for simplicity. TLDR: - use git tags for sensible version numbers - rc.d is your future /usr/local/etc/rc.d/${APP} - build.sh cleans the dir and makes a .txz file (this might need to be amended to .pkg depending on how up to date you are) - mix.exs has a few additions/helpers you may want - app.sh ends up in /usr/local/bin/example.sh so you can run it like su -m www /usr/local/bin/example.sh or via the usual `service example start` as you prefer. The release scripts used to be horrible for elixir, so I unpacked them and simplified all the unnecessary bits. This was 6 years ago, and the releases are better now than they were, but again this is It's BSD2 licenced, I'd appreciate a shout-out in your repo if you use it, even if its a private repo that's just fair play :-) I don't connect via a local iex for debugging, I just remsh in: $ iex --name iex@(hostname -s).example.net \ --remsh app@example.net \ --cookie ... \ --erl '-proto_dist inet6_tcp' Using inet6 because thats how we roll our jails. Thoughts and ideas for improvements welcomed. A+ Dave