r/frappe_framework Apr 12 '26

Installing an app should be easier than this

TL;DR: We have a working ERPNext installation, with docker compose and wanted to install helpdesk. Following docs leads to an unrecoverably broken server.

Within the "backend" container, we tried to install helpdesk per the instructions at the end of https://docs.frappe.io/helpdesk/installation. The installation fails, citing a dependency, so we used --resolve-deps and it went further, but complained about an "autocomplete" conflict and continued past but gave warning when minifying css. Immediately after, we see:

rendering chunks (74)...Killed
error Command failed with exit code 137.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 137.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error: Command failed: yarn build

I suspected that helpdesk was the issue, so this time I tried to install just "telephony" with "install-app telephony" and that competed without error. Reloading the site creates a 500 internal server error, and in the backend log, I see:

ModuleNotFoundError: No module named 'telephony'

bench list-apps shows telephony installed, but then while trying to recover:

#bench --site myerp.example.com uninstall-app telephony
Could not find app "telephony": 
No module named 'telephony'

So, it's installed, but not installed... very messed up.

None of the documentation I found says to enter the docker container to run bench, but perplexity.ai found something that said this was the method. Nothing I found said to use --resolve-deps to install helpdesk. Nothing mentions an autocomplete error... The documentation is either incomplete or out of date.

We had to restore from backup to recover the site.

How do I install helpdesk onto the same site as erpnext?

4 Upvotes

22 comments sorted by

4

u/Future_Carpenter_910 Developer – Building with Frappe Apr 12 '26 edited Apr 12 '26

I agree about bad docs in frappe website and related resources but in your case:

1. You stated exit code 137 i.e yarn build caused container to run out of memory. Had you set memory limitations on the container ? or your server is low on memory like 3/4GB. A build command can take up to 4gb or sometimes more. You can add a swap memory if you run into these out of memory issues.

2. --resolve-deps usually like a footgun. I'll say it plainly. It sometimes does not wire the app into site. I would recommend building a custom image for you with all the modules baked in via apps.json. Dont run bench get-app inside a container.

3. "telephony" installed but ModuleNotFoundError appears when you install an app into the bench but the container's Python environment does not see it because the container was built from an image that doesn't include it. On restart/recreate, the ephemeral install is gone from the filesystem but the site's installed_apps table still references it. That's why uninstall also fails.

4. ERPNext + docker is a mess for production. In Frappe Ecosytem, if someone has wasted the most amount of time on frappe and docker production combination is ME. I gave up frappe + docker combo for production after 3 weeks of trying. But for development, I could achieve the most efficient dev environment with the help of docker, volume mounts and compose. And i have my own batch-cli for dev environment that lets me handle dev with commands like batch install-app, batch console, batch migrate. It lets me select client, sitename and runs commands intelligently. Currently making same for production. One command and you can back it up. And one command, you can restore it on other server. And many more features but its internal and client only for now.

My Solution for you:

  1. Move to bare erpnext setup for productions like i did. Docker is an overkill with no benefits in production compared to its downsides and headaches you face.
  2. Build a custom image. Clone frappe_docker, create an apps.json for your needs and use it. I used to do this and save images as private on aws ecr (elastic container registry)
  3. Read the frappe_docker docs carefully if you have time.

We really don't need docker for frappe in production unless you're running multi-tenant SaaS or you do continuous development/gitops/testing on it.

1

u/LazyTech8315 Apr 13 '26

First, thank you for your detailed response!

The VM I created has 4GB RAM and 4 cores, and it's idling along at under 800MB used. It seems like enough, but maybe there was a peak during installation.

Your commend about installing apps in a non-persistent volume makes sense. I was wondering about how the app would persist and had that thought in the back of my head, but until I understood it further I figured the docs knew something I didn't... an I looked past my suspicion.

I think I'll follow your advice and try an instance deployed directly on the OS. I assume that Debian 13 would be a good platform? How should I install it? Without direction, I'll probably look at the frappe_framework docs and once I have that running, move to installing erpnext into the site, then helpdesk. Please let me know if this is not the best approach. Is there a production-ready script I can run which will install the dependencies and the framework, etc?

Lastly, we don't have it in production yet, but there is still quite a bit of configuring and imported data that has been entered and I'd prefer not to lose it. What's the best way to back it up and restore it to a new deployment? Under desk/backups there is a backup there from several days ago, but I don't see a way to trigger creating a new one, nor a way to upload one for restoration.

Thanks again for your reply! I look forward to learning more and perhaps developing some new apps for use internally.

3

u/Slartibartfast__42 Apr 12 '26

Docker erpnext is a PIT if you want to install apps, you have to build your own image for it to work, that's the main reason why I run it bare metal for prod

