Odoo installeren binnen Docker
Docker wordt steeds meer gebruikt voor ontwikkeling en uitrollen van applicaties, verpakt in een Docker container. In dit artikel wordt uitgelegd hoe je Odoo en Postgres kunt installeren met Docker in combinatie met een NGINX proxy en virtual hosts op een shared IP adres. Meer over Odoo en Docker vind je op de dockerhub.
Ubuntu Server
Voor Docker hebben we een linux server nodig, dit kan basis Ubuntu 16.04 Server zijn (64 bits).
Installeer Docker:
sudo wget -qO- https://get.docker.com/ | sh
Docker containers aanmaken
sudo docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=whatever --name db-odoo1 postgres:9.4
sudo mkdir /opt/odoo1 sudo cd /opt/odoo1 sudo mkdir config addons
sudo vim /opt/odoo1/config/openerp-server.conf
Custom addons plaats je onder /opt/odoo1/addons. Ga je meerdere Odoo docker containers gebruiken? Gebruik dan bijvoorbeeld /opt/odoo2 etc...
sudo docker run -e VIRTUAL_HOST=domein.nl,www.domein.nl -e VIRTUAL_PORT=8069 -v /opt/odoo1/config:/etc/odoo -v /opt/odoo1/addons:/mnt/extra-addons --name odoo1 --link db-odoo1:db -t odoo
Om binnen een docker container een shell op te roepen:
docker exec -it --user root odoo1 bash
NGINX Proxy
Als laatste zetten we de NGINX proxy container op. Hiervoor wordt jwilders/nginx-proxy gebruikt. Normaliter is er geen custom nginx configuratie nodig, maar bij het restoren van een Odoo backup via /web/database/manager krijgen we een 431 error omdat de standaard uploadsize 2MB is binnen NGINX. SSL certificaten kunnen ook gebruikt worden overigens.Voor NGINX maken we een config en certs directory aan:
sudo mkdir /opt/nginx sudo cd /opt/nginx sudo mkdir certs conf
Maak een nginx config bestand aan en uploadsize=500M (dit kun je zelf aanpassen naar wens):
sudo vim /opt/nginx/conf/proxy.conf client_max_body_size 500m;
Nu maken we de NGINX container aan en laten deze luisteren op poort 80 (http) voor de buitenwereld.
docker run -d -p 80:80 -p 443:443 --name nginx-proxy -v /opt/nginx/certs:/etc/nginx/certs -v /etc/nginx/vhost.d -v /usr/share/nginx/html -v /opt/nginx/conf/proxy.conf:/etc/nginx/conf.d/my_proxy.conf:ro -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy sudo docker run -d --name letsencrypt-nginx -v /opt/nginx/certs:/etc/nginx/certs:rw --volumes-from nginx-proxy -v /var/run/docker.sock:/var/run/docker.sock:ro jrcs/letsencrypt-nginx-proxy-companion
Nu kunnen we de Odoo omgeving bereiken via http://www.domein.nl. Om SSL (https) te gebruiken, plaats de www.domein.nl.key en www.domein.nl.crt onder /opt/nginx/certs.
Om Let's Encrypt SSL certificaten te gebruiken:
sudo docker run -e VIRTUAL_HOST=domein.nl,www.domein.nl -e "LETSENCRYPT_HOST=domein.nl,www.domein.nl" -e "LETSENCRYPT_EMAIL=info@domein.nl" -e VIRTUAL_PORT=8069 -v /opt/odoo1/config:/etc/odoo -v /opt/odoo1/addons:/mnt/extra-addons --name odoo1 --link db-odoo1:db -t odoo
Om een tweede Odoo omgeving te gebruiken via een andere hostnaam, bijvoorbeeld http://erp.bedrijf.nl, maak een 2e postgres en odoo container aan:
sudo docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=whatever --name db-odoo2 postgres:9.4 sudo docker run -e VIRTUAL_HOST=erp.bedrijf.nl -e VIRTUAL_PORT=8069 -v /opt/odoo2/config:/etc/odoo -v /opt/odoo2/addons:/mnt/extra-addons --name odoo2 --link db-odoo2:db -t odoo
Firewall
Op de Ubuntu server kunnen we UFW gebruiken voor firewalling. We willen alleen ssh, http en https openzetten voor de buitenwereld:
sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable