@ -17,31 +17,44 @@
OE_USER = "odoo"
OE_USER = "odoo"
OE_HOME = " / $OE_USER "
OE_HOME = " / $OE_USER "
OE_HOME_EXT = " / $OE_USER / ${ OE_USER } -server "
OE_HOME_EXT = " / $OE_USER / ${ OE_USER } -server "
# The default port where this Odoo instance will run under (provided you use the command -c in the terminal)
# The default port where this Odoo instance will run under (provided you use the command -c in the terminal)
# Set to true if you want to install it, false if you don't need it or have it already installed.
# Set to true if you want to install it, false if you don't need it or have it already installed.
INSTALL_WKHTMLTOPDF = "True"
INSTALL_WKHTMLTOPDF = "True"
# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.)
# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.)
OE_PORT = "8069"
OE_PORT = "8069"
# Choose the Odoo version which you want to install. For example: 13.0, 12.0, 11.0 or saas-18. When using 'master' the master version will be installed.
# Choose the Odoo version which you want to install. For example: 13.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 13.0
# IMPORTANT! This script contains extra libraries that are specifically needed for Odoo 13.0
OE_VERSION = "15.0"
OE_VERSION = "15.0"
# Set this to True if you want to install the Odoo enterprise version!
# Set this to True if you want to install the Odoo enterprise version!
IS_ENTERPRISE = "False"
IS_ENTERPRISE = "False"
# Set this to True if you want to install Nginx!
# Set this to True if you want to install Nginx!
INSTALL_NGINX = "False"
INSTALL_NGINX = "False"
# Set the superadmin password - if GENERATE_RANDOM_PASSWORD is set to "True" we will automatically generate a random password, otherwise we use this one
# 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"
OE_SUPERADMIN = "admin"
# Set to "True" to generate a random password, "False" to use the variable in OE_SUPERADMIN
# Set to "True" to generate a random password, "False" to use the variable in OE_SUPERADMIN
GENERATE_RANDOM_PASSWORD = "True"
GENERATE_RANDOM_PASSWORD = "True"
OE_CONFIG = " ${ OE_USER } / ${ OE_USER } "
OE_CONFIG = " ${ OE_USER } / ${ OE_USER } "
# Set the website name
# Set the website name
WEBSITE_NAME = "_"
WEBSITE_NAME = "_"
# Set the default Odoo longpolling port (you still have to use -c /etc/odoo-server.conf for example to use this.)
# Set the default Odoo longpolling port (you still have to use -c /etc/odoo-server.conf for example to use this.)
LONGPOLLING_PORT = "8072"
LONGPOLLING_PORT = "8072"
# Set to "True" to install certbot and have ssl enabled, "False" to use http
# Set to "True" to install certbot and have ssl enabled, "False" to use http
ENABLE_SSL = "True"
ENABLE_SSL = "True"
# Provide Email to register ssl certificate
# Provide Email to register ssl certificate
ADMIN_EMAIL = "odoo@example.com"
ADMIN_EMAIL = "odoo@example.com"
##
##
### WKHTMLTOPDF download links
### WKHTMLTOPDF download links
## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links,
## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links,
@ -51,17 +64,18 @@ ADMIN_EMAIL="odoo@example.com"
WKHTMLTOX_X64 = " https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1. $( lsb_release -c -s) _amd64.deb "
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) _amd64.deb "
WKHTMLTOX_X32 = " https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1. $( lsb_release -c -s) _amd64.deb "
#--------------------------------------------------
#--------------------------------------------------
# Update Server
# Update Server
#--------------------------------------------------
#--------------------------------------------------
echo -e "\n---- Update Server ----"
echo -e "\n---- Update Server ----"
sudo apt-get update
sudo apt-get install software-properties-common -y
sudo apt-get update
# universe package is for Ubuntu 18.x
# universe package is for Ubuntu 18.x
sudo add-apt-repository universe
sudo add-apt-repository universe
# libpng12-0 dependency for wkhtmltopdf
# libpng12-0 dependency for wkhtmltopdf
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main"
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main"
sudo apt-get update
sudo apt-get install software-properties-common -y
sudo apt-get update
sudo add-apt-repository ppa:linuxuprising/libpng12 -y
sudo add-apt-repository ppa:linuxuprising/libpng12 -y
sudo apt update
sudo apt update
sudo apt-get upgrade -y
sudo apt-get upgrade -y
@ -88,27 +102,34 @@ echo -e "\n---- Installing nodeJS NPM and rtlcss for LTR support ----"
sudo apt-get install nodejs npm -y
sudo apt-get install nodejs npm -y
sudo npm install -g rtlcss
sudo npm install -g rtlcss
sudo pip3 install psycopg2-binary pdfminer.six
sudo -H pip3 install num2words ofxparse dbfread ebaysdk firebase_admin pyOpenSSL
sudo npm install -g less
sudo npm install -g less-plugin-clean-css
sudo ln -s /usr/bin/nodejs /usr/bin/node
#--------------------------------------------------
#--------------------------------------------------
# Install Wkhtmltopdf if needed
# Install Wkhtmltopdf if needed
#--------------------------------------------------
#--------------------------------------------------
if [ $INSTALL_WKHTMLTOPDF = "True" ] ; then
if [ $INSTALL_WKHTMLTOPDF = "True" ] ; then
echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 13 ----"
echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 13 ----"
#pick up correct one from x64 & x32 versions:
#pick up correct one from x64 & x32 versions:
if [ "`getconf LONG_BIT`" = = "64" ] ; then
if [ "`getconf LONG_BIT`" = = "64" ] ; then
_url = $WKHTMLTOX_X64
_url = $WKHTMLTOX_X64
else
else
_url = $WKHTMLTOX_X32
_url = $WKHTMLTOX_X32
fi
fi
sudo wget $_url
sudo wget $_url
sudo gdebi --n ` basename $_url `
sudo gdebi --n ` basename $_url `
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
else
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
fi
echo -e "\n---- Create ODOO system user ----"
echo -e "\n---- Create ODOO system user ----"
sudo adduser --system --quiet --shell= /bin/bash --home= $OE_HOME --gecos 'ODOO' --group $OE_USER
sudo adduser --system --quiet --shell= /bin/bash --home= $OE_HOME --gecos 'ODOO' --group $OE_USER
#The user should also be added to the sudo'ers group.
#The user should also be added to the sudo'ers group.
sudo adduser $OE_USER sudo
sudo adduser $OE_USER sudo
@ -124,7 +145,6 @@ sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/odoo $
if [ $IS_ENTERPRISE = "True" ] ; then
if [ $IS_ENTERPRISE = "True" ] ; then
# Odoo Enterprise install!
# Odoo Enterprise install!
sudo pip3 install psycopg2-binary pdfminer.six
echo -e "\n--- Create symlink for node"
echo -e "\n--- Create symlink for node"
sudo ln -s /usr/bin/nodejs /usr/bin/node
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 "
@ -143,9 +163,6 @@ if [ $IS_ENTERPRISE = "True" ]; then
echo -e " \n---- Added Enterprise code under $OE_HOME /enterprise/addons ---- "
echo -e " \n---- Added Enterprise code under $OE_HOME /enterprise/addons ---- "
echo -e "\n---- Installing Enterprise specific libraries ----"
echo -e "\n---- Installing Enterprise specific libraries ----"
sudo -H pip3 install num2words ofxparse dbfread ebaysdk firebase_admin pyOpenSSL
sudo npm install -g less
sudo npm install -g less-plugin-clean-css
fi
fi
echo -e "\n---- Create custom module directory ----"
echo -e "\n---- Create custom module directory ----"
@ -155,31 +172,39 @@ sudo su $OE_USER -c "mkdir $OE_HOME/custom/addons"
echo -e "\n---- Setting permissions on home folder ----"
echo -e "\n---- Setting permissions on home folder ----"
sudo chown -R $OE_USER :$OE_USER $OE_HOME /*
sudo chown -R $OE_USER :$OE_USER $OE_HOME /*
echo -e "* Create server config file"
if [ ! -e " /etc/ ${ OE_CONFIG } .conf " ] ; then
sudo mkdir /etc/$OE_USER
sudo chown -R $OE_USER /etc/$OE_USER
echo -e "* Create server config file"
sudo touch /etc/${ OE_CONFIG } .conf
sudo mkdir /etc/$OE_USER
echo -e "* Creating server config file"
sudo chown -R $OE_USER /etc/$OE_USER
sudo su root -c " printf '[options] \n; This is the password that allows database operations:\n' >> /etc/ ${ OE_CONFIG } .conf "
sudo touch /etc/${ OE_CONFIG } .conf
if [ $GENERATE_RANDOM_PASSWORD = "True" ] ; then
echo -e "* Generating random admin password"
echo -e "* Creating server config file"
OE_SUPERADMIN = $( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
sudo su root -c " printf '[options] \n; This is the password that allows database operations:\n' >> /etc/ ${ OE_CONFIG } .conf "
fi
if [ $GENERATE_RANDOM_PASSWORD = "True" ] ; then
sudo su root -c " printf 'admin_passwd = ${ OE_SUPERADMIN } \n' >> /etc/ ${ OE_CONFIG } .conf "
echo -e "* Generating random admin password"
if [ $OE_VERSION > "11.0" ] ; then
OE_SUPERADMIN = $( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
sudo su root -c " printf 'http_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
fi
else
sudo su root -c " printf 'xmlrpc_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'admin_passwd = ${ OE_SUPERADMIN } \n' >> /etc/ ${ OE_CONFIG } .conf "
fi
if [ $OE_VERSION > "11.0" ] ; then
sudo su root -c " printf 'logfile = /var/log/ ${ OE_USER } / ${ OE_CONFIG } .log\n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'http_port = ${ OE_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 "
else
sudo su root -c " printf 'addons_path= ${ OE_HOME_EXT } /addons, ${ OE_HOME } /custom/addons\n' >> /etc/ ${ OE_CONFIG } .conf "
fi
sudo chown $OE_USER :$OE_USER /etc/${ OE_CONFIG } .conf
sudo chmod 640 /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 "
else
sudo su root -c " printf 'addons_path= ${ OE_HOME_EXT } /addons, ${ OE_HOME } /custom/addons\n' >> /etc/ ${ OE_CONFIG } .conf "
fi
fi
sudo chown $OE_USER :$OE_USER /etc/${ OE_CONFIG } .conf
sudo chmod 640 /etc/${ OE_CONFIG } .conf
sudo ln -s $OE_HOME_EXT /odoo-bin /usr/bin/odoo
sudo ln -s $OE_HOME_EXT /odoo-bin /usr/bin/odoo
sudo ln -s $OE_HOME_EXT /debian/odoo.service /etc/systemd/system/
sudo ln -s $OE_HOME_EXT /debian/odoo.service /etc/systemd/system/
@ -191,91 +216,91 @@ sudo systemctl start odoo
# Install Nginx if needed
# Install Nginx if needed
#--------------------------------------------------
#--------------------------------------------------
if [ $INSTALL_NGINX = "True" ] ; then
if [ $INSTALL_NGINX = "True" ] ; then
echo -e "\n---- Installing and setting up Nginx ----"
echo -e "\n---- Installing and setting up Nginx ----"
sudo apt install nginx -y
sudo apt install nginx -y
cat <<EOF > ~/odoo
cat <<EOF > ~/odoo
server {
server {
listen 80;
listen 80;
# set proper server name after domain set
# set proper server name after domain set
server_name $WEBSITE_NAME ;
server_name $WEBSITE_NAME ;
# Add Headers for odoo proxy mode
# Add Headers for odoo proxy mode
proxy_set_header X-Forwarded-Host \$ host;
proxy_set_header X-Forwarded-Host \$ host;
proxy_set_header X-Forwarded-For \$ proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For \$ proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$ scheme;
proxy_set_header X-Forwarded-Proto \$ scheme;
proxy_set_header X-Real-IP \$ remote_addr;
proxy_set_header X-Real-IP \$ remote_addr;
add_header X-Frame-Options "SAMEORIGIN" ;
add_header X-Frame-Options "SAMEORIGIN" ;
add_header X-XSS-Protection "1; mode=block" ;
add_header X-XSS-Protection "1; mode=block" ;
proxy_set_header X-Client-IP \$ remote_addr;
proxy_set_header X-Client-IP \$ remote_addr;
proxy_set_header HTTP_X_FORWARDED_HOST \$ remote_addr;
proxy_set_header HTTP_X_FORWARDED_HOST \$ remote_addr;
# odoo log files
# odoo log files
access_log /var/log/nginx/$OE_USER -access.log;
access_log /var/log/nginx/$OE_USER -access.log;
error_log /var/log/nginx/$OE_USER -error.log;
error_log /var/log/nginx/$OE_USER -error.log;
# increase proxy buffer size
# increase proxy buffer size
proxy_buffers 16 64k;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
proxy_buffer_size 128k;
proxy_read_timeout 900s;
proxy_read_timeout 900s;
proxy_connect_timeout 900s;
proxy_connect_timeout 900s;
proxy_send_timeout 900s;
proxy_send_timeout 900s;
# force timeouts if the backend dies
# force timeouts if the backend dies
proxy_next_upstream error timeout invalid_header http_500 http_502
proxy_next_upstream error timeout invalid_header http_500 http_502
http_503;
http_503;
types {
types {
text/less less;
text/less less;
text/scss scss;
text/scss scss;
}
}
# enable data compression
# enable data compression
gzip on;
gzip on;
gzip_min_length 1100;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_buffers 4 32k;
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript application/pdf image/jpeg image/png;
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript application/pdf image/jpeg image/png;
gzip_vary on;
gzip_vary on;
client_header_buffer_size 4k;
client_header_buffer_size 4k;
large_client_header_buffers 4 64k;
large_client_header_buffers 4 64k;
client_max_body_size 0;
client_max_body_size 0;
location / {
location / {
proxy_pass http://127.0.0.1:$OE_PORT ;
proxy_pass http://127.0.0.1:$OE_PORT ;
# by default, do not forward anything
# by default, do not forward anything
proxy_redirect off;
proxy_redirect off;
}
}
location /longpolling {
location /longpolling {
proxy_pass http://127.0.0.1:$LONGPOLLING_PORT ;
proxy_pass http://127.0.0.1:$LONGPOLLING_PORT ;
}
}
location ~* .( js| css| png| jpg| jpeg| gif| ico) $ {
location ~* .( js| css| png| jpg| jpeg| gif| ico) $ {
expires 2d;
expires 2d;
proxy_pass http://127.0.0.1:$OE_PORT ;
proxy_pass http://127.0.0.1:$OE_PORT ;
add_header Cache-Control "public, no-transform" ;
add_header Cache-Control "public, no-transform" ;
}
}
# cache some static data in memory for 60mins.
# cache some static data in memory for 60mins.
location ~ /[ a-zA-Z0-9_-] */static/ {
location ~ /[ a-zA-Z0-9_-] */static/ {
proxy_cache_valid 200 302 60m;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_valid 404 1m;
proxy_buffering on;
proxy_buffering on;
expires 864000;
expires 864000;
proxy_pass http://127.0.0.1:$OE_PORT ;
proxy_pass http://127.0.0.1:$OE_PORT ;
}
}
}
}
EOF
EOF
sudo mv ~/odoo /etc/nginx/sites-available/$WEBSITE_NAME
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 ln -s /etc/nginx/sites-available/$WEBSITE_NAME /etc/nginx/sites-enabled/$WEBSITE_NAME
sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-enabled/default
sudo service nginx reload
sudo service nginx reload
sudo su root -c " printf 'proxy_mode = True\n' >> /etc/ ${ OE_CONFIG } .conf "
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 "
echo " Done! The Nginx server is up and running. Configuration can be found at /etc/nginx/sites-available/ $WEBSITE_NAME "
else
else
echo "Nginx isn't installed due to choice of the user!"
echo "Nginx isn't installed due to choice of the user!"
fi
fi
#--------------------------------------------------
#--------------------------------------------------
@ -283,14 +308,14 @@ fi
#--------------------------------------------------
#--------------------------------------------------
if [ $INSTALL_NGINX = "True" ] && [ $ENABLE_SSL = "True" ] && [ $ADMIN_EMAIL != "odoo@example.com" ] && [ $WEBSITE_NAME != "_" ] ; then
if [ $INSTALL_NGINX = "True" ] && [ $ENABLE_SSL = "True" ] && [ $ADMIN_EMAIL != "odoo@example.com" ] && [ $WEBSITE_NAME != "_" ] ; then
sudo apt-get install snapd -y
sudo apt-get install snapd -y
sudo snap install --classic certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx -d $WEBSITE_NAME --noninteractive --agree-tos --email $ADMIN_EMAIL --redirect
sudo certbot --nginx -d $WEBSITE_NAME --noninteractive --agree-tos --email $ADMIN_EMAIL --redirect
sudo service nginx reload
sudo service nginx reload
echo "SSL/HTTPS is enabled!"
echo "SSL/HTTPS is enabled!"
else
else
echo "SSL/HTTPS isn't enabled due to choice of the user or because of a misconfiguration!"
echo "SSL/HTTPS isn't enabled due to choice of the user or because of a misconfiguration!"
fi
fi
echo -e "* Starting Odoo Service"
echo -e "* Starting Odoo Service"