Cài đặt debug Odoo với Vscode và Docker

Hướng dẫn setup debug Odoo trên vscode với Docker


Setup Odoo với Dockerfile

Dựa vào github Odoo Docker file để setup docker local.

Trong file Dockerfile, cài thêm package python-debugpy qua lệnh:

RUN pip3 install debugpy --break-system-packages

Với file entrypoint.sh, update nội dung với debugpy:

#!/bin/bash
 
set -e
 
if [ -v PASSWORD_FILE ]; then
    PASSWORD="$(< $PASSWORD_FILE)"
fi
 
# set the postgres database host, port, user and password according to the environment
# and pass them as arguments to the odoo process if not present in the config file
: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}}
: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}
: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}
: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}
 
DB_ARGS=()
function check_config() {
    param="$1"
    value="$2"
    if grep -q -E "^\s*\b${param}\b\s*=" "$ODOO_RC" ; then       
        value=$(grep -E "^\s*\b${param}\b\s*=" "$ODOO_RC" |cut -d " " -f3|sed 's/["\n\r]//g')
    fi;
    DB_ARGS+=("--${param}")
    DB_ARGS+=("${value}")
}
check_config "db_host" "$HOST"
check_config "db_port" "$PORT"
check_config "db_user" "$USER"
check_config "db_password" "$PASSWORD"
 
case "$1" in
    -- | odoo)
        shift
        if [[ "$1" == "scaffold" ]] ; then
            exec /usr/bin/python3 -m debugpy --listen 0.0.0.0:8888 /usr/bin/odoo "$@"
        else
            wait-for-psql.py ${DB_ARGS[@]} --timeout=30
            exec /usr/bin/python3 -m debugpy --listen 0.0.0.0:8888 /usr/bin/odoo "$@" "${DB_ARGS[@]}"
        fi
        ;;
    -*)
        wait-for-psql.py ${DB_ARGS[@]} --timeout=30
        exec /usr/bin/python3 -m debugpy --listen 0.0.0.0:8888 /usr/bin/odoo "$@" "${DB_ARGS[@]}"
        ;;
    *)
        exec "$@"
esac
 
exit 1

Run docker để start Odoo và truy cập thành công qua: localhost:8069

Thêm lệnh chmod +x duong_dan nếu có lỗi Permission Denied

Setup Vscode

Cài các extension PythonPython Debugger

Ở sidebar bên trái, chọn Tab Run And Debug > Create new launch.json file

Chọn Python Debugger > Nhập URL: localhost > Nhập port: 8888

Sau khi kết thúc, file launch.json có nội dung như sau:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Odoo: Run And Debug",
            "type": "debugpy",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 8888,
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}/extra-addons",
                    "remoteRoot": "/mnt/extra-addons"
                }
            ]
        }
    ]
}

Nhấn icon Run, đặt breakpoint và test thử debug.

Có thể tham khảo toàn bộ source code ở đây.