This question has been flagged

Hi Guys,

I hope someone can help.

I have been pulling my hair out trying to get geoip multi website redirect to work in Odoo14

 

I have installed geoip2 as per the odoo instructions.

I have then downloaded the database from maxmind, unzipped it  and FTP’d GeoLite2-City.mmdb to /usr/share/GeoIP

Restarted the server.

 

I then added the code to a test page, but the brackets remain empty.  I have tested this from a non local machine too, with the same results.

When I check the odoo log, I can see that odoo is logging visitors Ips.  I have also tested this with a non-local machine, and the IP in the log is correct. So I think this means that the IP is being forwarded through the reverse proxi properly?

 

If anyone can see what im missing here, or has any pointers that would be really appreciated.

Many thanks,

Sion.

 

My Odoo conf file:

addons_path = /usr/lib/python3/dist-packages/odoo/addons

admin_passwd = my password

csv_internal_sep = ,

data_dir = /var/lib/odoo/.local/share/Odoo

db_host = False

db_maxconn = 64

db_name = False

db_password = False

db_port = False

db_sslmode = prefer

db_template = template0

db_user = odoo

dbfilter =

demo = {}

email_from = False

geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb

http_enable = True

http_interface =

http_port = 8069

import_partial =

limit_memory_hard = 2684354560

limit_memory_soft = 2147483648

limit_request = 8192

limit_time_cpu = 120

limit_time_real = 1200

limit_time_real_cron = -1

list_db = True

log_db = False

log_db_level = warning

log_handler = :INFO

log_level = info

logfile = /var/log/odoo/odoo-server.log

longpolling_port = 8072

max_cron_threads = 1

osv_memory_age_limit = False

osv_memory_count_limit = False

pg_path =

pidfile =

proxy_mode = True

reportgz = False

screencasts =

screenshots = /tmp/odoo_tests

server_wide_modules = base,web

smtp_password = False

smtp_port = 25

smtp_server = localhost

smtp_ssl = False

smtp_user = False

syslog = False

test_enable = False

test_file =

test_tags = None

transient_age_limit = 1.0

translate_modules = ['all']

unaccent = False

upgrade_path =

without_demo = False

workers = 5

 

 

My Nginx file:

#odoo server

 

upstream odoo {

server 127.0.0.1:8069;

}

 

upstream odoochat {

server 127.0.0.1:8072;

}

 

 

server {

server_name shop.mysite.com;

include snippets/letsencrypt.conf;

 

listen 443 ssl; # managed by Certbot

ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot

ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot

include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

proxy_read_timeout 720s;

proxy_connect_timeout 720s;

proxy_send_timeout 720s;

 

# 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;

}

 

server {

listen 80;

server_name shop.mysite.com www.shop.mysite.com;

rewrite ^(.*) https://$host$1 permanent;

}

 

server {

listen 443 ssl;

server_name www.shop.mysite.com;

return 301 $scheme://shop.mysite.com$request_uri;

}

 

server {

server_name usa.mysite.com;

include snippets/letsencrypt.conf;

 

listen 443 ssl; # managed by Certbot

ssl_certificate /etc/letsencrypt/live/usa.mysite.com/fullchain.pem; # managed by Certbot

ssl_certificate_key /etc/letsencrypt/live/usa.mysite.com/privkey.pem; # managed by Certbot

include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

proxy_read_timeout 720s;

proxy_connect_timeout 720s;

proxy_send_timeout 720s;

 

# 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;

}

 

Avatar
Discard
Author

If any one has any other ideas here that would be an amazing help. Really need to get this working.

Best Answer

Hi Sion,

i also don't know what Ashish means by geoip2_website module either...

But if the brackets still remain empty, you perhaps ran into the same problems as me. I mentioned it on github:

...I had a similar problem on Ubuntu 20.04 nginx/1.23.2 and Odoo 14 & 15, I assume you have Odoo 15 running in the virtual environment.
If you only install geoip2 in the "normal" environment (e.g. via "pip3 install geoip2"), it won't work properly.
After I installed geoip2 under VENV everything runs smoothly ;-)

Maybe this will work for you too...
rk-aix

Avatar
Discard

Sion - Did you also try in shell ?

mmdblookup --file /usr/share/GeoIP/GeoLite2-City.mmdb --ip 123.456.78.9 city names de

rk-aix

Author

Thansk rk-aix.
Running Odoo 14.
It’s installed on a vps tubing Ubuntu 20.04

It’s just installed from the package installer using:

# wget -O - https://nightly.odoo.com/odoo.key | apt-key add -
# echo "deb http://nightly.odoo.com/14.0/nightly/deb/ ./" >> /etc/apt/sources.list.d/odoo.list
# apt-get update && apt-get install odoo

I’m assuming this setup isn’t what you mean by virtual environment?

Sion - if you decided to install Odoo via package installation you don't have to look for venv...
I use to install Odoo in virtual environment because of the lot of advantages. You are able to run various versions of Odoo in one machine simultaneously.

But never the less, you should check the geoip-installation with mmdblookup via shell. If you get a result, you can assume that Geoip is working correctly.

rk-aix

More info about Odoo 14 in Venv you will find here:
# https://linuxize.com/post/how-to-install-odoo-14-on-ubuntu-20-04/

Author

Hi Rx-aix,
I tried the mmdblookup in shell, and it returned the expected results - so looks like geoip is working, but the problem is with odoo.

Sion - Sorry for you...

I tried it for you in bare Odoo14/15/16 just with web-module installed, nothing else - but it works on my site(s).
I can only imagine that maybe/somewhere your nginx is misconfigured or too old?
Try it in the shell: # nginx -V and tell me what your result is?
rk-aix

Author

Hi Rk-aix,
i get : nginx version: nginx/1.18.0 (Ubuntu)

Hi Sion,

I think we're getting closer...
Your Nginx version is really quite old. I remember that I also had this version installed some time ago. Back then you had to compile Nginx with GeoIp. Which doesn't mean that Odoo might not be able to handle it, it was simply due to the wrong/differently interpreted headers etc.
Check out https://launchpad.net/~ondrej
He has the best packages for Nginx in my opinion.
There's no harm in trying ;-)
I'll hear from you then...

Regards rk-aix

Best Answer

It looks like you are using the geoip2_website module from Odoo, which is designed to redirect visitors to different websites based on their location. To use it, you'll need to do the following:

  1. Install the module in your Odoo instance by going to Settings -> Apps -> Update Apps, searching for "geoip2_website" in the search bar, and clicking the Install button.

  2. Download the GeoLite2 database from MaxMind and place the GeoLite2-City.mmdb file in the /usr/share/GeoIP directory on your server.

  3. In your Odoo instance, go to Settings -> Configuration -> Websites and create a new website for each location you want to redirect to. In the GeoIP field, enter the two-letter country code for the location (e.g. "US" for the United States).

  4. Add the following code to your website template to redirect visitors based on their location:

This code will check the visitor's location using the GeoLite2 database, and if a website is found for their location, it will redirect them to that website.

Note that you may need to adjust the path to the GeoLite2-City.mmdb file in your Odoo configuration file (located in /etc/odoo/odoo.conf on most systems) if it is different from the default path of /usr/share/GeoIP/GeoLite2-City.mmdb. You can do this by adding the following line to your configuration file:

geoip_database = /path/to/GeoLite2-City.mmdb

I hope this helps! Let me know if

Avatar
Discard
Author

Hi Ashish. Thanks for the reply
If I go to apps, update apps list, and search
geoip2_website I get no results.

Should I have downloaded this module first? Or should it just be there?
Thanks.