# Step 1 - Add the Odoo repository

```
yum install -y epel-release
yum-config-manager --add-repo=https://nightly.odoo.com/10.0/nightly/rpm/odoo.repo
yum update && yum install odoo

```

enable odoo services
```
systemctl enable odoo
systemctl start odoo
```

If you are running a firewall, run the following commands to allow HTTP and HTTPS traffic:

```
sudo firewall-cmd --permanent --zone=public --add-service=http 
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
```

enable SE linux for nginx localhost access later

```
setsebool -P httpd_can_network_connect 1
```


# Step 2 - Configure a Linux user for Odoo

```
sudo adduser --system --home=/opt/odoo --group odoo
mkdir -p /var/lib/odoo
```

# Step 3 - Install and Configure PostgreSQL

```
yum install postgresql-server fontconfig libpng libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi wkhtmltopdf yum-utils
postgresql-setup initdb
su - postgres
createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo
```


Enable PostgreSQL to start on boot and start the service using:

```
systemctl enable postgresql
systemctl start postgresql
```

# Step 4 - Install dependencies needed

```
sudo apt-get install python-cups python-dateutil python-decorator python-docutils python-feedparser \
python-gdata python-geoip python-gevent python-imaging python-jinja2 python-ldap python-libxslt1 \
python-lxml python-mako python-mock python-openid python-passlib python-psutil python-psycopg2 \
python-pybabel python-pychart python-pydot python-pyparsing python-pypdf python-reportlab python-requests \
python-simplejson python-tz python-unicodecsv python-unittest2 python-vatnumber python-vobject \
python-werkzeug python-xlwt python-yaml wkhtmltopdf
```


# Step 5 - Install Odoo

```
sudo apt-get install odoo
netstat -plntu
```
Make sure odoo instance is running on port 8069. 

Check from URL http://odoo.mysite.co:8069. 
Make sure that firewall is not blocking that port.

```
vim /etc/odoo/openerp-server.conf
```

Edit file content to:

```
xmlrpc_interface = 127.0.0.1
xmlrpc_port = 8069
```


# Step 6 - Install and Configure Nginx

If you have apache installed, let’s uninstall or disable it then install nginx to proceed

```
systemctl disable httpd
systemctl stop httpd
yum install nginx
```

Edit file content /etc/nginx/conf.d/yoursite.com.conf

```
##Odoo Backend##

upstream odooerp {
    server 127.0.0.1:8069;
    #server ip2:8069;
    #server ip3:8069;
}
upstream odooerp-im {
    server 127.0.0.1:8072 weight=1 fail_timeout=0;
    #server ip2:8072 weight=1 fail_timeout=0;
    #server ip3:8072 weight=1 fail_timeout=0;
}

##https site##
server {
    listen      443 default_server;
    server_name odoo.mysite.co;
    root        /usr/share/nginx/html;
    index       index.html index.htm;

    # log files
    access_log  /var/log/nginx/odoo.access.log;
    error_log   /var/log/nginx/odoo.error.log;

    # ssl files
    ssl on;
    ssl_ciphers                 ALL:!ADH:!MD5:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    ssl_certificate             /etc/nginx/ssl/odoo.crt;
    ssl_certificate_key         /etc/nginx/ssl/odoo.key;

    # proxy buffers
    proxy_buffers 16 64k;
    proxy_buffer_size 128k;

    # timeouts
    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;
    
    ## odoo proxypass with https ##
    location / {
        proxy_pass  http://odooerp;
        # force timeouts if the backend dies
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;

        # set headers
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
    }
    
    location /longpolling/ {
        proxy_pass  http://odooerp-im;
        
        # force timeouts if the backend dies
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        
        # set headers
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
    }    


    # cache some static data in memory for 60mins
    location ~* /web/static/ {
        proxy_cache_valid 200 60m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odooerp;
    }
    # gzip    
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
    
}

##http redirects to https ##
server {
    listen      80;
    server_name odoo.mysite.co;

    # Strict Transport Security
    add_header Strict-Transport-Security max-age=2592000;
    rewrite ^/.*$ https://$host$request_uri? permanent;
}
```

Change odoo.mysite.co to your actual domain name.

Create SSL folder:

```
mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
```

Generate SSL Key:

```
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/odoo.key -out /etc/nginx/ssl/odoo.crt
chmod 600 odoo.key
```

Enable Odoo config on nginx:

```
ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
nginx -t
systemctl restart nginx
```

# Step 7 - Configure Odoo

Goto http://odoo.mysite.co

Manage database from user interface


# Step 8 - Install SSL Certificate

```
yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
sudo yum install certbot python2-certbot-nginx


sudo certbot --nginx

```

# Step 9 - To Renew the Certificate

```
sudo certbot --nginx certonly
```

Done!
You can start Odoo from http://odoo.mysite.co and Nginx will automatically redirect to HTTPS port 443 with the valid SSL certificate!


# Optional Step: For unsupported Operating System

```
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

sudo ./path/to/certbot-auto --nginx
```

To renew

```
$ sudo ./path/to/certbot-auto --nginx certonly
```


Automatic renew by CRON job

```
echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
```

# Need More Info?

Need Odoo customization, implementation, training, tuning performance service ?
Contact us: vitraining.com