diff --git a/odoo_install.sh b/odoo_install.sh index 64310804..dbb07604 100644 --- a/odoo_install.sh +++ b/odoo_install.sh @@ -17,31 +17,44 @@ 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: 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 OE_VERSION="15.0" + # Set this to True if you want to install the Odoo 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" +OE_CONFIG="${OE_USER}" + # Set the 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.) 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="odoo@example.com" + ## ### WKHTMLTOPDF download links ## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links, @@ -50,16 +63,21 @@ ADMIN_EMAIL="odoo@example.com" ## 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.$(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" +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 #-------------------------------------------------- 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 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 add-apt-repository ppa:linuxuprising/libpng12 -y +sudo apt update sudo apt-get upgrade -y #-------------------------------------------------- @@ -84,27 +102,34 @@ echo -e "\n---- Installing nodeJS NPM and rtlcss for LTR support ----" sudo apt-get install nodejs npm -y 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 #-------------------------------------------------- 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 - sudo gdebi --n `basename $_url` - sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin - sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin + 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 + 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!" + 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 @@ -120,7 +145,6 @@ sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/odoo $ if [ $IS_ENTERPRISE = "True" ]; then # Odoo 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" @@ -139,9 +163,6 @@ if [ $IS_ENTERPRISE = "True" ]; then 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 ----" @@ -151,205 +172,135 @@ 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" +if [ ! -e "/etc/$OE_USER/${OE_CONFIG}.conf" ]; then + echo -e "* Create server config file" + sudo mkdir /etc/$OE_USER + sudo chown -R $OE_USER /etc/$OE_USER + sudo touch /etc/$OE_USER/${OE_CONFIG}.conf -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" + echo -e "* Creating server config file" + sudo su root -c "printf '[options] \n; This is the password that allows database operations:\n' >> /etc/$OE_USER/${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 -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 + sudo su root -c "printf 'admin_passwd = ${OE_SUPERADMIN}\n' >> /etc/$OE_USER/${OE_CONFIG}.conf" + if [ $OE_VERSION > "11.0" ];then + sudo su root -c "printf 'http_port = ${OE_PORT}\n' >> /etc/$OE_USER/${OE_CONFIG}.conf" + else + sudo su root -c "printf 'xmlrpc_port = ${OE_PORT}\n' >> /etc/$OE_USER/${OE_CONFIG}.conf" + fi -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/odoo-bin --config=/etc/${OE_CONFIG}.conf' >> $OE_HOME_EXT/start.sh" -sudo chmod 755 $OE_HOME_EXT/start.sh + sudo su root -c "printf 'logfile = /var/log/${OE_USER}/${OE_CONFIG}.log\n' >> /etc/$OE_USER/${OE_CONFIG}.conf" -#-------------------------------------------------- -# Adding ODOO as a deamon (initscript) -#-------------------------------------------------- + if [ $IS_ENTERPRISE = "True" ]; then + sudo su root -c "printf 'addons_path=${OE_HOME}/enterprise/addons,${OE_HOME_EXT}/addons\n' >> /etc/$OE_USER/${OE_CONFIG}.conf" + else + sudo su root -c "printf 'addons_path=${OE_HOME_EXT}/addons,${OE_HOME}/custom/addons\n' >> /etc/$OE_USER/${OE_CONFIG}.conf" + fi -echo -e "* Create init file" -cat < ~/$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=/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: 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 + sudo chown $OE_USER:$OE_USER /etc/$OE_USER/${OE_CONFIG}.conf + sudo chmod 640 /etc/$OE_USER/${OE_CONFIG}.conf -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 +fi -echo -e "* Start ODOO on Startup" -sudo update-rc.d $OE_CONFIG defaults +sudo ln -s $OE_HOME_EXT/odoo-bin /usr/bin/odoo +sudo ln -s $OE_HOME_EXT/debian/odoo.service /etc/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl enable odoo +sudo systemctl start odoo #-------------------------------------------------- # Install Nginx if needed #-------------------------------------------------- if [ $INSTALL_NGINX = "True" ]; then - echo -e "\n---- Installing and setting up Nginx ----" - sudo apt install nginx -y - cat < ~/odoo + echo -e "\n---- Installing and setting up Nginx ----" + sudo apt install nginx -y + cat < ~/odoo server { - listen 80; - - # set proper server name after domain set - server_name $WEBSITE_NAME; - - # Add Headers for odoo 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; - - # odoo 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; - } + listen 80; + + # set proper server name after domain set + server_name $WEBSITE_NAME; + + # Add Headers for odoo 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; + + # odoo 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 ~/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 /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" else - echo "Nginx isn't installed due to choice of the user!" + echo "Nginx isn't installed due to choice of the user!" fi #-------------------------------------------------- @@ -357,17 +308,19 @@ fi #-------------------------------------------------- if [ $INSTALL_NGINX = "True" ] && [ $ENABLE_SSL = "True" ] && [ $ADMIN_EMAIL != "odoo@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!" + sudo apt-get install snapd -y + sudo snap install --classic certbot + sudo ln -s /snap/bin/certbot /usr/bin/certbot + 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!" + echo "SSL/HTTPS isn't enabled due to choice of the user or because of a misconfiguration!" fi echo -e "* Starting Odoo Service" -sudo su root -c "/etc/init.d/$OE_CONFIG start" +sudo service odoo restart + echo "-----------------------------------------------------------" echo "Done! The Odoo server is up and running. Specifications:" echo "Port: $OE_PORT"