Bỏ qua để đến Nội dung

Cài đặt Odoo 18 CE trên Ubuntu Server 24.04

Cùng với PostgreSQL 17 & Nginx Proxy & Certbot
14 tháng 5, 2025 bởi
Cài đặt Odoo 18 CE trên Ubuntu Server 24.04
Hưng Nguyễn

Mục lục

    Giới thiệu qua về Odoo


    Odoo là một nền tảng ERP mã nguồn mở phổ biến, phục vụ cho rất nhiều loại hình nghiệp vụ khác nhau — từ Quản trị nhân sự (HRM), Quản trị quan hệ khách hàng (CRM), Quản lý dự án, Kế toán, cho đến bán hàng, kho vận, và thậm chí là thương mại điện tử. Với định hướng All-in-One platform, Odoo cho phép doanh nghiệp sử dụng một hệ thống duy nhất để đồng bộ dữ liệu và quy trình nội bộ.


    Phiên bản Community Edition (CE) là phiên bản mã nguồn mở hoàn toàn miễn phí, phù hợp cho cá nhân, startup hoặc doanh nghiệp vừa và nhỏ có khả năng tự triển khai và duy trì hạ tầng. (Website Hưng Nguyễn . VN này tôi cũng dựng bằng Odoo).


    Trong bài viết này, tôi sẽ hướng dẫn chi tiết từ A-Z cách cài đặt và cấu hình Odoo 18 Community Edition trên hệ điều hành Ubuntu Server 24.04 LTS — bản phát hành mới nhất tính đến thời điểm viết bài.

    Triển khai được thực hiện trên môi trường Production, bao gồm:

    • PostgreSQL 17 làm hệ quản trị cơ sở dữ liệu (DBMS)
    • Nginx làm reverse proxy
    • Certbot để tự động cấp và gia hạn HTTPS với Let's Encrypt
    • Cấu hình dịch vụ tự động khởi động (systemd)
    • Tối ưu hiệu suất cơ bản cho production



    Chuẩn bị trước khi bắt đầu


    • Cloud server chạy Ubuntu Server 24.04 LTS (khuyến nghị từ 2 vCPU, 4GB RAM trở lên) với tài khoản root - trong bài viết này tôi sẽ giả định IP server của bạn là {YOUR_SERVER_IP}
    • Đăng ký 1 tên miền (.com, .vn,... gì cũng được) - trong bài viết này tôi sẽ giả định tên miền bạn mua là {YOUR_DOMAIN}



    I - Cài đặt server

    Đầu tiên cần SSH vào server, từ Terminal máy local, gõ lệnh:

    ssh root@{YOUR_SERVER_IP}

    Sau đó nhập mật khẩu để truy xuất vào server của bạn.


    Tạo tài khoản mới (không dùng tài khoản root)

    adduser normal-user
    
    • Nhập vào mật khẩu mới & gõ lại xác nhận khi được hỏi.
    • Các câu hỏi còn lại (Full Name, Room Number, Work Phone, Home Phone, Other) cứ ENTER luôn cho lẹ (Full Name thì nhập tên bạn không dấu vào cũng được).
    • Gõ Y > Enter khi được hỏi xác nhận.
    • Thêm tài khoản vừa tạo vào nhóm sudo
    usermod -aG sudo normal-user
    
    • Thoát tài khoản root và chuyển sang đăng nhập bằng tài khoản vừa tạo.


    Đổi hostname

    sudo hostnamectl set-hostname normal-user-server
    
    • Nhập vào mật khẩu của user nếu được hỏi.


    Cập nhật server

    • Cập nhật index cho các repo:
    sudo apt update
    
    • Cài đặt các phiên bản mới nhất của các gói:
    sudo apt upgrade
    


    Bảo mật server

    1. Cài Fail2Ban:
      • Công cụ này giúp bảo vệ máy chủ khỏi việc bị tấn công brute-force bằng cách quản lý file log lại những lần login thất bại và cấm những địa chỉ IP đáng ngờ.
        sudo apt install fail2ban
        
      • Mặc định sau khi cài xong thì Fail2Ban sẽ được enable và khởi chạy luôn. Để chắc ăn, bạn cứ chạy thêm câu lệnh sau:
        sudo systemctl enable --now fail2ban
        
    2. Bật firewall
      • Đảm bảo an toàn cho server của bạn bằng cách bật firewall (ufw trên Ubuntu Server) lên.
      • Trước khi bật firewall, bạn cần mở thông port cho SSH trước (tránh trường hợp không remote được vào server nữa sau khi bật firewall).
        sudo ufw allow OpenSSH
        
      • Bật firewall:
        sudo ufw enable
        
      • Kiểm tra lại trạng thái firewall sau khi bật:
        sudo ufw status



    II - Cài PostgreSQL 17


    Thêm repo PostgreSQL vào hệ thống:

    • Cập nhật index và cài các gói cần thiết:
    sudo apt update
    
    • Thêm repo PostgreSQL 17 vào hệ thống:
    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt> $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    
    • Nhập signing key cho repo vừa thêm:
    curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg
    
    • Cập nhật lại danh sách gói:
    sudo apt update
    


    Cài PostgreSQL 17

    • Chạy lệnh cài:
      sudo apt install postgresql-17
      
    • Mặc định sau khi cài xong thì PostgreSQL 17 sẽ được enable và khởi chạy luôn. Để chắc ăn, bạn cứ chạy thêm câu lệnh sau:
      sudo systemctl enable --now postgresql-17
      


    Cấu hình PostgreSQL

    • File postgresql.conf, sửa listen_addresses thành * để cho phép kết nối từ xa:
      sudo nano /etc/postgresql/17/main/postgresql.conf
      listen_addresses = '*'
      
    • Để kết nối DB remote được, cần sửa file pg_hba.conf, cấu hình sử dụng md5 cho xác thực mật khẩu.
      sudo sed -i '/^host/s/ident/md5/' /etc/postgresql/17/main/pg_hba.conf && \
      sudo sed -i '/^local/s/peer/trust/' /etc/postgresql/17/main/pg_hba.conf && \
      echo "host all all 0.0.0.0/0 md5" | sudo tee -a /etc/postgresql/17/main/pg_hba.conf
      
    • Khởi động lại PostgreSQL để phản ảnh thay đổi:
      sudo systemctl restart postgresql


    Kết nối đến PostgreSQL

    • Kết nối bằng tài khoản postgres:
      sudo -u postgres psql
      
    • Đặt mật khẩu cho tài khoản postgres:
      ALTER USER postgres PASSWORD 'Str0ngP@ssword!';
      
    • Tạo tài khoản PostgreSQL mới để dùng riêng cho Odoo:
      CREATE USER "normal-user" WITH ENCRYPTED PASSWORD 'normal-user-pass';
      ALTER USER "normal-user" CREATEDB;



    III - Cài Odoo 18 CE


    Cài các gói và thư viện

    1. Cài Python 3 Pip - trình quản lý & cài đặt thư viện cho Python:
      sudo apt install -y python3-pip
      
    2. Cài Python Virtual Env - tạo môi trường Python độc lập cho mỗi dự án.
      sudo apt install -y python3-venv
      
    3. Cài các thư viện và phụ thuộc cho Development: Cần thiết để chạy Odoo và các phụ thuộc của nó.
      sudo apt install -y python3-dev libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential libssl-dev libffi-dev libmysqlclient-dev libjpeg-dev libpq-dev libjpeg8-dev liblcms2-dev libblas-dev libatlas-base-dev
      
    4. Cài Node.js và NPM: Node.js dùng cho các tác vụ frontend, NPM thì là trình quản lý gói của nó.
      sudo apt install -y npm
      


    Kéo source code Odoo 18

    • Cài git:
    sudo apt install -y git
    • Clone source:
    cd /home/normal-user && \
    ​git clone https://github.com/odoo/odoo.git --depth 1 --branch 18.0 --single-branch ./odoo18


    Cài các phụ thuộc Python

    • Tạo Python Virtual Env:
    cd /home/normal-user/odoo18 && \
    python3 -m venv ./venv
    • Kích hoạt Virtual Env:
    source venv/bin/activate
    • Cài các phụ thuộc Python:
    pip install -r requirements.txt
    • Cài wkhtmltopdf - để gen PDF:
    wget -P /home/normal-user https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb && \
    sudo apt install -y fontconfig xfonts-75dpi xfonts-base && \
    sudo dpkg -i /home/normal-user/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
    • Fix các vấn đề thư viện của server (nếu có):
    sudo apt install -f
    • Ngừng kích hoạt Virtual Env: 
    deactivate


    Tạo & Chỉnh sửa file Odoo Config

    • Tạo file odoo.conf trong folder /etc/:
    sudo nano /etc/odoo.conf
    • Nội dung:
    [options]
    addons_path = /home/normal-user/odoo18/addons,/home/normal-user/odoo18/extra-addons
    data_dir = /var/lib/odoo
    admin_passwd = this-is-master-password
    proxy_mode = True
    db_maxconn = 6
    db_host = localhost
    dbfilter = ^normal-user-(%d|%h)$
    db_user = normal-user
    db_password = normal-user-pass
    list_db = False
    limit_memory_hard = 805306368
    limit_memory_soft = 671088640
    limit_request = 8196
    limit_time_cpu = 1800
    limit_time_real = 3600
    gevent_port = 8072
    max_cron_threads = 1
    workers = 8
    logfile = /var/log/odoo/odoo.log
    • Set quyền cho file:
    sudo chown normal-user: /etc/odoo.conf && \
    sudo chmod 640 /etc/odoo.conf
    • Tạo folder extra-addons (folder này sẽ chứa các module mà mình tự phát triển hoặc lấy từ bên thứ 3).
    sudo mkdir /home/normal-user/odoo18/extra-addons
    • Tạo log folder:
    sudo mkdir /var/log/odoo && \
    sudo chown normal-user:root /var/log/odoo
    
    • Tạo folder chứa filestore và sessions cho Odoo:
    sudo mkdir /var/lib/odoo && \
    sudo chown normal-user: /var/lib/odoo
    


    Tạo dịch vụ Odoo

    Cần tạo dịch vụ Odoo để chạy, dừng cũng như enable việc tự khởi động mỗi khi server bật lên.

    1. Tạo service file:
      sudo nano /etc/systemd/system/odoo.service
      
    2. Nội dung:
      [Unit]
      Description=Odoo
      Documentation=http://www.odoo.com
      After=network.target postgresql.service
      
      [Service]
      # Ubuntu/Debian convention:
      Type=simple
      User=normal-user
      ExecStart=/home/normal-user/odoo18/venv/bin/python3.12 /home/normal-user/odoo18/odoo-bin -c /etc/odoo.conf
      Restart=always
      
      [Install]
      WantedBy=default.target
      
    3. Set quyền cho service file:
      sudo chmod 755 /etc/systemd/system/odoo.service
      sudo chown root: /etc/systemd/system/odoo.service
      
    4. Khởi chạy odoo service:
      sudo systemctl start odoo.service
      
    5. Kiểm tra log:
      sudo tail -f /var/log/odoo/odoo.log
      
    6. Enable odoo service để tự chạy mỗi khi server bật lên:
      sudo systemctl enable odoo.service
      



    IV - Cài Nginx & certbot

    1. Cài Nginx:
      • Chạy lệnh cài Nginx:
        sudo apt install -y nginx
        
      • Mặc định sau khi cài xong thì Nginx sẽ được enable và khởi chạy luôn. Để chắc ăn, bạn cứ chạy thêm câu lệnh sau:
        sudo systemctl enable --now nginx
        
    2. Cấu hình Nginx:
      • Tạo file cấu hình nginx cho domain của bạn
        sudo nano /etc/nginx/sites-available/{YOUR_DOMAIN}.conf
        
      • Nội dung:
        server {
            listen 80;
            server_name {YOUR_DOMAIN};
        
            access_log /var/log/nginx/odoo.access.log;
            error_log /var/log/nginx/odoo.error.log;
        
            proxy_read_timeout 720s;
            proxy_connect_timeout 720s;
            proxy_send_timeout 720s;
        
            client_max_body_size 200m;
        
            location / {
                proxy_pass http://127.0.0.1:8069;
                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 $scheme;
            }
        
            location ~* /web/static/ {
                proxy_cache_valid 200 90m;
                proxy_buffering on;
                expires 864000;
                proxy_pass http://127.0.0.1:8069;
            }
            
            location /websocket {
                proxy_pass http://127.0.0.1:8072;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
        }
        
        Bấm Ctrl + X rồi gõ Y để lưu file lại.
      • Kích hoạt file cấu hình vừa tạo:
        sudo ln -s /etc/nginx/sites-available/{YOUR_DOMAIN}.conf /etc/nginx/sites-enabled/
        
      • Kiểm tra xem có lỗi Nginx gì không:
        sudo nginx -t
        
        Báo lại như này là ok:
        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful
        
      • Khởi chạy lại nginx service để nhận cấu hình mới:
        sudo systemctl restart nginx
        
      • Mở port HTTP và HTTPS để bên ngoài truy cập vào được web.
        sudo ufw allow 80/tcp && \
        sudo ufw allow 443/tcp
        
    3. Trỏ domain về server:
      • Tạo bản ghi trên trang quản trị domain của bạn trò về địa chỉ IP của server.
        Host=www type=CNAME Address={YOUR_DOMAIN}. TTL=300
        Host=@ Type=A Address={YOUR_SERVER_IP} TTL=300
        
      • Bản ghi loại CNAME để trỏ domain www.* về domain không có www của bạn. Lưu ý: có dấu . ở cuối trong trường Address.
    4. Cài certbot để dùng HTTPS:
    • Chạy lệnh để cài certbot - công cụ tự động cấp phát SSL sử dụng của Let’s Encrypt.
    sudo apt install -y certbot python3-certbot-nginx && \
    sudo certbot --nginx -d {YOUR_DOMAIN}
    
    • Nhập vào email để nhận thông báo.
    • Chọn Y để đồng ý với ToS (Điều khoản dịch vụ).
    • Chọn Y để đồng ý chia sẻ địa chỉ email với tổ chức EFF.



    V - Vào giao diện Odoo để tạo DB

    • Từ Web Browser (Chrome), vào trang web: https://{YOUR_DOMAIN} để bắt đầu khởi tạo DB:
      • Master Password: this-is-master-password
      • Database Name: normal-user-{YOUR_DOMAIN}
      • Email: <Email của bạn - sẽ dùng làm tài khoản admin>
      • Password: <Mật khẩu của bạn - mật khẩu tài khoản admin>
      • Phone number: <SĐT của bạn>
      • Language: English (US)
      • Country: Vietnam
      • Demo data: Không tick
      • Ấn nút Create database.
    • Đợi 1 lúc, đăng nhập với email và password vừa tạo.
    • File /etc/odoo.conf, sửa giá trị list_db thành False để vô hiệu hóa việc Thêm/ Chọn/Xóa DB từ giao diện Odoo. Sau đó restart Odoo service.
      sudo systemctl restart odoo
      



    Lời kết

    Vậy là xong! Sau khi làm theo từng bước trong bài viết này, bạn đã có một hệ thống Odoo 18 chạy ổn định trên Ubuntu Server 24.04, có HTTPS đầy đủ, proxy qua Nginx, và sẵn sàng dùng cho môi trường production.


    Tôi viết bài này để chia sẻ lại quá trình thực tế tôi đã làm – hy vọng giúp được bạn nào đó đang loay hoay dựng Odoo cho công ty, cho dự án riêng, hay đơn giản là để vọc.


    Nếu trong quá trình làm có trục trặc gì, bạn đừng ngần ngại mà hãy liên hệ với tôi nhé!

    Liên hệ tôi

    Chúc bạn dựng Odoo thành công, và sớm bắt tay vào số hoá doanh nghiệp hoặc cho bản thân cá nhân mình!


    Cài đặt Odoo 18 CE trên Ubuntu Server 24.04
    Hưng Nguyễn 14 tháng 5, 2025
    Chia sẻ bài này
    Lưu trữ