# Install ERPNext 15 on Ubuntu 24.04 Proxmox CT

**Prerequisites**

The below prerequisites are advised in order to get an optimal functionality of ERPNext on your server.

**Software Requirements**

- Updated Ubuntu 24.04
- Python 3.12+
- A user with sudo privileges
- pip 20+
- MariaDB 10.3.x
- Node.js 18
- yarn 1.22+

Create Frappe user:

```bash
sudo apt-get update -y && sudo apt-get upgrade -y
sudo adduser frappe
sudo usermod -aG sudo frappe
su frappe
cd /home/frappe
```

Install Git and Python:

```bash
sudo apt-get install git
sudo apt-get install python3-dev
sudo apt-get install python3-setuptools python3-pip
sudo apt install python3.12-venv
sudo apt install -y python3-pip python3-dev python3-venv build-essential libffi-dev libssl-dev
```

Install MariaDB:

```bash
sudo apt-get install software-properties-common
sudo apt install mariadb-server
sudo systemctl status mariadb
sudo mysql_secure_installation
```

```bash
Enter current password for root: (Enter your SSH root user password)
-Switch to unix_socket authentication [Y/n]: Y
-Change the root password? [Y/n]: Y
It will ask you to set new MySQL root password at this step. This can be different from the SSH root user password.

-Remove anonymous users? [Y/n] Y
-Disallow root login remotely? [Y/n]: N
This is set as N because we might want to access the database from a remote server for using business analytics software like Metabase / PowerBI / Tableau, etc.

-Remove test database and access to it? [Y/n]: Y
-Reload privilege tables now? [Y/n]: Y
```

Add the below code block at the bottom of the file:

```bash
sudo nano /etc/mysql/my.cnf
```

```
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4
```

Restart sql server

```
sudo service mysql restart
```

Install Redis

```bash
sudo apt-get install redis-server
```

Install Node.js 20.X package

```
sudo apt install curl 
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.profile
nvm install 20
```

Install Yarn

```
sudo apt-get install npm
sudo npm install -g yarn
```

Install wkhtmltopdf

```
sudo apt-get install xvfb libfontconfig wkhtmltopdf
```

Install frappe-bench

```
sudo -H pip3 install frappe-bench --break-system-packages
bench --version
```

Initilise the frappe bench &amp; install frappe latest version

```
bench init frappe-bench --frappe-branch version-15
cd frappe-bench/
chmod -R o+rx /home/frappe
```

Create New Site

```
bench new-site domain.com
```

Get App ERPNext, Payment and HRMS

```bash
bench get-app erpnext --branch version-15
bench get-app payments
bench get-app hrms
```

Install App in site

```bash
bench --site domain.com install-app erpnext
```

Disable maintenance mode and Enable scheduler

```bash
bench --site domain.com set-maintenance-mode off
bench --site domain.com enable-scheduler
```

Install production dependencies

```
sudo apt update
sudo apt install -y supervisor nginx
```

Install ansible from APT (simplest)

```
sudo apt install -y ansible-core
sudo bench setup production frappe
```

regenerate Supervisor config:

```
cd ~/frappe-bench
bench setup supervisor
sudo ln -s `pwd`/config/supervisor.conf /etc/supervisor/conf.d/frappe-bench.conf
```

Reload Supervisor so it reads the new config:

```
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status
```

You should finally see ERPNext processes (web, worker, scheduler, etc.).   
If they aren’t running, start them:

```
sudo supervisorctl start all
```