El objetivo que planteo en este caso es una instalación de Odoo 10 en un contenedor Proxmox con ubuntu 16.04 Nginx y certificado LetsEncrypt.
Partimos de la base de que tenemos el servidor en So You Star (ovh). Vamos a ello!!
- En primer lugar vamos de compras, compramos en so you star (ovh) una ip failover que asignaremos al contenedor que crearemos en nuestro servidor dedicado con proxmox instalado, y a la ip le creamos una dirección mac (todo ello en so you star).
- Nos conectamos a proxmox y creamos el contenedor, a continuación pongo imagen (1) de la configuración de la red ya que es lo más dificil, en la puerta de enlace ponemos la ip del servidor proxmox con el último bloque de la ip con valor .254. Es importante asignar bien la ip del contenedor, si es una sola ip la que compramos pondremos /32 al final. No hemos de olvidar indicar también la dirección mac. Dejo una imagen de la parte más difícil que es configurar en proxmox la red del contenedor:
- Una vez creada, entramos por ssh y probamos una dirección externa haciendo un pin, por ejemplo yo hice «ping zonamovil.es» y tuve respusesta del servidor de destino por lo que todo ok, tenemos conexión a internet con el exterior.
- Ahora nos conectamos por consola al contenedor desde el panel de proxmox, nos pedirá la contraseña que hemos puesto al crear el contenedor, una vez hemos entrado vamos a crear el archivo de instalación de odoo, o mejor nos lo bajaremos directamente de internet y lo instalaremos todo de una vez, para ello utilizaremos los siguientes pasos:
Installation procedure Download the script: sudo wget https://raw.githubusercontent.com/Yenthe666/InstallScript/10.0/odoo_install.sh Make the script executable: sudo chmod +x odoo_install.sh Execute the script: sudo ./odoo_install.sh
Una vez instalado todo escribiendo en la barra de dirección de nuestro navegador: http://:8069 veremos que tenemos acceso a odoo. Aunque el objetivo es que funcione con el protocolo https y por tanto que nuestros datos viajen cifrados, vamos a ello …
- El siguiente paso es cifrar el envío y recepción de paquetes en Odoo vamos a ver como añadir certificado de seguridad. Para ello utilizaremos Certbot y Nginx:
Asumimos que tenemos instalado Odoo correctamente Instalamos Nginx: apt-get install nginx Instalamos Certbot apt-get update apt-get install software-properties-common add-apt-repository ppa:certbot/certbot apt-get update apt-get install certbot Obtenemos el certificado Se recomienda detener el servicio de nginx y el dominio.com será el dominio del cual deseas obtener el certificado de seguridad. service nginx stop certbot certonly --standalone -d dominio.com service nginx start Al ejecutar el comando de la linea 2, nos pedirá nuestro correo, el cual debemos de colocar, también nos pedirá que aceptemos los términos y condiciones (Aceptamos) y una pregunta final si nos gustaría compartir nuestro correo con Electronic Frontier Foundation (EFF), el cual aceptamos también. El certificado si lo queremos ver está en la siguiente ruta: cd /etc/letsencrypt/live/dominio.com/
- EL siguiente paso es Configurar Nginx
Creamos el directorio: mkdir /etc/nginx/ssl Ejecutamos el siguiente comando, esto puede demorar un poco. openssl dhparam -out /etc/nginx/ssl/dhp-2048.pem 2048 Creamos el siguiente archivo donde dominio.com es el mombre propiamente dicho te tu dominio nano /etc/nginx/sites-available/dominio.com Agregamos el siguiente contenido, reemplazando dominio.com por su propio dominio upstream odoo { server 127.0.0.1:8069; } server { listen 443 default; server_name dominio.com; access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; ssl on; ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem; keepalive_timeout 60; ssl_ciphers "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/ssl/dhp-2048.pem; proxy_buffers 16 64k; proxy_buffer_size 128k; client_max_body_size 500M; proxy_read_timeout 600; proxy_connect_timeout 600; location / { proxy_pass http://odoo; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; 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 ~* /web/static/ { proxy_cache_valid 200 60m; proxy_buffering on; expires 864000; proxy_pass http://odoo; } } server { listen 80; server_name dominio.com; add_header Strict-Transport-Security max-age=2592000; rewrite ^/.*$ https://$host$request_uri? permanent; } Activamos la nueva configuración de Nginx y reiniciamos el servicio: ln -s /etc/nginx/sites-available/dominio.com /etc/nginx/sites-enabled/dominio.com /etc/init.d/nginx restart Los certificados tienen una duración de 90 días, vamos a crear un cron para que se renueve automáticamente cada lunes a las 2:30 am y reiniciamos nginx a las 2:35 am para que use el nuevo certificado. crontab -e Agregamos lo siguiente: 30 2 * * 1 certbot renew >> /var/log/le-renew.log 35 2 * * 1 /etc/init.d/nginx reload
- Problemas y mejoras partiendo de que todo está funcionando:
Al crear una base de datos nos aparece el siguiente mensaje: Database creation error: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) HINT: Use the same encoding as in the template database, or use template0 as template. La solución es esta: In console run psql: sudo -u postgres psql postgres then in psql console execute sequence of commands: update pg_database set datallowconn = TRUE where datname = 'template0'; \c template0 update pg_database set datistemplate = FALSE where datname = 'template1'; drop database template1; create database template1 with template = template0 encoding = 'UTF8'; update pg_database set datistemplate = TRUE where datname = 'template1'; \c template1 update pg_database set datallowconn = FALSE where datname = 'template0'; (press Ctrl-D to quit from psql)
Acceso al contenedor desde el servidor por WinSCP, para ello ver el siguiente entrada:
Acceder a contenedor (CT) de Proxmox como root por ssh desde conexión remota
Si hemos seguido la instalación sin cambiar nada en el archivo odoo_install.sh comprobaremos que podemos crear y borrar bases de datos a nuestro antojo. Claro esto no es nada seguro y nada profesional. Vamos a cambiar el password para crear y borrar bases de datos, es decir el llamado master password. Vamos al archivo de configuración de odoo en nuestro servidor, si lo hacemos por consola: nano /etc/odoo-server.conf Y lo dejamos como sigue sustituyendo nuevopassword por el nuestro: [options] ; This is the password that allows database operations: admin_passwd = nuevopassword db_host = False db_port = False db_user = odoo db_password = nuevopassword addons_path = /usr/lib/python2.7/dist-packages/odoo/addons [options] logfile = /var/log/odoo/odoo-server.log addons_path=/odoo/odoo-server/addons,/odoo/custom/addons xmlrpc_port = 8069 hacemos un reboot Y ya lo tenemos
Al generar un documento en pdf para imprimirlo posteriormente me sale el siguiente mensaje "Imposible encontrar Wkhtmltopdf en el sistema. El informe será mostrado en HTML.". La herramienta Wkhtmltopdf que sirve para convertir html en un documento pdf ya se instaló junto con odoo en un paso anterior, pero al parecer la versión instalada no es compatible con ubuntu 16.04. En fin, vamos a arreglarlo: Paso 1 Desinstalar wkhtmltox si tienes instalado alguna versión antigua: sudo dpkg -r wkhtmltox sudo rm /usr/bin/wkhtmltopdf sudo rm /usr/bin/wkhtmltoimage Paso2 Descargamos una dependencia: sudo apt-get install xfonts-75dpi Ingresamos a una terminal y descargamos wkhtmltopdf sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz Descomprimimos: sudo tar Jvfx wkhtmltox-0.12.4_linux-generic-amd64.tar.xz Al descomprimir se crea una carpeta wkhtmltox y hacemos lo siguiente: sudo cp wkhtmltox/bin/wkhtmltopdf /usr/local/bin/ sudo cp wkhtmltox/bin/wkhtmltoimage /usr/local/bin/ sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/ sudo cp wkhtmltox/bin/wkhtmltoimage /usr/bin/ Reiniciamos el servicio de Odoo 10 y ya está. service odoo-server restart