πŸš€ ERPNext Quick Install Script v2.0 - Now with 50+ Additional Apps & Develop Branch Support!

Hello ERPNext Community! :wave:

I’m excited to share the major update to our ERPNext installation script that makes setting up ERPNext easier and more powerful than ever before!

:tada: What’s New in v2.0?

:convenience_store: Additional Apps Marketplace

The biggest new feature - browse and install from 50+ curated Frappe applications in one go!

  • Official Frappe Apps: HRMS, CRM, LMS, Insights, Builder, Drive, Helpdesk, and more
  • Community Apps: Accounting tools, e-commerce integrations, project management, and specialized industry solutions
  • Smart Selection: Interactive dialog with easy checkbox selection
  • Intelligent Installation: Multiple fallback strategies ensure maximum success rate

:brain: Smart Branch Detection

No more guessing which branch to use!

  • Automatic branch detection for each app using git ls-remote
  • Version-specific mapping: Frappe Insights uses version-3 for v15, CRM uses develop branch, etc.
  • Graceful fallbacks: If specific branch fails, automatically tries default branch
  • Third-party apps: Uses default branches (no unnecessary version forcing)

:zap: Develop Branch Support

For the brave developers who want bleeding-edge features:

  • Comprehensive warnings about risks and requirements
  • Proper Redis configuration for develop-specific port requirements (11000, 12000, 13000)
  • Version conflict detection prevents mixing stable and develop on same server
  • Enhanced error handling for develop-specific issues

:shield: Installation Conflict Prevention

Prevents the headaches of version conflicts:

  • Automatic detection of existing ERPNext installations
  • Clear warnings about Redis port conflicts, Node.js version mismatches
  • Smart recommendations for clean installation approaches
  • User choice: Continue with warning or abort for safety

:wrench: How to Use

Quick Start:

bash

git clone https://github.com/flexcomng/erpnext_quick_install.git
cd erpnext_quick_install
chmod +x erpnext_install.sh
source erpnext_install.sh

Supported Versions:

  • :white_check_mark: ERPNext v13 (Ubuntu ≀22.04, Debian ≀11)
  • :white_check_mark: ERPNext v14 (Ubuntu ≀22.04, Debian ≀11)
  • :white_check_mark: ERPNext v15 (Ubuntu β‰₯22.04, Debian β‰₯12)
  • :white_check_mark: Develop Branch (Ubuntu β‰₯22.04, Debian β‰₯12) :warning:

Operating Systems: Ubuntu 20.04/22.04/24.04 LTS, Debian 10/11/12

:dart: Real-World Example

Here’s what the additional apps experience looks like:

Would you like to install additional Frappe apps? (yes/no): y

⚠️  Additional Apps Installation
Note: App compatibility may vary. Some apps might fail to install
due to version mismatches or missing dependencies.

Apps courtesy of awesome-frappe by Gavin D'Souza (@gavindsouza)
Repository: https://github.com/gavindsouza/awesome-frappe

Continue with app installation? (yes/no): y

Checking app compatibility with version-15...
βœ“ Compatibility check complete: 54/173 apps are compatible with version-15

[Interactive selection dialog appears with 50+ apps]

Selected 3 apps for installation.

Installing "Frappe CRM" (crm)...
Detecting available branches for official Frappe app: crm
βœ“ Found compatible branch: develop
βœ“ Successfully installed using repo name.

Installing "Frappe HR" (hrms)...  
βœ“ Found compatible branch: version-15
βœ“ Successfully installed using repo name.

╔══════════════════════════════════════╗
β•‘      Installation Summary                           β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
βœ“ Successfully installed 3 apps:
  βœ“ Frappe CRM
  βœ“ Frappe HR
  βœ“ Frappe Insights

:pray: Special Thanks

Huge shoutout to Gavin D’Souza (@gavindsouza) for maintaining the awesome-frappe repository! The additional apps feature is powered by his incredible curation work. :tada:

:warning: Important Notes

Version Conflicts

Don’t install develop and production-ready ERPNext versions on the same server! This can cause:

  • Redis port conflicts (develop forces 11000-13000, which could conflict with production setups)
  • Node.js version mismatches
  • Supervisor configuration conflicts

Develop Branch Warning

The develop branch is bleeding-edge and potentially unstable:

  • Changes daily, may break without notice
  • Not suitable for production or important data
  • Limited community support for develop-specific issues
  • Use only for testing new features or contributing to core

:link: Links

