Frappe Cloud Support Partners Foundation Frappe School

Installation of ERPNEXT 13 through Easy Install Script on Amazon EC2 instance and setup Let's Encrypt Certificate

Hey Guys,

I would like to share my installation steps which i took to install ERPNEXT on Amazon EC2 instance and also installed Let’s Encrypt certificate install.

This worked without flaw. Perhaps you can give it a try if you are failing to install ERPNEXT.

AWS EC2 Instance which i used:
AMI - Ubuntu Focal -20.04-amd64-server
Instance Type: t3a.large (2 vcpu - 8gb Memory) - Tried on free tier, but it never installed

Installation Steps:

  1. created sudo user [newuser]

sudo adduser [newuser]

  1. changed root password:-

sudo passwd root

  1. Changed to “root” account


  1. Ran apt-get update and upgraded

apt-get update && apt-get upgrade

  1. Changed user to the newly created user

su - [newuser]

  1. Now the easy install script will be run under this newly created user account only.
    Please run following commands in terminal.

sudo localectl set-keymap us && sudo localectl set-locale LANG=en_US.utf8

  1. Below command will open a file in the nano editor.

sudo nano /etc/environment

  1. Now add following lines in the file which is opened by nano


  1. Now, Reboot!

sudo reboot

  1. Change to newly created user.

su - [newuser]

  1. From below commands, we will download easy script in to the folder of newly create user [newuser]


  1. Next command will install the ERPNEXT 13 in production mode.

sudo python3 --verbose --production --user [newuser] --mariadb-version 10.5 --frappe-branch version-13 --erpnext-branch version-13

  1. Now, automated install will take place. It will ask for mysql root password & default admin password halfway down. Give input to machine when promted (and also save for future ref).

  2. If everything goes fine, bench will be installed in the production version.

  3. Bench will be installed with default site “site1.local” which you may want to change as you want to install erpnext on your subdomain (Website). To achieve this, follow below:-

mv sites/site1.local sites/
bench setup nginx
sudo service nginx reload

  1. Setup Multitenancy in order to use the letsencrypt

bench use examplesitename
bench config dns_multitenant on

  1. Now, point your subdomain to your public ip address of AWS EC2 instance (in short, add “A” record in your dns) like below:-
    Type: A
    Name: whatever subdomain as you like, for example: “erp”, “crm”, “mail” (#this is what i used as i own domain
    value: ip address of your ec2 instance
    TTL: 1 hour

  2. Now, follow below instructions from Certbot for further configuration of letsencrypt. This will install https access to your website.

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx

Now, certificate has been installed on the given domain.

With this, you have installed ERPNEXT on Amazon EC2 instance and also installed https for your subdomain.

If you want the bench to be installed in production version, follow below command from the ERPNEXT install directory.

bench set-config developer_mode 1


Much appreciate guide, brief and precise.
Unfortunately the script failed twice , with fatal error at

TASK [bench : python3 bench init for production] *****************
task path: /tmp/.bench/bench/playbooks/roles/bench/tasks/main.yml:44
<> EXEC /bin/sh -c ‘echo ~root && sleep 0’
<> EXEC /bin/sh -c ‘( umask 77 && mkdir -p “echo /var/tmp”&& mkdir /var/tmp/ansible-tmp-1641986161.4809225-27947-19100
1696391721 && echo ansible-tmp-1641986161.4809225-27947-191001696391721="echo /var/tmp/ansible-tmp-1641986161.4809225-27947-19100 1696391721" ) && sleep 0’
Using module file /usr/local/lib/python3.8/dist-packages/ansible/modules/commands/
<> PUT /root/.ansible/tmp/ansible-local-24692j4f3dytp/tmpaou46c0k TO /var/tmp/ansible-tmp-1641986161.4809225-27947-1910016
<> EXEC /bin/sh -c ‘setfacl -m ‘"’"‘u:[newuser]:r-x’"’"’ /var/tmp/ansible-tmp-1641986161.4809225-27947-191001696391721/ /v
ar/tmp/ansible-tmp-1641986161.4809225-27947-191001696391721/ && sleep 0’
<> EXEC /bin/sh -c ‘chmod u+x /var/tmp/ansible-tmp-1641986161.4809225-27947-191001696391721/ /var/tmp/ansible-tmp-16419861
61.4809225-27947-191001696391721/ && sleep 0’
<> EXEC /bin/sh -c ‘chown ‘"’"’[newuser]’"’"’ /var/tmp/ansible-tmp-1641986161.4809225-27947-191001696391721/ /var/tmp/ansi
ble-tmp-1641986161.4809225-27947-191001696391721/ && sleep 0’
<> EXEC /bin/sh -c ‘sudo -H -S -n -u [newuser] /bin/sh -c ‘"’"‘echo BECOME-SUCCESS-ajdbrdjdfocbzfsirfuebnfumggnjxed ; /us
r/bin/python3 /var/tmp/ansible-tmp-1641986161.4809225-27947-191001696391721/’"’"’ && sleep 0’
<> EXEC /bin/sh -c ‘rm -f -r /var/tmp/ansible-tmp-1641986161.4809225-27947-191001696391721/ > /dev/null 2>&1 && sleep 0’
fatal: [localhost]: FAILED! => {
“changed”: true,
“cmd”: [
“delta”: “0:00:00.239021”,
d": true,
“cmd”: [
“delta”: “0:00:00.300215”,
“end”: “2022-01-12 10:50:38.153296”,
“invocation”: {
“module_args”: {
“_raw_params”: “bench init /home/miraj/frappe-bench --frappe-path --frappe-branch vers
ion-13 --python python3”,
“_uses_shell”: false,
“argv”: null,

any guide would be appreciated