Is AppImage suitable for a multi-service web-application like ERPNext?

I am a member of the ERPNext Community and am wondering whether it was suitable to be distributed as an AppImage.

ERPNext is an Open Source ERP suite build on the frappe framework. It’s written mainly in python utilizes mariadb, nginx, supervisor and a bunch of other components functions as a server whiich provides a user interface via webbrowser.

Installation of such a complex thing comes with quite some hassle and I was wondering if such an architecture is suitable for the AppImage format in general. If so I might take on the task to get this on the road sometime

I myself am not a developer whatsoever and have some but not very in depth knowledge in Linux Administration. I ran an AppImage here and there but have no in depth understanding of it’s internal mechanics.

Yes, I think it would be suitable. Rather complex Python based applications such as Ultimaker Cura are distributed as AppImages, which makes running them on various Linux distributions rather easy.

thanks for the feedback. Looking into this just a little bit more I notice that once an AppImage is runnning it is mounted into a temporary location (which changes each time you run the Image) as a read-only filesystem.

Now if you have a database as acentral part of any web-aplication, such as ERPNext is, you constantly create new data (so you need a r/w filesystem) and of course you need the data to be available again the next time you may run the Image. Also you need to preserve the data created by the Application.

Also you need to be able run cli commands within the ERPNext filesystem at times in order to maintain the system.

So the question now would be whether such a scenario can be handled by the AppImage format?

Sure, just write the data outside of the AppImage, e.g., somewhere in $HOME or another path supplied by the user.

Applications installed in /usr or /opt also cannot write there, so this is quite normal.

You could either ship them as separate AppImages, or use something like this: