用 Nest.js 開發 API 吧 (五) - Postgresql


Posted by AlanSyue on 2020-12-20

前兩篇介紹了 ControllerService 的用法,接下來預計分享 Nest.js 及 TypeOrm。再介紹 TypeOrm 之前,我們需要先來架設資料庫(db),要使用的是 Postgresql。

用 Docker 啟用 Postgresql

首先,先 pull Postgresql 的 docker image

docker pull postgres

再來,建立一個資料夾,用來儲存 Postgresql 的紀錄。

mkdir ${HOME}/postgres-data/

接著,執行下面的指令,build 出 Postgresql 的 container

docker run -d \
    --name dev-postgres \
    -e POSTGRES_PASSWORD={YOUR PASSWORD} \
    -v ${HOME}/postgres-data/:/var/lib/postgresql/data \
    -p 5432:5432 \
    postgres

用 Docker 啟用 pgAdmin

接下來我們要來建立 pgAdmin,透過 pgAdmin 就能有 GUI 來管理 Postgresql。
第一步也是先 pull docker image:

docker pull dpage/pgadmin4

再來執行以下指令,build 出 pgAdmin 的 container:

docker run -d \
    --name dev-pgadmin \
    -e 'PGADMIN_DEFAULT_EMAIL={YOUR EMAIL ACCOUNT}' \
    -e 'PGADMIN_DEFAULT_PASSWORD={YOUR PASSWORD}' \
    -p 80:80 \
    dpage/pgadmin4

啟用 pgAdmin 連接本地端 Postgresql

我們先在 terminal 輸入:

docker ps


根據上圖,可以看到已經建立兩個 container 了,接著輸入:

docker inspect dev-postgres -f "{{json .NetworkSettings.Networks }}"

可以看到以下資訊:

{
    "bridge":{
      "IPAMConfig":null,
      "Links":null,
      "Aliases":null,
      "NetworkID":"dc0eeecb88ba55574ec6854415e1dff0f65a56061967fed2146aae95e34cf814",
      "EndpointID":"9f820ae73f6293b6293c29ce3aabba4dc56b2d8a28382f5c490e78c6c59b0df9",
      "Gateway":"172.17.0.1",
      "IPAddress":"172.17.0.2",
      "IPPrefixLen":16,
      "IPv6Gateway":"",
      "GlobalIPv6Address":"",
      "GlobalIPv6PrefixLen":0,
      "MacAddress":"02:42:ac:11:00:02",
      "DriverOpts":null
   }
}

我們把其中的 "IPAddress":"172.17.0.2" 記下來,然後再瀏覽器輸入:
http://localhost:80,會到 pgAdmin 的登入畫面。輸入在 用 Docker 啟用 pgAdmin 創建的 PGADMIN_DEFAULT_EMAILPGADMIN_DEFAULT_PASSWORD 即可登入。

成功登入後,我們在主畫面點選 Add New Server

接著在 general 輸入 db 的名稱,如下圖範例,我輸入的是 itseed

再來,我們要來連接到用 docker build 出來的 Postgresql,我們在 Host name/address 輸入剛剛記下的 IPAddress
Username 填入 postgresPassword 則是上面執行指令時輸入的 POSTGRES_PASSWORD,如下圖所示,都沒問題後就按 Save

成功畫面:

小結

今天分享了使用 docker 建立 Postgresql 以及 pgAdmin,然後可以在 pgAdmin 成功連接資料庫。下一篇預計進入 TypeOrm 操作 Postgresql 的分享,如果文章有任何錯誤或建議,歡迎告知!

參考來源

Local Development Set-Up of PostgreSQL with Docker

NEXT:用 Nest.js 開發 API 吧 (六) - TypeORM


#nestjs #nodejs #docker #postgresql







Related Posts

網頁與伺服器的溝通

網頁與伺服器的溝通

Git cherry pick 實戰: 作業分支混到 master commit,但又不想洗掉自己作業的 commit 要怎麼辦?

Git cherry pick 實戰: 作業分支混到 master commit,但又不想洗掉自己作業的 commit 要怎麼辦?

物件導向設計的五個基本原則 SOLID

物件導向設計的五個基本原則 SOLID


Comments