iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
生成式 AI

一起來打造 PTT 文章智慧問答系統!系列 第 5

【Day 05】Docker 環境建置 - 建立可攜式開發與執行環境 (下)

  • 分享至 

  • xImage
  •  

Hi大家好,
這是我參加 iT 邦幫忙鐵人賽的第 1 次挑戰,這次的主題聚焦在結合 Python 爬蟲、RAG(檢索增強生成)與 AI,打造一套 PTT 文章智慧問答系統。在過程中,我會依照每天進度上傳程式碼到 GitHub ,方便大家參考學習。也歡迎留言或來信討論,我的信箱是 gerryearth@gmail.com


今天我們將接續今天未完成的部分,完整部署到 Docker 的容器!


本日目標

  1. 整合 Django 與 MariaDB 到容器中
  2. 成功啟動並訪問 Django 專案

步驟四:建立 requirements.txt

將你目前專案的 Python 套件建立成 requirements.txt

pip freeze > requirements.txt

步驟五:修改 Django 設定(settings.py)

ptt_rag_demo/settings.pyDATABASES 設定改為以下,與 docker-compose 中的資料庫連接資訊一致:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'my_database',
        'USER': 'ptt_rag',
        'PASSWORD': 'ptt_rag',
        'HOST': 'my_mariadb',  # 注意這裡是服務名稱,不是 localhost
        'PORT': '3306',
    }
}

步驟六:啟動容器

請先開啟 Docker Desktop ,並在專案根目錄執行以下指令:

docker-compose up

此指令會依照 docker-compose.yml 的計畫進行部屬:

  • 建立 web(Django)與 mariadb(MariaDB)容器
  • 將本機 port 8000 對應到容器 port 8000
  • 自動啟動 Django 開發伺服器

其他常用指令:

docker-compose down # 停止容器
docker-compose up -d --build # 在背景重啟容器

開啟權限

第一次啟動會發現連線不到 my_mariadb ,這是因為我們還沒給予權限。
首先請輸入:

docker exec -it my_mariadb mariadb -u root -p

以 root 身分互動式地進入名為 my_mariadb 的容器,並開啟 MariaDB 客戶端以連線至資料庫。

接下來輸入:

CREATE USER IF NOT EXISTS 'ptt_rag'@'%' IDENTIFIED BY 'ptt_rag';
GRANT ALL PRIVILEGES ON my_database.* TO 'ptt_rag'@'%';
FLUSH PRIVILEGES;

建立一個使用者 ptt_rag,密碼為 ptt_rag,並允許他從任何位置連接 MariaDB,且擁有 my_database 資料庫的完整存取權限。

可以用指令檢查受否有存取權限:

SELECT user, host FROM mysql.user WHERE user = 'ptt_rag';

到這裡若還是無法連線,請嘗試將 django_web 重啟 (restart)。

若看到如下訊息,代表 Django 成功啟動:

Starting development server at http://0.0.0.0:8000/

即可瀏覽:http://localhost:8000

https://ithelp.ithome.com.tw/upload/images/20250804/201728347ExIB5cyTl.png


明天【Day 06】探索 PTT 結構與版面資料抓取 – 從 HTML 中提取文章資訊,今天我們將動手開始第一個核心功能:PTT 文章爬蟲


上一篇
【Day 04】Docker 環境建置 - 建立可攜式開發與執行環境 (上)
下一篇
【Day 06】探索 PTT 結構與版面資料抓取 – 從 HTML 中提取文章資訊
系列文
一起來打造 PTT 文章智慧問答系統!14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言