@ -1,9 +1,9 @@
#!/bin/bash
################################################################################
# Script for installing Odoo on Ubuntu 16.04, 18.04, 20.04 and 22.04 (could be used for other version too)
# Script for installing Odoo on Ubuntu 22.04 (could be used for other version too)
# Author: Yenthe Van Ginneken
#-------------------------------------------------------------------------------
# This script will install Odoo on your Ubuntu server. It can install multiple Odoo instances
# This script will install Odoo on your Ubuntu 22.04 server. It can install multiple Odoo instances
# in one Ubuntu because of the different xmlrpc_ports
#-------------------------------------------------------------------------------
# Make a new file:
@ -22,15 +22,13 @@ OE_HOME_EXT="/$OE_USER/${OE_USER}-server"
INSTALL_WKHTMLTOPDF = "True"
# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.)
OE_PORT = "8069"
# Choose the Odoo version which you want to install. For example: 1 6.0, 15.0, 14.0 or saas-22 . When using 'master' the master version will be installed.
# IMPORTANT! This script contains extra libraries that are specifically needed for Odoo 1 6 .0
OE_VERSION = "1 6 .0"
# Choose the Odoo version which you want to install. For example: 1 3.0, 12.0, 11.0 or saas-18 . When using 'master' the master version will be installed.
# IMPORTANT! This script contains extra libraries that are specifically needed for Odoo 1 3 .0
OE_VERSION = "1 7 .0"
# Set this to True if you want to install the Odoo enterprise version!
IS_ENTERPRISE = "False"
# Installs postgreSQL V14 instead of defaults (e.g V12 for Ubuntu 20/22) - this improves performance
INSTALL_POSTGRESQL_FOURTEEN = "True"
# Set this to True if you want to install Nginx!
INSTALL_NGINX = " Fals e"
INSTALL_NGINX = "True"
# Set the superadmin password - if GENERATE_RANDOM_PASSWORD is set to "True" we will automatically generate a random password, otherwise we use this one
OE_SUPERADMIN = "admin"
# Set to "True" to generate a random password, "False" to use the variable in OE_SUPERADMIN
@ -41,7 +39,7 @@ WEBSITE_NAME="_"
# Set the default Odoo longpolling port (you still have to use -c /etc/odoo-server.conf for example to use this.)
LONGPOLLING_PORT = "8072"
# Set to "True" to install certbot and have ssl enabled, "False" to use http
ENABLE_SSL = " Tru e"
ENABLE_SSL = " Fals e"
# Provide Email to register ssl certificate
ADMIN_EMAIL = "odoo@example.com"
##
@ -49,46 +47,32 @@ ADMIN_EMAIL="odoo@example.com"
## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links,
## in order to have correct version of wkhtmltopdf installed, for a danger note refer to
## https://github.com/odoo/odoo/wiki/Wkhtmltopdf ):
## https://www.odoo.com/documentation/1 6.0/administration/install.html
## https://www.odoo.com/documentation/1 3.0/setup/install.html#debian-ubuntu
# Check if the operating system is Ubuntu 22.04
if [ [ $( lsb_release -r -s) = = "22.04" ] ] ; then
WKHTMLTOX_X64 = "https://packages.ubuntu.com/jammy/wkhtmltopdf"
WKHTMLTOX_X32 = "https://packages.ubuntu.com/jammy/wkhtmltopdf"
#No Same link works for both 64 and 32-bit on Ubuntu 22.04
else
# For older versions of Ubuntu
WKHTMLTOX_X64 = " https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1. $( lsb_release -c -s) _amd64.deb "
WKHTMLTOX_X32 = " https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1. $( lsb_release -c -s) _i386.deb "
fi
WKHTMLTOX_X64 = https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
#--------------------------------------------------
# Update Server
#--------------------------------------------------
echo -e "\n---- Update Server ----"
# universe package is for Ubuntu 18.x
sudo add-apt-repository universe
# libpng12-0 dependency for wkhtmltopdf for older Ubuntu versions
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main"
#sudo add-apt-repository universe
# libpng12-0 dependency for wkhtmltopdf
#sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main"
echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install libpq-dev
sudo apt install curl ca-certificates gnupg2 lsb-release ubuntu-keyring -y
#--------------------------------------------------
# Install PostgreSQL Server
#--------------------------------------------------
echo -e "\n---- Install PostgreSQL Server ----"
if [ $INSTALL_POSTGRESQL_FOURTEEN = "True" ] ; then
echo -e "\n---- Installing postgreSQL V14 due to the user it's choise ----"
sudo curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc| sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt-get update
sudo apt-get install postgresql-14
else
echo -e "\n---- Installing the default postgreSQL version based on Linux version ----"
sudo apt-get install postgresql postgresql-server-dev-all -y
fi
sudo curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null
sudo sh -c 'echo "deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt-get update
sudo apt-get install postgresql postgresql-server-dev-all postgis -y
echo -e "\n---- Creating the ODOO PostgreSQL User ----"
sudo su - postgres -c " createuser -s $OE_USER " 2> /dev/null || true
@ -97,42 +81,47 @@ sudo su - postgres -c "createuser -s $OE_USER" 2> /dev/null || true
# Install Dependencies
#--------------------------------------------------
echo -e "\n--- Installing Python 3 + pip3 --"
sudo apt-get install python3 python3-pip
sudo apt-get install git python3-cffi build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng-dev libjpeg-dev gdebi -y
sudo apt-get install git python3 python3-pip build-essential wget python3-dev python3-venv python3-wheel python3-cffi libssl1.1 libxslt1-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng-dev libjpeg-dev gdebi -y
echo -e "\n--- upgrading Python 3 + pip3 --"
sudo pip3 install --upgrade pip
sudo pip3 install html2text
echo -e "\n---- Install python packages/requirements ----"
sudo -H pip3 install -r https://github.com/odoo/odoo/raw/${ OE_VERSION } /requirements.txt
echo -e "\n---- Installing nodeJS NPM and rtlcss for LTR support ----"
sudo apt-get install nodejs npm -y
sudo apt-get install nodejs -y
sudo npm install -g rtlcss
#--------------------------------------------------
# Install Bangla fonts
#--------------------------------------------------
echo -e "\n---- Installing Lohit Bengali font. ----"
sudo apt install fonts-beng -y
#--------------------------------------------------
# Install Wkhtmltopdf if needed
#--------------------------------------------------
if [ $INSTALL_WKHTMLTOPDF = "True" ] ; then
echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 13 ----"
#pick up correct one from x64 & x32 versions:
if [ "`getconf LONG_BIT`" = = "64" ] ; then
_url = $WKHTMLTOX_X64
else
_url = $WKHTMLTOX_X32
fi
sudo wget $_url
if [ [ $( lsb_release -r -s) = = "22.04" ] ] ; then
# Ubuntu 22.04 LTS
sudo apt install wkhtmltopdf -y
else
# For older versions of Ubuntu
echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 15 ----"
# echo -e "\n ---- Installing libssl1.1"
# sudo wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
# sudo apt install ./libssl1.1_1.1.0g-2ubuntu4_amd64.deb -y
#pick up correct one from x64 & x32 versions:
if [ "`getconf LONG_BIT`" = = "64" ] ; then
_url = $WKHTMLTOX_X64
fi
sudo wget $_url
sudo gdebi --n ` basename $_url `
fi
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
else
echo "Wkhtmltopdf isn't installed due to the choice of the user!"
echo "Wkhtmltopdf isn't installed due to the choice of the user!"
fi
echo -e "\n---- Create ODOO system user ----"
@ -157,8 +146,8 @@ if [ $IS_ENTERPRISE = "True" ]; then
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo su $OE_USER -c " mkdir $OE_HOME /enterprise "
sudo su $OE_USER -c " mkdir $OE_HOME /enterprise/addons "
GITHUB_RESPONSE = $( sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise " $OE_HOME /enterprise/addons " 2>& 1 )
GITHUB_RESPONSE = "False"
#GITHUB_RESPONSE=$(sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise "$OE_HOME/enterprise/addons" 2>&1 )
while [ [ $GITHUB_RESPONSE = = *"Authentication" * ] ] ; do
echo "------------------------WARNING------------------------------"
echo "Your authentication with Github has failed! Please try again."
@ -168,7 +157,7 @@ if [ $IS_ENTERPRISE = "True" ]; then
echo " "
GITHUB_RESPONSE = $( sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise " $OE_HOME /enterprise/addons " 2>& 1)
done
echo -e " \n---- Added Enterprise code under $OE_HOME /enterprise/addons ---- "
echo -e "\n---- Installing Enterprise specific libraries ----"
sudo -H pip3 install num2words ofxparse dbfread ebaysdk firebase_admin pyOpenSSL
@ -196,13 +185,14 @@ fi
sudo su root -c " printf 'admin_passwd = ${ OE_SUPERADMIN } \n' >> /etc/ ${ OE_CONFIG } .conf "
if [ $OE_VERSION > "11.0" ] ; then
sudo su root -c " printf 'http_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'gevent_port = ${ LONGPOLLING_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
else
sudo su root -c " printf 'xmlrpc_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
fi
sudo su root -c " printf 'logfile = /var/log/ ${ OE_USER } / ${ OE_CONFIG } .log\n' >> /etc/ ${ OE_CONFIG } .conf "
if [ $IS_ENTERPRISE = "True" ] ; then
sudo su root -c " printf 'addons_path= ${ OE_HOME } /enterprise/addons, ${ OE_HOME_EXT } /addons \n' >> /etc/${ OE_CONFIG } .conf "
sudo su root -c " printf 'addons_path= ${ OE_HOME } /enterprise/addons, ${ OE_HOME_EXT } /addons ,${ OE_HOME } /custom/addons \n' >> /etc/${ OE_CONFIG } .conf "
else
sudo su root -c " printf 'addons_path= ${ OE_HOME_EXT } /addons, ${ OE_HOME } /custom/addons\n' >> /etc/ ${ OE_CONFIG } .conf "
fi
@ -297,10 +287,29 @@ sudo update-rc.d $OE_CONFIG defaults
# Install Nginx if needed
#--------------------------------------------------
if [ $INSTALL_NGINX = "True" ] ; then
echo -e "\n---- Installing and setting up Nginx ----"
sudo apt install nginx -y
cat <<EOF > ~/odoo
server {
echo -e "\n---- Installing and setting up Nginx ----"
echo -e "\n---- Importing an official nginx signing key so apt could verify the packages authenticity ----"
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo -e "\n---- Verifing that the downloaded file contains the proper key ----"
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
echo -e "\n---- set up the apt repository for stable nginx packages ----"
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update; sudo apt install nginx -y
sudo -H pip3 install certbot certbot-nginx
cat <<EOF > ~/odoo.conf
upstream odooserver {
server 127.0.0.1:$OE_PORT ;
}
upstream odoolongpoll {
server 127.0.0.1:$LONGPOLLING_PORT ;
}
server {
listen 80;
# set proper server name after domain set
@ -333,8 +342,8 @@ server {
http_503;
types {
text/less less;
text/scss scss;
text/less less;
text/scss scss;
}
# enable data compression
@ -348,40 +357,42 @@ server {
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:$OE_PORT ;
# by default, do not forward anything
proxy_redirect off;
proxy_pass http://odooserver ;
# by default, do not forward anything
proxy_redirect off;
}
location /longpolling {
proxy_pass http://127.0.0.1:$LONGPOLLING_PORT ;
location /websocket {
proxy_pass http://odoolongpoll ;
}
location ~* .( js| css| png| jpg| jpeg| gif| ico) $ {
expires 2d;
proxy_pass http://127.0.0.1:$OE_PORT ;
add_header Cache-Control "public, no-transform" ;
expires 2d;
proxy_pass http://odooserver ;
add_header Cache-Control "public, no-transform" ;
}
# cache some static data in memory for 60mins.
location ~ /[ a-zA-Z0-9_-] */static/ {
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_buffering on;
expires 864000;
proxy_pass http://127.0.0.1:$OE_PORT ;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_buffering on;
expires 864000;
proxy_pass http://odooserver;
}
location /wait {
#proxy_pass http://odooserver;
proxy_cookie_path / "/; secure; HttpOnly; SameSite=None; Secure" ;
}
}
}
EOF
sudo mv ~/odoo /etc/nginx/sites-available/$WEBSITE_NAME
sudo ln -s /etc/nginx/sites-available/$WEBSITE_NAME /etc/nginx/sites-enabled/$WEBSITE_NAME
sudo rm /etc/nginx/sites-enabled/default
sudo service nginx reload
sudo su root -c " printf 'proxy_mode = True\n' >> /etc/ ${ OE_CONFIG } .conf "
echo " Done! The Nginx server is up and running. Configuration can be found at /etc/nginx/sites-available/$WEBSITE_NAME "
sudo mv ~/odoo.conf /etc/nginx/conf.d/
# sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
sudo rm /etc/nginx/conf.d/default.conf
sudo service nginx reload
sudo su root -c " printf 'proxy_mode = True\n' >> /etc/ ${ OE_CONFIG } .conf "
echo " Done! The Nginx server is up and running. Configuration can be found at /etc/nginx/conf.d/odoo.conf "
else
echo "Nginx isn't installed due to choice of the user!"
echo "Nginx isn't installed due to choice of the user!"
fi
#--------------------------------------------------
@ -389,24 +400,16 @@ fi
#--------------------------------------------------
if [ $INSTALL_NGINX = "True" ] && [ $ENABLE_SSL = "True" ] && [ $ADMIN_EMAIL != "odoo@example.com" ] && [ $WEBSITE_NAME != "_" ] ; then
sudo apt-get update -y
sudo apt install snapd -y
sudo snap install core; snap refresh core
sudo snap install --classic certbot
sudo apt-get install python3-certbot-nginx -y
sudo certbot --nginx -d $WEBSITE_NAME --noninteractive --agree-tos --email $ADMIN_EMAIL --redirect
sudo service nginx reload
echo "SSL/HTTPS is enabled!"
sudo certbot --nginx -d $WEBSITE_NAME --noninteractive --agree-tos --email $ADMIN_EMAIL --redirect
sudo service nginx reload
echo "SSL/HTTPS is enabled!"
else
echo "SSL/HTTPS isn't enabled due to choice of the user or because of a misconfiguration!"
if $ADMIN_EMAIL = "odoo@example.com" ; then
echo "Certbot does not support registering odoo@example.com. You should use real e-mail address."
fi
if $WEBSITE_NAME = "_" ; then
echo "Website name is set as _. Cannot obtain SSL Certificate for _. You should use real website address."
fi
echo "SSL/HTTPS isn't enabled due to choice of the user or because of a misconfiguration!"
fi
sudo -H pip3 install pyOpenSSL = = 21.0.0
sudo -H pip3 install cryptography = = 36.0.2
echo -e "* Starting Odoo Service"
sudo su root -c " /etc/init.d/ $OE_CONFIG start "
echo "-----------------------------------------------------------"
@ -417,12 +420,12 @@ echo "Configuraton file location: /etc/${OE_CONFIG}.conf"
echo " Logfile location: /var/log/ $OE_USER "
echo " User PostgreSQL: $OE_USER "
echo " Code location: $OE_USER "
echo " Addons folder: $OE_USER / $OE_CONFIG /addons/"
echo " Addons folder: /$OE_USER /custom /addons/"
echo " Password superadmin (database): $OE_SUPERADMIN "
echo " Start Odoo service: sudo service $OE_CONFIG start "
echo " Stop Odoo service: sudo service $OE_CONFIG stop "
echo " Restart Odoo service: sudo service $OE_CONFIG restart "
if [ $INSTALL_NGINX = "True" ] ; then
echo " Nginx configuration file: /etc/nginx/sites-available/ $WEBSITE_NAME "
echo "Nginx configuration file: /etc/nginx/conf.d/odoo.conf "
fi
echo "-----------------------------------------------------------"