iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Odoo

Odoo 部署策略系列 第 18

整合 pgAdmin 容器:提升 odoo 開發除錯體驗

  • 分享至 

  • xImage
  •  

在開發或導入新的模組時,我們經常需要快速進行一些測試,或者直接從資料庫中撈取資料來進行除錯。但回想我們在 從網路設計到 Docker Compose:搭建 Odoo 反向代理的第一步 中設計的網路架構,為了安全性,我們的資料庫並沒有將埠口暴露(expose)到主機 (host),那麼我們該如何直接查看資料庫的內容呢?

最簡單的方法就是直接加入一個資料庫管理工具的容器——pgAdmin。

pgAdmin 介面

pgAdmin 簡介

pgAdmin 是一個功能強大的開源 PostgreSQL 資料庫管理工具,提供圖形化的使用者介面,讓開發者和資料庫管理員可以輕鬆地管理和監控 PostgreSQL 資料庫。透過 pgAdmin,我們可以:

  • 檢視和編輯資料表內容
  • 執行 SQL 查詢
  • 管理資料庫結構
  • 監控資料庫效能

在 odooBundle-Codebase 中加入 pgAdmin

由於在開發時也經常需要使用,我們先在 odooBundle-Codebase 這層的 Docker Compose 中嘗試加入 pgAdmin。方法非常簡單,直接使用官方的映像檔,並將它的網頁介面暴露出來即可。

Docker Compose 的容器設定:

    postgresql-admin:
      image: dpage/pgadmin4:8.10
      restart: always
      networks:
        - odoo-net
      ports:
        - "8080:80" # 將 pgAdmin 的 HTTP 服務埠口暴露出來
      environment:
        - PGADMIN_DEFAULT_EMAIL=odoo-db@example.com # 直接透過環境變數來設定網頁介面的帳號和密碼。
        - PGADMIN_DEFAULT_PASSWORD=AY0kNIHYqeqFg64c
      volumes:
        - db-admin-data:/var/lib/pgadmin # 如果不設定這個,每次重啟都要重新設定連線資訊

參考連結:pgAdmin - Container Deployment
接下來,直接啟動 Docker 容器,然後在瀏覽器中輸入 http://localhost:8080/ 就可以進入 pgAdmin 的介面。登入後,新增我們的資料庫容器的連線資訊,就能成功連線進去了。

pgAdmin 連線設定
主機名稱:填寫在 Docker Compose 中定義的資料庫容器名稱。


在 WebApp-Deployment 中加入 pgAdmin

在我們的部署環境 WebApp-Deployment 中,開發者可能也需要使用 pgAdmin,例如在測試升級模組時,可能會遇到舊資料與新模組不相容的情況。因此,部署層的 Docker Compose 也需要加入 pgAdmin 容器。

不過,由於 pgAdmin 自帶的網頁介面並沒有加密,我們不能冒著帳號密碼被明文攔截的風險。因此,需要像 Odoo 的網頁一樣,透過反向代理(reverse proxy)將流量加密。

Docker Compose 的容器設定:

    postgresql-admin:
      image: dpage/pgadmin4:8.10
      restart: always
      networks:
        - prod-net
        - dev-net
      env_file:
        - ./config/pgadmin.env # 將環境變數也放入我們的 config 資料夾
      volumes:
        - ./postgresql-admin/servers.json:/pgadmin4/servers.json
        - db-admin-data:/var/lib/pgadmin

servers.json

我們在 volumes 中還加入了 servers.json 檔案,用來預先帶入一些資料庫連線的資訊,讓我們不用進入 pgAdmin 後還要手動設定。

servers.json 的內容:

{
    "Servers": {
        "1": {
            "Name": "Odoo Production PostgreSQL",
            "Group": "Servers",
            "Host": "postgresql-prod",
            "Port": 5432,
            "MaintenanceDB": "postgres",
            "Username": "odoo_user",
            "SSLMode": "prefer",
            "PassFile": "/pgpass"
        },
        "2": {
            "Name": "Odoo Development PostgreSQL",
            "Group": "Servers",
            "Host": "postgresql-dev",
            "Port": 5432,
            "MaintenanceDB": "postgres",
            "Username": "odoo_user",
            "SSLMode": "prefer",
            "PassFile": "/pgpass"
        }
    }
}

在反向代理(Nginx)的設定方面,基本上與 為 Odoo 建立 Nginx 反向代理第二步:nginx.conf 設定實作 中的設定相同,我們就不再贅述。只需要為 pgAdmin 再新增一個 server 區塊,例如:

server {
    listen 443 ssl;
    server_name odoo-db.internal.example.com odoo-db.internal.example.local;
    # 其他設定...
}

另外,在生成 SSL 憑證時,可以為 pgAdmin 的域名加入憑證的別名,這樣就可以共用同一個憑證檔案,不需要為每個域名都生成一個憑證。可以參考之前的文章odoo 反向代理設定第四步:自簽 Root CA 並安裝 SSL 憑證來了解如何生成憑證。

openssl.cnf 中的設定:

[ req ]
...

[ req_distinguished_name ]
...

[ v3_req ]
...

[ alt_names ]
DNS.1 = odoo.internal.example.local
DNS.2 = odoo-db.internal.example.com
DNS.3 = odoo-db.internal.example.local

這樣一來,我們就在整合層和部署層都加入了實用的資料庫管理工具。
(但現在是真的不知道明天要寫什麼了XXXD)


上一篇
開發 odoo module 的小工具:快速參數調整並重啟
下一篇
探索 odoo.conf 模板:如何使用 dbfilter 與 list_db 保護資料庫
系列文
Odoo 部署策略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言