Last active
January 10, 2022 13:33
-
-
Save tejastank/664c0d32e6631e5749183ec5d32d4b59 to your computer and use it in GitHub Desktop.
odoo 15 install script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
################################################################################ | |
# Script for installing odoo15 on Ubuntu 16.04, 18.04 and 20.04 (could be used for other version too) | |
# Author: Yenthe Van Ginneken | |
#------------------------------------------------------------------------------- | |
# This script will install odoo15 on your Ubuntu 16.04 server. It can install multiple odoo15 instances | |
# in one Ubuntu because of the different xmlrpc_ports | |
#------------------------------------------------------------------------------- | |
# Make a new file: | |
# sudo nano odoo15-install.sh | |
# Place this content in it and then make the file executable: | |
# sudo chmod +x odoo15-install.sh | |
# Execute the script to install odoo15: | |
# ./odoo15-install | |
################################################################################ | |
OE_USER="odoo15" | |
OE_HOME="/$OE_USER" | |
OE_HOME_EXT="/$OE_USER/${OE_USER}-server" | |
# The default port where this odoo15 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. | |
INSTALL_WKHTMLTOPDF="True" | |
# Set the default odoo15 port (you still have to use -c /etc/odoo15-server.conf for example to use this.) | |
OE_PORT="8069" | |
# Choose the odoo15 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 odoo15 13.0 | |
OE_VERSION="15.0" | |
# Set this to True if you want to install the odoo15 enterprise version! | |
IS_ENTERPRISE="False" | |
# Set this to True if you want to install Nginx! | |
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 | |
OE_SUPERADMIN="admin" | |
# Set to "True" to generate a random password, "False" to use the variable in OE_SUPERADMIN | |
GENERATE_RANDOM_PASSWORD="True" | |
OE_CONFIG="${OE_USER}-server" | |
# Set the website name | |
WEBSITE_NAME="_" | |
# Set the default odoo15 longpolling port (you still have to use -c /etc/odoo15-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="True" | |
# Provide Email to register ssl certificate | |
ADMIN_EMAIL="odoo15@example.com" | |
## | |
### WKHTMLTOPDF download links | |
## === 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/odoo15/odoo15/wiki/Wkhtmltopdf ): | |
## https://www.odoo.com/documentation/13.0/setup/install.html#debian-ubuntu | |
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_amd64.deb | |
WKHTMLTOX_X32=https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_i386.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 | |
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main" | |
sudo apt-get update | |
sudo apt-get upgrade -y | |
#-------------------------------------------------- | |
# Install PostgreSQL Server | |
#-------------------------------------------------- | |
echo -e "\n---- Install PostgreSQL Server ----" | |
sudo apt-get install postgresql postgresql-server-dev-all -y | |
echo -e "\n---- Creating the odoo15 PostgreSQL User ----" | |
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 git python3 python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng12-0 libjpeg-dev gdebi -y | |
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 npm install -g rtlcss | |
#-------------------------------------------------- | |
# Install Wkhtmltopdf if needed | |
#-------------------------------------------------- | |
if [ $INSTALL_WKHTMLTOPDF = "True" ]; then | |
echo -e "\n---- Install wkhtml and place shortcuts on correct place for odoo15 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 | |
sudo gdebi --n `basename $_url` | |
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!" | |
fi | |
echo -e "\n---- Create odoo15 system user ----" | |
sudo adduser --system --quiet --shell=/bin/bash --home=$OE_HOME --gecos 'odoo15' --group $OE_USER | |
#The user should also be added to the sudo'ers group. | |
sudo adduser $OE_USER sudo | |
echo -e "\n---- Create Log directory ----" | |
sudo mkdir /var/log/$OE_USER | |
sudo chown $OE_USER:$OE_USER /var/log/$OE_USER | |
#-------------------------------------------------- | |
# Install odoo15 | |
#-------------------------------------------------- | |
echo -e "\n==== Installing odoo15 Server ====" | |
sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/odoo $OE_HOME_EXT/ | |
if [ $IS_ENTERPRISE = "True" ]; then | |
# odoo15 Enterprise install! | |
sudo pip3 install psycopg2-binary pdfminer.six | |
echo -e "\n--- Create symlink for 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/addons" | |
GITHUB_RESPONSE=$(sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo15/enterprise "$OE_HOME/enterprise/addons" 2>&1) | |
while [[ $GITHUB_RESPONSE == *"Authentication"* ]]; do | |
echo "------------------------WARNING------------------------------" | |
echo "Your authentication with Github has failed! Please try again." | |
printf "In order to clone and install the odoo enterprise version you \nneed to be an offical odoo15 partner and you need access to\nhttp://github.com/odoo/enterprise.\n" | |
echo "TIP: Press ctrl+c to stop this script." | |
echo "-------------------------------------------------------------" | |
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 | |
sudo npm install -g less | |
sudo npm install -g less-plugin-clean-css | |
fi | |
echo -e "\n---- Create custom module directory ----" | |
sudo su $OE_USER -c "mkdir $OE_HOME/custom" | |
sudo su $OE_USER -c "mkdir $OE_HOME/custom/addons" | |
echo -e "\n---- Setting permissions on home folder ----" | |
sudo chown -R $OE_USER:$OE_USER $OE_HOME/* | |
echo -e "* Create server config file" | |
sudo touch /etc/${OE_CONFIG}.conf | |
echo -e "* Creating server config file" | |
sudo su root -c "printf '[options] \n; This is the password that allows database operations:\n' >> /etc/${OE_CONFIG}.conf" | |
if [ $GENERATE_RANDOM_PASSWORD = "True" ]; then | |
echo -e "* Generating random admin password" | |
OE_SUPERADMIN=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1) | |
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" | |
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 | |
echo -e "* Create startup file" | |
sudo su root -c "echo '#!/bin/sh' >> $OE_HOME_EXT/start.sh" | |
sudo su root -c "echo 'sudo -u $OE_USER $OE_HOME_EXT/odoo15-bin --config=/etc/${OE_CONFIG}.conf' >> $OE_HOME_EXT/start.sh" | |
sudo chmod 755 $OE_HOME_EXT/start.sh | |
#-------------------------------------------------- | |
# Adding odoo15 as a deamon (initscript) | |
#-------------------------------------------------- | |
echo -e "* Create init file" | |
cat <<EOF > ~/$OE_CONFIG | |
#!/bin/sh | |
### BEGIN INIT INFO | |
# Provides: $OE_CONFIG | |
# Required-Start: \$remote_fs \$syslog | |
# Required-Stop: \$remote_fs \$syslog | |
# Should-Start: \$network | |
# Should-Stop: \$network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Enterprise Business Applications | |
# Description: odoo15 Business Applications | |
### END INIT INFO | |
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin | |
DAEMON=$OE_HOME_EXT/odoo-bin | |
NAME=$OE_CONFIG | |
DESC=$OE_CONFIG | |
# Specify the user name (Default: odoo15). | |
USER=$OE_USER | |
# Specify an alternate config file (Default: /etc/openerp-server.conf). | |
CONFIGFILE="/etc/${OE_CONFIG}.conf" | |
# pidfile | |
PIDFILE=/var/run/\${NAME}.pid | |
# Additional options that are passed to the Daemon. | |
DAEMON_OPTS="-c \$CONFIGFILE" | |
[ -x \$DAEMON ] || exit 0 | |
[ -f \$CONFIGFILE ] || exit 0 | |
checkpid() { | |
[ -f \$PIDFILE ] || return 1 | |
pid=\`cat \$PIDFILE\` | |
[ -d /proc/\$pid ] && return 0 | |
return 1 | |
} | |
case "\${1}" in | |
start) | |
echo -n "Starting \${DESC}: " | |
start-stop-daemon --start --quiet --pidfile \$PIDFILE \ | |
--chuid \$USER --background --make-pidfile \ | |
--exec \$DAEMON -- \$DAEMON_OPTS | |
echo "\${NAME}." | |
;; | |
stop) | |
echo -n "Stopping \${DESC}: " | |
start-stop-daemon --stop --quiet --pidfile \$PIDFILE \ | |
--oknodo | |
echo "\${NAME}." | |
;; | |
restart|force-reload) | |
echo -n "Restarting \${DESC}: " | |
start-stop-daemon --stop --quiet --pidfile \$PIDFILE \ | |
--oknodo | |
sleep 1 | |
start-stop-daemon --start --quiet --pidfile \$PIDFILE \ | |
--chuid \$USER --background --make-pidfile \ | |
--exec \$DAEMON -- \$DAEMON_OPTS | |
echo "\${NAME}." | |
;; | |
*) | |
N=/etc/init.d/\$NAME | |
echo "Usage: \$NAME {start|stop|restart|force-reload}" >&2 | |
exit 1 | |
;; | |
esac | |
exit 0 | |
EOF | |
echo -e "* Security Init File" | |
sudo mv ~/$OE_CONFIG /etc/init.d/$OE_CONFIG | |
sudo chmod 755 /etc/init.d/$OE_CONFIG | |
sudo chown root: /etc/init.d/$OE_CONFIG | |
echo -e "* Start odoo15 on Startup" | |
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 > ~/odoo15 | |
server { | |
listen 80; | |
# set proper server name after domain set | |
server_name $WEBSITE_NAME; | |
# Add Headers for odoo15 proxy mode | |
proxy_set_header X-Forwarded-Host \$host; | |
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; | |
proxy_set_header X-Forwarded-Proto \$scheme; | |
proxy_set_header X-Real-IP \$remote_addr; | |
add_header X-Frame-Options "SAMEORIGIN"; | |
add_header X-XSS-Protection "1; mode=block"; | |
proxy_set_header X-Client-IP \$remote_addr; | |
proxy_set_header HTTP_X_FORWARDED_HOST \$remote_addr; | |
# odoo15 log files | |
access_log /var/log/nginx/$OE_USER-access.log; | |
error_log /var/log/nginx/$OE_USER-error.log; | |
# increase proxy buffer size | |
proxy_buffers 16 64k; | |
proxy_buffer_size 128k; | |
proxy_read_timeout 900s; | |
proxy_connect_timeout 900s; | |
proxy_send_timeout 900s; | |
# force timeouts if the backend dies | |
proxy_next_upstream error timeout invalid_header http_500 http_502 | |
http_503; | |
types { | |
text/less less; | |
text/scss scss; | |
} | |
# enable data compression | |
gzip on; | |
gzip_min_length 1100; | |
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_vary on; | |
client_header_buffer_size 4k; | |
large_client_header_buffers 4 64k; | |
client_max_body_size 0; | |
location / { | |
proxy_pass http://127.0.0.1:$OE_PORT; | |
# by default, do not forward anything | |
proxy_redirect off; | |
} | |
location /longpolling { | |
proxy_pass http://127.0.0.1:$LONGPOLLING_PORT; | |
} | |
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"; | |
} | |
# 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; | |
} | |
} | |
EOF | |
sudo mv ~/odoo15 /etc/nginx/sites-available/ | |
sudo ln -s /etc/nginx/sites-available/odoo15 /etc/nginx/sites-enabled/odoo15 | |
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/odoo15" | |
else | |
echo "Nginx isn't installed due to choice of the user!" | |
fi | |
#-------------------------------------------------- | |
# Enable ssl with certbot | |
#-------------------------------------------------- | |
if [ $INSTALL_NGINX = "True" ] && [ $ENABLE_SSL = "True" ] && [ $ADMIN_EMAIL != "odoo15@example.com" ] && [ $WEBSITE_NAME != "_" ];then | |
sudo add-apt-repository ppa:certbot/certbot -y && sudo apt-get update -y | |
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!" | |
else | |
echo "SSL/HTTPS isn't enabled due to choice of the user or because of a misconfiguration!" | |
fi | |
echo -e "* Starting odoo15 Service" | |
sudo su root -c "/etc/init.d/$OE_CONFIG start" | |
echo "-----------------------------------------------------------" | |
echo "Done! The odoo15 server is up and running. Specifications:" | |
echo "Port: $OE_PORT" | |
echo "User service: $OE_USER" | |
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 "Password superadmin (database): $OE_SUPERADMIN" | |
echo "Start odoo15 service: sudo service $OE_CONFIG start" | |
echo "Stop odoo15 service: sudo service $OE_CONFIG stop" | |
echo "Restart odoo15 service: sudo service $OE_CONFIG restart" | |
if [ $INSTALL_NGINX = "True" ]; then | |
echo "Nginx configuration file: /etc/nginx/sites-available/odoo15" | |
fi | |
echo "-----------------------------------------------------------" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment