Skip to content

Instantly share code, notes, and snippets.

@tomnk
Last active November 15, 2018 14:32
Show Gist options
  • Save tomnk/e3a6e30a3217adb1cb52910113032c68 to your computer and use it in GitHub Desktop.
Save tomnk/e3a6e30a3217adb1cb52910113032c68 to your computer and use it in GitHub Desktop.
102120254: Odoo setup, wkhtmltopdf,
#!/bin/bash
################################################################################
# Script for installing Odoo on Ubuntu 14.04, 15.04, 16.04 and 18.04 (could be used for other version too)
# Author: Yenthe Van Ginneken
#-------------------------------------------------------------------------------
# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances
# in one Ubuntu because of the different xmlrpc_ports
#-------------------------------------------------------------------------------
# Make a new file:
# sudo nano odoo-install.sh
# Place this content in it and then make the file executable:
# sudo chmod +x odoo-install.sh
# Execute the script to install Odoo:
# ./odoo-install
################################################################################
OE_USER="odoo"
OE_HOME="/$OE_USER"
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)
# 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 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: 12.0, 11.0, 10.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 12.0
OE_VERSION="12.0"
# Set this to True if you want to install the Odoo enterprise version!
IS_ENTERPRISE="False"
# set the superadmin password
OE_SUPERADMIN="admin"
OE_CONFIG="${OE_USER}-server"
##
### WKHTMLTOPDF download links
## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links,
## in order to have correct version of wkhtmltox installed, for a danger note refer to
## https://www.odoo.com/documentation/8.0/setup/install.html#deb ):
WKHTMLTOX_X64=https://downloads.wkhtmltopdf.org/0.12/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb
WKHTMLTOX_X32=https://downloads.wkhtmltopdf.org/0.12/0.12.1/wkhtmltox-0.12.1_linux-trusty-i386.deb
#--------------------------------------------------
# Update Server
#--------------------------------------------------
echo -e "\n---- Update Server ----"
# universe package is for Ubuntu 18.x
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get upgrade -y
#--------------------------------------------------
# Install PostgreSQL Server
#--------------------------------------------------
echo -e "\n---- Install PostgreSQL Server ----"
sudo apt-get install postgresql -y
echo -e "\n---- Creating the ODOO 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 python3 python3-pip -y
echo -e "\n---- Install tool packages ----"
sudo apt-get install wget git bzr python-pip gdebi-core -y
echo -e "\n---- Install python packages ----"
sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev -y
sudo apt-get install libsasl2-dev libldap2-dev libssl-dev -y
sudo apt-get install python-pypdf2 python-dateutil python-feedparser python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-docutils python-psutil python-mock python-unittest2 python-jinja2 python-pypdf python-decorator python-requests python-passlib python-pil -y
sudo pip3 install pypdf2 Babel passlib Werkzeug decorator python-dateutil pyyaml psycopg2 psutil html2text docutils lxml pillow reportlab ninja2 requests gdata XlsxWriter vobject python-openid pyparsing pydot mock mako Jinja2 ebaysdk feedparser xlwt psycogreen suds-jurko pytz pyusb greenlet xlrd chardet libsass
echo -e "\n---- Install python libraries ----"
# This is for compatibility with Ubuntu 16.04. Will work on 14.04, 15.04 and 16.04
sudo apt-get install python3-suds
echo -e "\n--- Install other required packages"
sudo apt-get install node-clean-css -y
sudo apt-get install node-less -y
sudo apt-get install python-gevent -y
#--------------------------------------------------
# Install Wkhtmltopdf if needed
#--------------------------------------------------
if [ $INSTALL_WKHTMLTOPDF = "True" ]; then
echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 12 ----"
#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 ODOO system 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.
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 ODOO
#--------------------------------------------------
echo -e "\n==== Installing ODOO Server ===="
sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/odoo $OE_HOME_EXT/
if [ $IS_ENTERPRISE = "True" ]; then
# Odoo Enterprise install!
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/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."
printf "In order to clone and install the Odoo enterprise version you \nneed to be an offical Odoo 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 pip3 install num2words ofxparse
sudo apt-get install nodejs npm
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"
sudo su root -c "printf 'admin_passwd = ${OE_SUPERADMIN}\n' >> /etc/${OE_CONFIG}.conf"
sudo su root -c "printf 'xmlrpc_port = ${OE_PORT}\n' >> /etc/${OE_CONFIG}.conf"
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/openerp-server --config=/etc/${OE_CONFIG}.conf' >> $OE_HOME_EXT/start.sh"
sudo chmod 755 $OE_HOME_EXT/start.sh
#--------------------------------------------------
# Adding ODOO 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: ODOO Business Applications
### END INIT INFO
PATH=/bin:/sbin:/usr/bin
DAEMON=$OE_HOME_EXT/odoo-bin
NAME=$OE_CONFIG
DESC=$OE_CONFIG
# Specify the user name (Default: odoo).
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 ODOO on Startup"
sudo update-rc.d $OE_CONFIG defaults
echo -e "* Starting Odoo Service"
sudo su root -c "/etc/init.d/$OE_CONFIG start"
echo "-----------------------------------------------------------"
echo "Done! The Odoo server is up and running. Specifications:"
echo "Port: $OE_PORT"
echo "User service: $OE_USER"
echo "User PostgreSQL: $OE_USER"
echo "Code location: $OE_USER"
echo "Addons folder: $OE_USER/$OE_CONFIG/addons/"
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"
echo "-----------------------------------------------------------"
sudo wget https://builds.wkhtmltopdf.org/0.12.1.3/wkhtmltox_0.12.1.3-1~bionic_amd64.deb
sudo dpkg -i wkhtmltox_0.12.1.3-1~bionic_amd64.deb
sudo apt-get install -f
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
1 - download odoo 10 source code and dezip at C:\

      https://nightly.odoo.com/10.0/nightly/src/odoo_10.0rc1c.latest.zip

2 - download and install Pycharm

3 - Download Python 2.7

    https://www.python.org/downloads/windows/

4 - Install it and in installation add this option " Add Python.exe to Path - will be installed on local hard drive"

5 - Download and install PostGreSQL create Login Role : odoo --- Username : odoo ---- Password : odoo

    http://www.enterprisedb.com/products-services-training/pgdownload

6 - We must set now requierments.txt all programmes odoo need for work

     6.1 - Download and install http://www.stickpeople.com/projects/python/win-psycopg/

     6.2 - Go to your odoo source file and edit file requierements.txt

             6.2.1 - remove with version psycopg2 as your already have it.

             6.2.2 - remove with version the optional python-ldap, gevent, psutil.

             6.2.3 - Add pypiwin32. And save file requierements.txt.

     6.3 - Using followin command from a cmd.exe prompt replace \yourodoo by actual path where you unzip Odoo10 source code.

     C:\> cd \yourOdoo

     C:\yourodoo> C:\Python27\Scripts\pip.exe install -r requirements.txt

     6.4 - Download and install NodeJs and reboot computer.

              http://nodejs.org/download/

     6.5 - Install less with cmd.exe

              C:\> npm install -g less

Now Odoo10 is ready to be run in Odoo 10 we must run odoo-bin.

7 - run Pycharm Open Project select your Odoo Source Code Directory

8 - in Pycharm go Run - Edit Configuration. click on + choose Python

9 - Fill Configuration like this.

         - Name : Odoo

         - Check "Single instance only"

         - Script : go to your odoo source code and choose file odoo-bin

         - Script parameters : -w username -r password --addons-path=addons

            (for me -w odoo -r odoo --addons-path=addons) because when i am created a role on postgreSQL my username = odoo and password = odoo.

10 - Press Ok and Run - Odoo

11 - open your browser and tip : localhost:8069 odoo will start and you can debug it now with Pycharm.

Odoo easier than ever with docker

I’ve never used docker before. I couldn’t have time to test it, it seemed pretty huge. The good news is, it is so easy!

Installing Odoo was always a headache for me, it requires many specific libraries and specific postgres version.

The Environment

Since the whole story is about testing for me, i like keeping things local. So i used VirtualBox on my Windows 10 machine with 8Gb of momory. As for the OS, i used Ubuntu Server 15.04 (i can only handle ubuntu servers!).

Docker

After typically installing ubuntu server on the virtual machine, i headed to google to seek the best way to install docker. I followed the these two dead simple steps on this page.

  • install curl
sudo apt-get install curl
  • use it to download the docker install script and run it
curl -sSL https://get.docker.com/ | sh

Everything went great! I looked at google again on how to deploy odoo as a docker app, so i went to the Docker Hub’s odoo page and used the “Docker Pull Command”

sudo docker pull odoo

Mind the sudo there, the way docker is installed now can only be ran by an administrator. But odoo needs postgres, so the idea was clear, i headed to Docker Hub — Postgres, and the command was obviously:

sudo docker pull postgres

Back to the odoo deployment instructions on Docker Hub, i ran the command as is:

docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo — name db postgres
docker run -p 0.0.0.0:8069:8069 — name odoo — link db:db -t odoo

Guess what, it damn worked! i never thought it would be this easy to deploy with docker. Now i understand why other developer just love docker! (i do now, obviously).

I wanted to go further and see if i can run multiple instances of odoo on the same environment (server and database). I need this for a client project at Digitika and never made it to make a deployment script that just works. Docker seemed a light bulb over my head. With some more readings in odoo documentations and docker documentations, i found a way to do so.

The first command we ran made a postgres server instance running on the server. We have the db part ready, we need to execute the same odoo code base many times and use many databases from the database server. This is achevable through 2 concepts

  • db-filter config, which tells odoo to look for a specific database (given as regex) to work on
  • docker way of running the same container many times

So what we need is to add the following to the second command above

— — db-filter=the_name_of_the_database_.*

For example, to run 3 instances of odoo, every instance having its own database, data and modules, all we need is to run

docker run -p 0.0.0.0:8070:8069 — name odoo1 — link db:db -t odoo — — db-filter=odoo_1_.*
docker run -p 0.0.0.0:8071:8069 — name odoo2 — link db:db -t odoo — — db-filter=odoo_2_.*
docker run -p 0.0.0.0:8072:8069 — name odoo3 — link db:db -t odoo — — db-filter=odoo_3_.*

That’s it! head to the browser and white down the address of your server followed by one of the ports of the instances, and it automagically works!

I’ve never been happier, i like to automate things and do it faster. I didn’t think docker would be that fast. Now i’m thinking to containerize all my php, node.js and python projects with docker!

First, download and install wkhtmltopdf for your version of windows (32 bit or 64 bit).
Once it's installed, go to Openerp/odoo and go to Settings> Users and click on your user
Click edit and scroll down and look for "Technical Features" is enabled / checked.
Click Apply, then log out of Odoo and then login
Go to Settings again and now you should see several new technical menu items on the left
Go to Settings -> Customization -> Parameters -> System Parameters
Click Add and for Key insert : webkit_path
For value insert: C:\Progra~1\wkhtmltopdf\bin\wkhtmltopdf.exe
Apply and exit and restart Windows.
After you do the above steps, go to System in Control Panel.
Click on Advanced Settings. The System Properties window will pop up.
In the "Advanced" Tab, Click on "Environment Variables".
In the "System variables", scroll down until you find the "Path" variable and double click. !!!!!NOT user variables
inside the "Variable value" field, add this to the end: ;C:\Program Files\wkhtmltopdf\bin
Click OK and then reboot your system.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment