D'après le chapitre 14 du livre Odoo 12 Development Essentials.
Avoir un VPS disposant d'une installation fonctionnelle d'Odoo
Modifier les valeurs suivantes dans le fichier /etc/odoo/odoo.conf :
admin_passwd = False | Désactive l'accès au database management |
db_name = dbname | Nom de la DB à utiliser |
dbfilter = ^dbname$ | Ne rendre disponible que cette DB et pas les autres |
http_interface = 127.0.0.1 | Écoute uniquement les requêtes locales, lorsque derrière un reverse proxy |
list_db = False | Désactive la sélection de la base de données à utiliser |
proxy_mode = True | Pour l'accès à Odoo derrière un reverse proxy |
without_demo = all | Désactive l'ajout de données de démo |
workers = 6 | Si 2 ou plus, active le mode multiprocessing |
De plus il est recommandé de modifier les droits d'accès au fichier de configuration, afin que le process Odoo puisse le lire mais pas le modifier.
sudo chown -R odoo:root /etc/odoo sudo chmod u=r,g=rw,o=r /etc/odoo/odoo.conf
Puis redémarrer le service Odoo :
sudo systemctl restart odoo.service
Vérifier qu'il n'y ait pas déjà un serveur qui écoute sur le port 80. La commande ci-dessous doit renvoyer une erreur :
curl http://localhost
Installer nginx
sudo apt install nginx sudo service nginx start
Vérifier qu'il fonctionne. La commande suivante affiche une page Welcome to nginx :
curl http://localhost
Désactiver la configuration par défaut :
sudo rm /etc/nginx/sites-enabled/default
Ajouter une configuration pour Odoo :
sudo touch /etc/nginx/sites-available/odoo
Activer la nouvelle configuration :
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
Éditer le fichier /etc/nginx/sites-available/odoo :
upstream odoo { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } server { listen 80; # 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; # Log access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; # Redirect longpoll requests to Odoo longpolling port location /longpolling { proxy_pass http://odoochat; } # Redirect requests to Odoo backend server location / { proxy_redirect off; proxy_pass http://odoo; } # common gzip gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript; gzip on; }
Tester si la configuration est correcte :
sudo nginx -t
Si tout est OK, recharger Nginx :
sudo systemctl reload nginx.service
Confirmer que Nginx redirige bien le trafic vers Odoo :
curl http://localhost
⇒ Doit afficher la page d'Odoo :
<html><head><script>window.location = '/web' + location.hash;</script></head></html>
Télécharger Certbot dans le dossier /opt et l'exécuter une première fois, accepter l'installation des dépendances mais ne pas faire l'étape de création.
À faire en root |
---|
sudo su - cd /opt wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto ./certbot-auto
Lorsqu'il demande l'adresse email, entrer 'c' pour annuler.
À faire en root |
---|
sudo su - cd /opt ./certbot-auto certonly --domain odoo.marclebrun.be --email mon@email.com
Répondre aux questions posées :
Si l'adresse spécifiée n'a pas encore été vérifiée, un email lui sera envoyé, il faut y répondre pour qu'elle soit vérifiée et souscrire à la newsletter de l'Electronic Frontier Foundation.
Voir également cette page : https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/
Modifier la section server
de la configuration du site :
server { listen 80; rewrite ^(.*) https://$host$1 permanent; }
Et ajouter une seconde section :
server { listen 443; # 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; # SSL parameters ssl on; ssl_certificate /etc/letsencrypt/live/odoo.marclebrun.be/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/odoo.marclebrun.be/privkey.pem; ssl_session_timeout 30m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"; ssl_prefer_server_ciphers on; # Log access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; # Redirect longpoll requests to Odoo longpolling port location /longpolling { proxy_pass http://odoochat; } # Redirect requests to Odoo backend server location / { proxy_redirect off; proxy_pass http://odoo; } # common gzip gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript; gzip on; }
Modifier les chemins vers fullchain.pem et privkey.pem en fonction de votre configuration.
Puis recharger Nginx :
sudo systemctl reload nginx
Exécuter la commande de renouvellement du certificat, puis recharger Nginx.
À faire en root |
---|
sudo su - cd /opt ./certbot-auto renew
sudo systemctl restart nginx