Odoo, which was previously called OpenERP, is a comprehensive suite of open-source business applications. It is a popular open-source enterprise resource planning (ERP) software choice. Odoo includes many modules that can be integrated into one application, enhancing its appeal. The newest version, Odoo 17, offers new features that boost its ease of use. The redesigned interface now supports keyboard shortcuts, facilitating the selection of records and enabling multiple selections with ease. This tutorial will show you how to install Odoo 18 on Almalinux 10 with nginx or Apache as a reverse proxy.
Table of Contents
Prerequisites
- An AlmaLinux 10 VPS with at least 2GB of RAM
- SSH root access, or a user with sudo privileges.
Conventions
# – given commands should be executed with root privileges either directly as a root user or by use of sudo command
$ – given commands should be executed as a regular user
Step 1. Install Dependencies
First, let’s install the dependencies before proceeding to the next steps; otherwise, we will encounter an issue when installing Odoo.
$ sudo dnf install bzip2-devel freetype gcc git openldap-devel libxslt-devel python3 python3-devel libjpeg-devel redhat-rpm-config xorg-x11-fonts-75dpi xorg-x11-fonts-Type1 -y
Step 2. Add System User
It is not recommended to install an Odoo instance under the root user. In this article, we will install the Odoo 18 instance under a new system user called odoo18. So, we need to create a new system account.
$ sudo useradd -md /opt/odoo18 -Urs /bin/bash odoo18
The command above adds a new system user called odoo18 with /opt/odoo18 as its home directory. Odoo 18 will be installed in this directory.
Step 3. Install PostgreSQL
Odoo supports only PostgreSQL as the database engine. Let’s install it directly from the repository.
$ sudo dnf install postgresql-server postgresql-devel postgresql-server-devel -y
In Almalinux, we need to initialize the database by executing this command before starting the PostgreSQL service:
$ sudo postgresql-setup --initdb --unit postgresql
Without initializing the database, we cannot start the PostgreSQL server.
Now, we can start it and enable it on boot.
$ sudo systemctl enable --now postgresql
Now that the PostgreSQL installation is finished, we can add a new PostgreSQL user for our Odoo 18, run this command:
$ sudo su - postgres -c "createuser -s odoo18"
The command above will create a new PostgreSQL user. We will not give the user a password, as the user can only log in locally.
Step 4. Install wkhtmltopdf
The wkhtmltopdf package for AlmaLinux 10 has not been released yet. However, we can use the package for AlmaLinux 9. You can go to their page and check the download link.
After getting the download link, let’s download the package.
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox-0.12.6.1-2.almalinux9.x86_64.rpm -O wkhtmltox.rpm
Once downloaded, we can install it by running this command:
$ sudo rpm -Uvh wkhtmltox.rpm
That’s it, it should be installed now. We can check the version.
$ wkhtmltopdf --version
It will print you an output like this:
wkhtmltopdf 0.12.6.1 (with patched qt)
Step 5. Install Odoo
In the previous step, we created a new system user called odoo18. We will use this user to install Odoo 18. Let’s switch to this user and install Odoo.
$ su - odoo18
Now, it’s time to download Odoo 18 from Github.
$ git clone https://www.github.com/odoo/odoo --depth 1 --branch 18.0 odoo18
It is best to install Odoo in a virtual environment. To do so, let’s execute the following command to create a new Python virtual environment.
$ python3 -m venv odoo18-venv
The virtual environment is now installed; it is time to activate it by running this command.
$ source odoo18-venv/bin/activate
Once executed, your shell prompt would look like this:
(odoo18-venv) [odoo18@rh ~]$
Next, we can install Odoo
(odoo18-venv) [odoo18@rh ~]$ pip3 install wheel
(odoo18-venv) [odoo18@rh ~]$ pip3 install -r odoo18/requirements.txt
Once the Odoo installation is completed, we can create a new directory to store our custom Odoo addons.
(odoo18-venv) [odoo18@rh ~]$ deactivate
[odoo18@rh ~]$ mkdir /opt/odoo18/odoo18/custom-addons
(odoo18-venv) [odoo18@rh ~]$ exit
Step 6. Create Odoo Configuration File
Now, let’s create the Odoo 18 configuration file.
$ sudo nano /etc/odoo18.conf
Paste the following contents into the file.
[options]
admin_passwd = m0d1fyth15
db_host = False
db_port = False
db_user = odoo18
db_password = False
addons_path = /opt/odoo18/odoo18/addons,/opt/odoo18/odoo18/custom-addons
http_port = 8069
You can replace the password m0d1fyth15 with a stronger one. Save it, then exit.
Step 7. Create Odoo Systemd Unit file
To manage Odoo 18 service, we will create a systemd unit file in this step.
$ sudo nano /etc/systemd/system/odoo18.service
Paste the following into the systemd unit file above.
[Unit]
Description=Odoo18
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo18
PermissionsStartOnly=true
User=odoo18
Group=odoo18
ExecStart=/opt/odoo18/odoo18-venv/bin/python3 /opt/odoo18/odoo18/odoo-bin -c /etc/odoo18.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
Save the file, then exit from the file editor.
That’s it. We can now reload systemd and run Odoo. The systemctl service should be reloaded every time we modify a systemd file.
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now odoo18
Check if Odoo is starting by running this command:
$ sudo systemctl status odoo18
The command above will give you an output like this:
● odoo18.service - Odoo18
Loaded: loaded (/etc/systemd/system/odoo18.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-04-01 21:58:30 CDT; 21min ago
Invocation: 69fc34cc6fae434fb2bd3eeb1f7db594
Main PID: 2755 (python3)
Tasks: 4 (limit: 23175)
Memory: 90M (peak: 92.1M)
CPU: 4.348s
CGroup: /system.slice/odoo18.service
└─2755 /opt/odoo18/odoo18-venv/bin/python3 /opt/odoo18/odoo18/odoo-bin -c /etc/odoo18.conf
Open your web browser and navigate to http://YOUR_SERVER_IP_ADDRESS:8069, and you will see the Odoo page.
Step 7. Install and Configure Reverse Proxy
At this point, you should be able to access your Odoo 18 installation at http://YOUR_SERVER_IP_ADDRESS:8069. To access it using your domain/subdomain, we can install a web server and configure it as a reverse proxy.
Install and Configure Nginx
It is straightforward, let’s run this command:
$ sudo dnf install nginx
Upon installation, nginx will not start automatically. Let’s run the command below to enable nginx and run it on boot.
$ sudo systemctl enable --now nginx
Nginx should be up and running now. Let’s proceed to the next step and create an nginx server block.
$ sudo nano /etc/nginx/conf.d/odoo.conf
Insert the following into that file.
upstream odoo18 {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
server {
listen 80;
server_name yourdomain.com;
access_log /var/log/nginx/odoo18.access.log;
error_log /var/log/nginx/odoo18.error.log;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
location / {
proxy_pass http://odoo18;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location /longpolling {
proxy_pass http://odoochat;
}
location ~* /web/static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo18;
}
}
Replace yourdomain.com with your actual domain name or subdomain name pointing to your server IP address. Then, save the file and exit from the file editor.
To apply the changes, we need to restart nginx.
$ sudo systemctl restart nginx
That’s it. You should now be able to access Odoo 18 at http://yourdomain.com.
Install and Configure Apache
If you prefer Apache to nginx, or you already have Apache installed on your system, you can follow this step and skip the previous one.
$ sudo dnf install httpd
Once Apache is installed, we can create a new virtual host.
$ sudo nano /etc/httpd/conf.d/odoo.conf
Insert the following into the odoo.conf file.
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
ErrorLog ${APACHE_LOG_DIR}/yourdomain-error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyRequests Off
<Proxy *>
Order deny,allow
Require all granted
</Proxy>
ProxyPass / http://127.0.0.1:8069/
ProxyPassReverse / http://127.0.0.1:8069/
<Location />
Order allow,deny
Require all granted
</Location>
</VirtualHost>
Replace yourdomain.com with your domain name, save the file, and restart Apache.
$ sudo systemctl restart httpd
That’s it! You should be able to access your Odoo instance at your domain.
Congratulations! You have followed this article and successfully installed Odoo 18 on your AlmaLinux 10 server. You can now add a new database and start customizing your Odoo website.
Of course, you don’t have to install Odoo 18 on AlmaLinux 10 if you use one of our Odoo VPS Hosting services. In that case, you can simply ask our expert Linux admins to install Odoo 18 on AlmaLinux 10 for you. Our expert administrators are available 24×7 and will take care of your request immediately. Simply log in to the client area and submit a ticket. Your Odoo 18 install should be up and running in no time.
If you liked this post on how to install Odoo 18 on AlmaLinux 10, please share it with your friends or leave a comment below.