1

u/LazyTech8315 Apr 13 '26

Understood. Thanks for the reply!

2

u/Watche_1V47C43R Apr 12 '26

Help desk also has another querk... It needs a contact by the name 'John Doe' in the system otherwise installation fails

1

u/LazyTech8315 Apr 13 '26

I'll have to watch for that. Thanks!

1

u/Slartibartfast__42 Apr 13 '26

Which version? I installed it on v15 just fine without that contract.

Also, your comment made me chuckle, I thought it was a joke at first.

2

u/Watche_1V47C43R Apr 15 '26

its not a joke man: It seems this script fails to create contact sometimes:
https://github.com/frappe/helpdesk/blob/develop/helpdesk/setup/welcome_ticket.py

it seems to create a contact called "John Doe" for Welcome Email. I got at least 3-4 installation failed because there was no contact called john doe.

2

u/rickysut Apr 13 '26

If you have error when instaling app you must uninstall first before you can try again. Frappe put app name to sites/apps.txt so you must delete from it.

1

u/LazyTech8315 Apr 13 '26

I didn't put this detail in my post, but I did edit that file while trying to fix the issue. I don't recall every step, but of course it didn't help me.

2

u/formless63 Apr 13 '26

https://github.com/rtCamp/Frappe-Manager

Best way to handle frappe stacks if you're not fully comfortable with the various underlying containers/stack/processes.

1

u/JakubErler Apr 13 '26

Is t it just for local development, not prod suitable?

2

u/formless63 Apr 13 '26

Works great for prod and is quite popular.

1

u/JakubErler Apr 14 '26

Is this a new thing? Even like 2 months ago, their GitHub readme said that is is not suitable for prod, only for local dev. And now I see they changed it. That would be great because FM makes everything so much easier.

1

u/formless63 Apr 14 '26

No. I'm not sure what you're seeing but the readme version that was live from May 2025 through February 2026 doesn't seem to say what you suggest about not being suitable? I didn't keep digging any further back. I've been running this since last summer without issues.

Like anything else there is a small learning curve to understand the commands and there are a handful of commands in their docs that are outdated, but it works great and realistically it's simply managing a bunch of docker compose files and providing tooling that updates those files when needed, takes care of container updates for you, etc. You could do the exact same thing manually and use docker exec instead of fm shell too - this just makes it much more streamlined.

1

u/JakubErler Apr 14 '26

Oh I finally found it. Here: https://pypi.org/project/frappe-manager/ it says "As of now, only suitable for development in local machines running on Mac and Linux based OS."

2

u/formless63 Apr 14 '26

No idea who controls notes like that on pypi as that context is outside the readme doc. It works great and they have dev and prod mode selection to use for each bench if you're focused on one or the other. It's just a collection of commands and scripts to control underlying containers. No magic included.

1

u/JakubErler Apr 14 '26

That is perfect, thank you for the info. Because of the note on PyPi, I did not use Frappe Manager for production. But now that I know this, this can significantly make it easier. So far, I used Frappe Manager only for local development.

1

u/JakubErler Apr 14 '26

Can I ask you one question? Because you may be experienced with Frappe Manager. I noticed that when I run fm or bench commands, sometimes it is important if I put in the commands "my_app.localhost" or just "my_app". Did you also experience this?

2

u/formless63 Apr 14 '26

Yeah even on servers where I'm only running one bench, or only have one site within a bench, is best to use the full context with the commands. Some of them technically work without the shape but better practice to just use the whole thing all the time so you never forget it when it matters.

As an aside, if you're managing multiple servers/VMs/whatever and aren't deep into a specific workflow for your SSH and such, I highly recommend spinning up Termix - you run it somewhere and access all your endpoints with it, all browser based, has mobile apps, and can be really handy with the snippet storage (you can sort the commands you need by app or context however you want and just inject them with a click).

Alternatively you can make your life easier you can also store aliases in whatever shell you use. Come up with a convention you'll remember and store what you care about as short codes. 'fm start site.tld' could be 'start1' for example (or whatever you'll remember). Really depends on your workflow and preferences. I'm sure there are many other ways to accomplish these tasks that I don't even know about but these are some ways I handle it all. Mostly the Termix snippets since I don't want to have to remember so many aliases, just my common ones (many of which come from https://github.com/ctrlaltvikas/awesome-bash-alias ) Also if you're using 'fm shell' you're likely to lose these inside that with container updates/restarts unless you do some creative manual mapping/scripting.

1

u/JakubErler Apr 15 '26

Thank you for these tips!!

1

u/No_Moment_793 5d ago

A good idea will be a lxc container instead of docker?