Files
daily-news-app/user_command_log.md
donald 60b00c9568 Add comprehensive user command log documentation
新增完整的使用者命令日誌文件

包含內容:
- 專案瘦身命令
- Git 版本控制操作
- Python 環境設定
- 應用程式執行
- Scrapy 爬蟲執行
- 資料庫操作
- 開發工具使用
- Docker 部署(選用)
- 疑難排解指南
- 快速參考

特色:
- 分類清楚的命令索引
- 實際可執行的命令範例
- Gitea 和資料庫連線資訊
- 常見問題解決方案
- 完整的開發流程參考
- 套件版本資訊

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 13:03:20 +08:00

637 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 每日報導 APP - 使用者命令日誌
**文件版本**: 1.0
**建立日期**: 2024-12-04
**最後更新**: 2024-12-04
**專案名稱**: 每日報導 APP
---
## 命令索引
- [專案瘦身](#專案瘦身)
- [Git 版本控制](#git-版本控制)
- [Python 環境設定](#python-環境設定)
- [應用程式執行](#應用程式執行)
- [Scrapy 爬蟲執行](#scrapy-爬蟲執行)
- [資料庫操作](#資料庫操作)
---
## 專案瘦身
### 清理 Python 快取檔案
```bash
# 刪除所有 __pycache__ 目錄
find . -type d -name "__pycache__" -exec rm -rf {} +
# 刪除所有 .pyc 檔案
find . -type f -name "*.pyc" -delete
```
### 刪除錯誤目錄和空檔案
```bash
# 刪除錯誤建立的目錄
rm -rf "{app"
# 刪除空檔案
rm null nul
```
### 檢查目錄大小
```bash
# 查看主要目錄大小
du -sh .venv/ app/ tests/ templates/ scripts/ logs/
# 查看所有檔案大小(排序)
du -sh *.md *.html __pycache__ 2>/dev/null | sort -hr
```
---
## Git 版本控制
### 初始化 Git 倉庫
```bash
# 初始化 Git
git init
# 設定使用者資訊
git config user.name "donald"
git config user.email "donald@theaken.com"
```
### 基本 Git 操作
```bash
# 查看狀態
git status
# 查看差異
git diff
git diff <file_name>
# 查看已暫存的變更
git diff --cached <file_name>
# 查看提交記錄
git log
git log -1 --format='%an %ae'
```
### 提交變更
```bash
# 暫存所有變更
git add .
git add -A
# 提交變更
git commit -m "提交訊息"
# 使用 HEREDOC 建立多行提交訊息
git commit -m "$(cat <<'EOF'
提交標題
詳細說明內容...
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
```
### 遠端倉庫操作
```bash
# 檢查遠端設定
git remote -v
# 新增遠端倉庫(使用 Token 認證)
git remote add origin https://donald:9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0@gitea.theaken.com/donald/daily-news-app.git
# 推送到遠端
git push -u origin master
git push origin master
# 合併提交與推送
git add . && git commit -m "訊息" && git push origin master
```
### Gitea 倉庫管理
```bash
# 使用 API 建立 Gitea 倉庫
curl -X POST "https://gitea.theaken.com/api/v1/user/repos" \
-H "Authorization: token 9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0" \
-H "Content-Type: application/json" \
-d '{"name":"daily-news-app","description":"企業內部新聞彙整與分析系統","private":false,"auto_init":false}'
```
**Gitea 連線資訊**:
- URL: https://gitea.theaken.com/
- 使用者: donald
- 密碼: !QAZ2wsx
- Token: 9e0a888d1a25bde9cf2ad5dff2bb7ee6d68d6ff0
- 倉庫: https://gitea.theaken.com/donald/daily-news-app
---
## Python 環境設定
### 虛擬環境管理
```bash
# 建立虛擬環境
python -m venv .venv
# 啟動虛擬環境 (Windows PowerShell)
.venv\Scripts\Activate.ps1
# 啟動虛擬環境 (Windows CMD)
.venv\Scripts\activate.bat
# 啟動虛擬環境 (Linux/Mac)
source .venv/bin/activate
# 檢查 Python 版本
python --version
.venv/Scripts/python.exe --version
# 檢查使用的 Python
where python
```
### 套件安裝
```bash
# 安裝所有依賴(使用系統 Python
python -m pip install -r requirements.txt
# 安裝所有依賴(使用虛擬環境 Python
.venv/Scripts/python.exe -m pip install -r requirements.txt
# 安裝核心套件
.venv/Scripts/python.exe -m pip install --upgrade lxml beautifulsoup4 httpx fastapi uvicorn sqlalchemy pydantic pydantic-settings python-dotenv
# 安裝其他依賴
.venv/Scripts/python.exe -m pip install pymysql cryptography alembic python-jose[cryptography] passlib[bcrypt] ldap3 google-generativeai openai apscheduler aiosmtplib weasyprint email-validator tenacity pytest pytest-asyncio black isort python-multipart
# 驗證核心套件安裝
python -c "import fastapi, uvicorn, sqlalchemy; print('Core packages installed')"
```
### 套件管理
```bash
# 列出已安裝套件
pip list
# 檢查套件版本
pip show <package_name>
# 升級 pip
python -m pip install --upgrade pip
# 匯出已安裝套件
pip freeze > requirements.txt
```
---
## 應用程式執行
### 基本執行
```bash
# 使用 run.py 啟動應用程式
python run.py
# 使用虛擬環境 Python 啟動
.venv/Scripts/python.exe run.py
# 直接使用 uvicorn 啟動
uvicorn app.main:app --reload
# 指定主機和埠號
uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload
```
### 背景執行
```bash
# 在背景執行(需要監控輸出)
python run.py &
# 終止背景程序
# 使用 Ctrl+C 或找到 PID 後 kill
```
### 健康檢查
```bash
# 檢查 API 健康狀態
curl http://127.0.0.1:8000/health
# 檢查 API 資訊
curl http://127.0.0.1:8000/api/info
# 開啟 API 文件
# 瀏覽器訪問: http://127.0.0.1:8000/docs
```
### 環境變數設定
```bash
# 複製環境變數範例
cp .env.example .env
# 編輯環境變數
vim .env
# 或使用其他編輯器
notepad .env
```
**必要環境變數**:
```ini
# 資料庫設定
DB_HOST=mysql.theaken.com
DB_PORT=33306
DB_NAME=db_A101
DB_USER=A101
DB_PASSWORD=Aa123456
# 應用程式設定
SECRET_KEY=your-secret-key-here
JWT_SECRET_KEY=your-jwt-secret-key-here
APP_ENV=development
DEBUG=True
```
---
## Scrapy 爬蟲執行
### 基本執行
```bash
# 進入爬蟲目錄
cd hbr_crawler
# 執行爬蟲(替換 <spider_name> 為實際爬蟲名稱)
scrapy crawl hbr
# 執行爬蟲(通用)
scrapy crawl <spider_name>
```
### 測試模式
```bash
# 測試模式(不追蹤分頁)
scrapy crawl <spider_name> -a test_mode=true
# 指定單一 URL
scrapy crawl <spider_name> -a start_url="https://example.com/article/123"
# 組合參數
scrapy crawl <spider_name> -a test_mode=true -a start_url="https://..."
```
### 輸出設定
```bash
# 輸出到 JSON 檔案
scrapy crawl <spider_name> -o output.json
# 輸出到 CSV 檔案
scrapy crawl <spider_name> -o output.csv
# 輸出到 XML 檔案
scrapy crawl <spider_name> -o output.xml
```
### 除錯與測試
```bash
# 顯示詳細日誌
scrapy crawl <spider_name> --loglevel=DEBUG
# 使用 Scrapy Shell 測試選擇器
scrapy shell "https://example.com/article/123"
# 在 Shell 中測試選擇器
>>> response.css('h1.articleTitle::text').get()
>>> response.css('.authorName::text').get()
>>> response.xpath('//h1/text()').get()
# 檢查 robots.txt
scrapy fetch --nolog https://example.com/robots.txt
# 測試特定頁面
scrapy parse --spider=<spider_name> https://example.com
```
### Scrapy 專案管理
```bash
# 列出所有爬蟲
scrapy list
# 檢視爬蟲設定
scrapy settings --get BOT_NAME
# 建立新爬蟲
scrapy genspider <spider_name> example.com
# 檢查專案結構
scrapy version -v
```
---
## 資料庫操作
### SQLite開發環境
```bash
# 初始化 SQLite 資料庫
python scripts/init_db_sqlite.py
# 使用 SQLite 命令列
sqlite3 daily_news_app.db
# SQLite 常用指令
.tables # 列出所有表
.schema # 查看表結構
.quit # 退出
```
### MySQL/MariaDB
```bash
# 連線到資料庫
mysql -h mysql.theaken.com -P 33306 -u A101 -p
# 執行 SQL 檔案
mysql -h mysql.theaken.com -P 33306 -u A101 -p db_A101 < scripts/init.sql
# 備份資料庫
mysqldump -h mysql.theaken.com -P 33306 -u A101 -p db_A101 > backup.sql
# 還原資料庫
mysql -h mysql.theaken.com -P 33306 -u A101 -p db_A101 < backup.sql
```
**資料庫連線資訊**:
- 主機: mysql.theaken.com
- 埠號: 33306
- 資料庫: db_A101
- 使用者: A101
- 密碼: Aa123456
### 常用 SQL 查詢
```sql
-- 查看所有表
SHOW TABLES;
-- 查看表結構
DESCRIBE articles;
DESCRIBE tags;
DESCRIBE article_tags;
-- 查詢文章數量
SELECT COUNT(*) FROM articles;
-- 查詢最新文章
SELECT title, url, publish_date FROM articles ORDER BY publish_date DESC LIMIT 10;
-- 查詢付費文章
SELECT title, url FROM articles WHERE is_paywalled = 1;
-- 查詢特定來源的文章
SELECT COUNT(*) FROM articles WHERE source = 'Digitimes';
```
---
## 開發工具
### 程式碼格式化
```bash
# 使用 Black 格式化
black app/
# 使用 isort 排序 import
isort app/
# 組合使用
black app/ && isort app/
```
### 測試
```bash
# 執行所有測試
pytest tests/ -v
# 執行特定測試檔案
pytest tests/test_crawler.py -v
# 執行測試並顯示覆蓋率
pytest tests/ --cov=app
```
### 日誌查看
```bash
# 查看最新日誌
tail -f logs/app.log
# 查看特定行數
tail -n 100 logs/app.log
# 搜尋日誌中的錯誤
grep "ERROR" logs/app.log
```
---
## Docker 部署(選用)
### Docker Compose
```bash
# 啟動服務
docker-compose up -d
# 查看日誌
docker-compose logs -f app
# 停止服務
docker-compose down
# 重新建置並啟動
docker-compose up -d --build
# 進入容器
docker exec -it daily-news-app bash
```
### Docker 基本操作
```bash
# 建置映像
docker build -t daily-news-app .
# 執行容器
docker run -d -p 8000:8000 --name daily-news-app daily-news-app
# 查看執行中容器
docker ps
# 查看日誌
docker logs -f daily-news-app
# 停止容器
docker stop daily-news-app
# 刪除容器
docker rm daily-news-app
```
---
## 疑難排解
### 常見問題
**1. Import Error: No module named 'fastapi'**
```bash
# 確認使用正確的 Python 環境
which python
# 或 Windows:
where python
# 重新安裝依賴
.venv/Scripts/python.exe -m pip install -r requirements.txt
```
**2. 虛擬環境套件未生效**
```bash
# 確認虛擬環境已啟動
# PowerShell 提示符應該顯示 (.venv)
# 直接使用虛擬環境 Python
.venv/Scripts/python.exe run.py
```
**3. 資料庫連線失敗**
```bash
# 測試資料庫連線
mysql -h mysql.theaken.com -P 33306 -u A101 -p
# 檢查環境變數
cat .env | grep DB_
```
**4. 埠號被佔用**
```bash
# Windows 查看埠號佔用
netstat -ano | findstr :8000
# Linux/Mac 查看埠號佔用
lsof -i :8000
# 終止佔用程序(替換 <PID>
kill <PID>
```
**5. Git 推送失敗**
```bash
# 檢查遠端設定
git remote -v
# 重新設定遠端 URL
git remote set-url origin https://donald:TOKEN@gitea.theaken.com/donald/daily-news-app.git
# 強制推送(小心使用)
git push -f origin master
```
---
## 快速參考
### 開發流程
```bash
# 1. 啟動虛擬環境
.venv\Scripts\Activate.ps1
# 2. 啟動應用程式
python run.py
# 3. 在另一個終端執行爬蟲
cd hbr_crawler
scrapy crawl hbr
# 4. 提交變更
git add .
git commit -m "更新訊息"
git push origin master
```
### 一鍵清理與重置
```bash
# 清理所有快取和臨時檔案
find . -type d -name "__pycache__" -exec rm -rf {} + && \
find . -type f -name "*.pyc" -delete && \
rm -f null nul
```
### 完整部署流程
```bash
# 1. 安裝依賴
.venv/Scripts/python.exe -m pip install -r requirements.txt
# 2. 設定環境變數
cp .env.example .env
# 編輯 .env
# 3. 初始化資料庫
python scripts/init_db_sqlite.py
# 4. 啟動應用程式
python run.py
```
---
## 附錄
### 套件版本資訊
**核心套件**:
- Python: 3.11+ (已支援 3.13)
- FastAPI: 0.109.0+
- Uvicorn: 0.27.0+
- SQLAlchemy: 2.0.44+
- Pydantic: 2.12.4+
**爬蟲套件**:
- httpx: 0.26.0+
- BeautifulSoup4: 4.12.3+
- lxml: 6.0.2+ (Python 3.13 相容)
- Scrapy: 2.11.0+ (進階爬蟲)
**其他套件**:
- WeasyPrint: 67.0+
- python-jose: 3.5.0+
- passlib: 1.7.4+
- bcrypt: 5.0.0+
### 專案結構
```
daily-news-app/
├── app/ # 主應用程式
│ ├── api/ # API 端點
│ ├── core/ # 核心設定
│ ├── db/ # 資料庫
│ ├── models/ # 資料模型
│ ├── schemas/ # Pydantic Schema
│ ├── services/ # 商業邏輯
│ └── main.py # 應用程式入口
├── scripts/ # 工具腳本
├── templates/ # 前端模板
├── tests/ # 測試檔案
├── logs/ # 日誌檔案
├── .venv/ # 虛擬環境
├── .env # 環境變數(不納入版控)
├── requirements.txt # Python 依賴
├── run.py # 啟動腳本
└── README.md # 專案說明
```
---
**文件結束**