Addons using apt get (or equivalent)

I have a service (celery task runner) which uses python subprocess to access command line tools such as ffmpeg and lame. In the past I’ve deployed something like this on heroku using their buildpacks, for example this apt one.

Are there any docs on the stack a Render deployment runs on, and what packages are installed and available and/or any means to include additional ones like the above?

Also curious to know if Addons are something that can be built and maintained by the community or if they’re more reserved for third party integrations.

Hi @tomjohnhall ,

We don’t currently document that, and the list is dependent on the language environment you’re using. For example, the Node environment has slightly different needs than the Ruby environment.

We agree that it would be super useful to install custom packages, and that’s a feature we’re tracking internally, but it’s unfortunately not available. Currently, you do have a few options:

  1. You can do something similar to the heroku-buildpack-apt that you linked, which installs packages at the user level. This can get a little tricky, so might not be a great option for your service.
  2. You can switch to a Render Docker service (Deploy Docker — How to Use Docker | Render) which gives you a lot more control over the runtime environment
  3. As I mentioned above, the list of base packages can and does change. What is the package you’d like to install? It may be a candidate for including in the base environments.

As far as addons, we don’t currently have any standard way for community members to add new ones, but we’d love to hear about any ideas you have for one and if we can help. Is there something you were thinking of building?

Hey @dan thanks for all these responses! Makes sense that environments vary between languages, that said it would be a really handy feature to get a bit of insight into those specs to help when compiling build commands etc. For example, I discovered I can use pipenv to manage python libraries but wouldn’t have known this from the docs available.

Is the first option you suggest just a case of adding some install commands in a build script? Because that could work. The second will take a bit of work but also a helpful idea, thanks! The package I need to install is ffmpeg (and things it may depend on, like libsndfil, libpulse and lame). A bit specific to this one audio file queue task I run so, understandably, possibly not the best candidates for inclusion in the base environments.

Lastly, no specific ideas in mind, just curious!

I’m not super familiar with package installation in a non-root context, but I think it has something to do with installing the packages to some user-local place and also setting up some way to tell processes where to look for those packages. I suspect that’s an environment variable or two. From my brief review of the heroku-buildpack-apt they’ve figured out the details, so digging through that help you find the specific answers.

Cool, thanks! I will probably go down the docker route for the celery deployment and see where I get, but otherwise as you say, storing the libs and setting paths for the environment could be done in a build script in theory. :+1: thanks for the tips!

1 Like