I just finished deploying my Phoenix app to a VPS running dokku and ran into a couple of issues which made it challenging to get things working:
- You need two different buildpacks, and two different
.configfiles to adjust the configuration on each buildpack. If you document the buildpacks you use in-code
- The phoenix buildpack does not work out of the box (here’s my PR to fix this). This may have been a dokku-specific thing, but
cp -rfailed to succeed because of the symlink’d node packages in the new default package.json.
However, once I got things running, deployment is incredibly easy and seamless! I had some thoughts on how we might improve the phoenix/elixir deployment story on dokku/heroku and wanted to see what folks thought:
- Right now, the phoenix buildpack is maintained largely by one person and hasn’t been touched in close to a year. What if we were to host the buildpack on the @pheonixframework github user to allow others to more easily contribute to keep the buildpack up to date.
- With an ‘official’ buildpack, we may be able to submit the buildpack to the herokuish project as a default buildpack so Phoenix projects can be detected automatically.
- The phoenix buildpack has a lot of legacy code supporting older versions of phoenix. It wouldn’t be a huge effort to rip out all of the legacy support and merge the phoenix build logic into the elixir buildpack. Having a single buildpack to use for Elixir + Phoenix makes a lot of sense (it’s how the ruby/ruby on rails buildpack is structured).
I’ve really enjoyed the elixir + phoenix development experience, but the deployment situation has felt underdeveloped. IMHO improving the default deployment experience on heroku/dokku will be super helpful for new developers, and hopefully increase adoption a bit.
Curious what everyone thinks!