:handshake: Feedback Welcome

This script has been tested across multiple environments, but the Frappe ecosystem is vast! Please share:

  • Success stories with different app combinations
  • Issues encountered (especially with specific apps)
  • Feature requests for future versions
  • Apps that should be added to the compatibility list

:dart: What’s Next?

We’re considering:

  • Docker-based installation option
  • Backup/restore integration
  • Custom app repository support
  • Multi-site setup automation

Happy ERPNext installing! :rocket:

This script makes ERPNext installation accessible to everyone while maintaining the flexibility power users need. Whether you’re setting up your first ERPNext instance or deploying the latest develop features, we’ve got you covered!

18 Likes

@flexy2ky setup failed

App Versions

{
	"active_users": "1.0.10",
	"alerts": "1.0.8",
	"crm": "2.0.0-dev",
	"drive": "0.1.1",
	"erpnext": "15.64.1",
	"erpnext_fiscal_year_based_date_related_fields": "1.2.4",
	"frappe": "15.69.3",
	"helpdesk": "1.10.0"
}

Route

setup-wizard/0

Traceback

Traceback (most recent call last):
  File "apps/frappe/frappe/app.py", line 115, in application
    response = frappe.api.handle(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/api/__init__.py", line 49, in handle
    data = endpoint(**arguments)
           ^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/api/v1.py", line 36, in handle_rpc_call
    return frappe.handler.handle()
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/handler.py", line 51, in handle
    data = execute_cmd(cmd)
           ^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/handler.py", line 84, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/__init__.py", line 1742, in call
    return fn(*args, **newargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/utils/typing_validations.py", line 31, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/desk/page/setup_wizard/setup_wizard.py", line 61, in setup_complete
    return process_setup_stages(stages, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/desk/page/setup_wizard/setup_wizard.py", line 103, in process_setup_stages
    task.get("fn")(task.get("args"))
  File "apps/frappe/frappe/desk/page/setup_wizard/setup_wizard.py", line 133, in update_global_settings
    create_or_update_user(args)
  File "apps/frappe/frappe/desk/page/setup_wizard/setup_wizard.py", line 248, in create_or_update_user
    user.insert()
  File "apps/frappe/frappe/model/document.py", line 309, in insert
    self.run_before_save_methods()
  File "apps/frappe/frappe/model/document.py", line 1130, in run_before_save_methods
    self.run_method("before_validate")
  File "apps/frappe/frappe/model/document.py", line 1007, in run_method
    out = Document.hook(fn)(self, *args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/model/document.py", line 1364, in composer
    hooks.append(frappe.get_attr(handler))
                 ^^^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/__init__.py", line 1732, in get_attr
    return getattr(get_module(modulename), methodname)
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "apps/frappe/frappe/__init__.py", line 1442, in get_module
    return importlib.import_module(modulename)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "apps/crm/crm/api/__init__.py", line 6, in <module>
    from frappe.utils.modules import get_modules_from_all_apps_for_user
ModuleNotFoundError: No module named 'frappe.utils.modules'

Request Data

{
	"type": "POST",
	"args": {
		"args": "{\"currency\":\"INR\",\"country\":\"India\",\"timezone\":\"Asia/Kolkata\",\"language\":\"English\",\"full_name\":\"Rahul Sharma\",\"email\":\"tigeronesharma@gmail.com\",\"password\":\"@11May1998\",\"company_name\":\"Test Company\",\"company_abbr\":\"TC\",\"chart_of_accounts\":\"India - Chart of Accounts\",\"fy_start_date\":\"2025-04-01\",\"fy_end_date\":\"2026-03-31\",\"setup_demo\":0}"
	},
	"headers": {},
	"error_handlers": {},
	"url": "/api/method/frappe.desk.page.setup_wizard.setup_wizard.setup_complete",
	"request_id": null
}

Response Data

{
	"setup_wizard_failure_message": "Failed to update global settings",
	"exception": "ModuleNotFoundError: No module named 'frappe.utils.modules'",
	"exc_type": "ModuleNotFoundError",
	"_exc_source": "crm (app)"
}

Hi @rs115199789 Thanks for providing this feedback. This issue is related to crm branching which is all over the place in the repo. I have pushed an update to specifically map the main branch to crm install which seems to be the stable branch based on my checks.

You can fix this issue you experienced by uninstalling the crm app from your site using bench --site [your site name] uninstall-app crm then run bench ---site [your site name] migrate to rebuild your doctypes and lastly bench restart to rebuild your pycache. And then re-initiate the setup wizard. This should fix the issue and then you can manually re-install crm referencing the correct branch

Thanks for the reply also for the 3rd time,
ERPNext install script reached the part where it tries to install or configure Supervisor
and the terminal crashed automatically again.

Any Solutions.

Thank You

I tried to install production multiple times but failed, terminal crashed, now i tried to install development and it’s working.

Thank You

Tried on an Ubuntu 24LTS baremetal server. version 15 production install without ssl and fqdn. Just erpnext as an app. Finished flawlessly.

Congrats.

1 Like

@rs115199789 To prevent the terminal from closing if the install fails, use ./erpnext_install.sh to execute the script rather than source erpnext_install.sh. This will allow you see the error generated that breaks the install process.

1 Like

For the container based setup, please take a look here β†’ GitHub - vyogotech/frappista_sne_apps: Repo containing compose and .devcontainer files to use SNE images
and
GitHub - vyogotech/frappista: s2i based images for Frappe Framework. Experience all in one pre-installed Frappe and apps.

2 Likes

Thanks for the info, all working fine now :slight_smile:

1 Like

I’m a full-stack developer, who uses Kamal for deploying web apps in production. Kamal makes it super easy to deploy things such as Django, Postgres, Redis etc to a VPS Server. Even though Kamal is powered by Docker, docker knowledge is not required. I don’t have docker and server knowledge.

Can you please look into Kamal to deploy ERPNext on Ubuntu?

I like gitpod that kamal.

Try this gitpod config file:

Have used the script previously without issue but now encountering an error, which causes the script to crash on creation of a new site.

I used the /.erpnext_install.sh option to install and found that it was the mysql user root not being recognised.

I tried to access mysql but it was not recognising the mysql password set by the script, maybe something went wrong there?

I managed to get in to the mysql setup via sudo to reset the root password using
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
then flushed the privileges using
flush privileges;
and was then able to setup a site using the standard bench commands.

I want to appreciate your effort in bringing this quick install step and would like to provide some suggestion (happy to colloborate as well):

  1. We need to come up a XAMPP tool like app that works completed independent of OS installation i.e kind of portable installation for MYSQL, Redis,Python, Node etc,
  2. Use should be in a position to start/stop all the services (DB, Redis ., etc) in a single click of the button.

Your point 1 sounds very much like what FrappeFramework is, e.g. an integrated base for web applications. There are different packaging methods, and you could well add an FRAMP-NR to the AMP cult if you deem it necessary (FR = Framework, A = Apps, M = ChoseYourDBName, P = Python, N = Nginx, R = Redis).

Your point 2 sounds like an idea which might interfere with the correct and reliable functioning of the integrated framework. So what’s the point of getting back to 10-20 years ago tech? Depending on the setup, there are different methods to ensure correct start/stop and functioning of the relevant dependencies, using the more modern (than n switches to be GUI-actioned manually) methods of crashloop-recovery of tools like systemd, supervisor, docker, kubernetes.

Hey,

I see no problem with production setup using Containers. We need to see the installation aspect from multiple perspectives :

  1. Easy developer adoption/onboarding-> this area is currently challenging and I see lot of people struggling to get started. Telegram group chats shows that new devs face so many version issues. XAMPP like solution will simplify adoption .

  2. In a shared server model like the website hosting model, isolating installation is critical so effectively use the server capacity. We dont need a GUI here but getting a portable version of Frappe and it’s ecosystem is critical.

  3. Developing Installation script for multiple platforms is not easy ( MacOs terminal and Ubuntu terminal are different multiple architecture etc). So we need to come up with cross platform utility that helps adoption and works seamlessly.

  4. Frappe is too much tied to Linux ecosystem and lot of SMEs use windows laptops. This is another challenge. Containers solve the issue but again the laptop should be of high config.

Also note that, XAMPP is still relevant for PHP and WordPress developers. I personally feel XAMP improved the adoption of PHP in a short span of time. My personal experience with Frappe ecosystem was not that good when I started. I faced developer on-boarding issues.

There is other side of the story. In an enterprise usually production infrastructure will not have access to a developer tool like Git as its a security issue. I am working on a tool called fpm similar to npm to package, pull and push apps. DM me if you are interested to know more.

@Varun What do you think of Kamal deploy?

Kamal deploy for what? We already have container based deployment solution what is lacking is the packaging and centralized marketplace for apps.

1 Like