diff --git a/.env.example b/.env.example index 665f764..db6b8a1 100644 --- a/.env.example +++ b/.env.example @@ -8,12 +8,25 @@ CMD_DB_URL=postgres://codimd:CHANGE_THIS_TO_A_STRONG_PASSWORD@database/codimd # CodiMD Domain Configuration # For local development, use localhost -# For production, set your actual domain (e.g., hackmd.example.com) +# For production with HTTPS, set your actual domain (e.g., md.automodules.com) CMD_DOMAIN=localhost # URL Configuration +# Set CMD_PROTOCOL_USESSL=true when using HTTPS (with reverse proxy) +# Set CMD_URL_ADDPORT=false when using standard ports (80/443) CMD_URL_ADDPORT=false CMD_PROTOCOL_USESSL=false # CodiMD Session Secret (generate a random string) CMD_SESSION_SECRET=CHANGE_THIS_TO_A_RANDOM_SECRET_STRING + +# Optional: Allow iframe embedding (if needed) +# CMD_ALLOW iframeorigin=https://example.com + +# Optional: Session lifetime in milliseconds (default: 1209600000 = 14 days) +# CMD_SESSION_LIFETIME=1209600000 + +# Optional: Maximum upload size in bytes (default: 50MB) +# CMD_IMAGE_UPLOAD_TYPE=filesystem +# CMD_MAX_UPLOAD_SIZE=52428800 + diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md new file mode 100644 index 0000000..77b0e2a --- /dev/null +++ b/TROUBLESHOOTING.md @@ -0,0 +1,326 @@ +# CodiMD 故障排除指南 + +常見問題及解決方案。 + +## HTTPS 設置相關問題 + +### Mixed Content 錯誤 + +**錯誤訊息:** +``` +Mixed Content: The page was loaded over HTTPS, but requested an insecure resource +``` + +**原因:** +CodiMD 環境變數中的域名設定不正確,仍在使用 `localhost`。 + +**解決方案:** + +1. 編輯 `.env` 文件: +```bash +nano .env +``` + +2. 更新以下變數: +```env +# 改為你的實際域名 +CMD_DOMAIN=md.automodules.com + +# 啟用 HTTPS +CMD_PROTOCOL_USESSL=true + +# 使用反向代理時設為 false +CMD_URL_ADDPORT=false +``` + +3. 重啟 CodiMD: +```bash +docker-compose restart codimd +``` + +4. 清除瀏覽器快取並重新載入頁面。 + +### CSP (Content Security Policy) 錯誤 + +**錯誤訊息:** +``` +Loading the stylesheet violates the following Content Security Policy directive +``` + +**原因:** +環境變數設定不正確,導致資源路徑錯誤。 + +**解決方案:** +參考上述 Mixed Content 的解決方案,確保: +- `CMD_DOMAIN` 設為正確的域名 +- `CMD_PROTOCOL_USESSL=true`(使用 HTTPS 時) + +### 資源載入失敗 + +**錯誤訊息:** +``` +Loading the script 'http://localhost/config' violates CSP directive +``` + +**原因:** +CodiMD 仍在產生 `localhost` 的 URL。 + +**解決方案:** +1. 確認 `.env` 中的 `CMD_DOMAIN` 設定正確 +2. 重啟 CodiMD 服務 +3. 清除瀏覽器快取(Ctrl+Shift+Delete 或 Cmd+Shift+Delete) + +## 資料庫連線問題 + +### 無法連接資料庫 + +**檢查步驟:** + +1. 確認資料庫服務是否運行: +```bash +docker-compose ps +``` + +2. 查看資料庫日誌: +```bash +docker-compose logs database +``` + +3. 測試資料庫連線: +```bash +docker-compose exec database psql -U codimd -d codimd -c "SELECT 1;" +``` + +**常見原因:** +- 資料庫尚未完全啟動(等待 30 秒後重試) +- 密碼設定錯誤(檢查 `.env` 中的 `POSTGRES_PASSWORD` 和 `CMD_DB_URL`) + +### 資料庫遺失 + +**症狀:** +重新啟動後所有資料都不見了。 + +**解決方案:** +1. 確認 `pgdata` 目錄存在: +```bash +ls -la pgdata/ +``` + +2. 如果目錄不存在,停止服務並從備份還原: +```bash +docker-compose down +# 從備份還原 +docker-compose up -d +``` + +## 網路連線問題 + +### 無法從外部存取 + +**檢查步驟:** + +1. 確認 port 綁定: +```bash +docker-compose ps | grep 0.0.0.0 +``` + +應該看到 `0.0.0.0:3000->3000/tcp` 而不是 `127.0.0.1:3000->3000/tcp` + +2. 檢查防火牆: +```bash +# Ubuntu/Debian +sudo ufw status + +# CentOS/RHEL +sudo firewall-cmd --list-all +``` + +3. 測試本地連線: +```bash +curl http://localhost:3000 +``` + +4. 測試外部連線(從另一台機器): +```bash +curl http://your-server-ip:3000 +``` + +### WebSocket 連線失敗 + +**症狀:** +多人協作功能無法使用,編輯器無法即時同步。 + +**解決方案:** + +1. 確認 Nginx 配置包含 WebSocket 支援: +```nginx +proxy_set_header Upgrade $http_upgrade; +proxy_set_header Connection "upgrade"; +proxy_http_version 1.1; +``` + +2. 確認沒有使用 HTTP/2 不當配置: +```nginx +# 移除可能干擾 WebSocket 的配置 +# proxy_buffering off; +# proxy_request_buffering off; +``` + +3. 重啟 Nginx: +```bash +sudo systemctl reload nginx +``` + +## 效能問題 + +### 頁面載入緩慢 + +**檢查步驟:** + +1. 查看容器資源使用: +```bash +docker stats +``` + +2. 查看日誌中的錯誤: +```bash +docker-compose logs --tail=100 codimd +``` + +**解決方案:** +- 增加 Docker 資源限制(如果使用 Docker Desktop) +- 升級伺服器規格 +- 啟用 CDN(設定 `CMD_USECDN=true`) + +### 資料庫效能問題 + +**解決方案:** + +1. 定期清理舊的修訂版本: +```bash +docker-compose exec database psql -U codimd -d codimd -c "DELETE FROM revisions WHERE \"createdAt\" < NOW() - INTERVAL '30 days';" +``` + +2. 資料庫維護: +```bash +docker-compose exec database psql -U codimd -d codimd -c "VACUUM ANALYZE;" +``` + +## 檔案上傳問題 + +### 圖片上傳失敗 + +**檢查步驟:** + +1. 確認上傳目錄權限: +```bash +ls -la upload-data/ +``` + +2. 查看容器日誌: +```bash +docker-compose logs codimd | grep upload +``` + +**解決方案:** +- 確認 `upload-data` 目錄存在且可寫入 +- 檢查磁碟空間:`df -h` + +### 檔案大小限制 + +**症狀:** +上傳大檔案時失敗。 + +**解決方案:** + +1. 在 `.env` 中增加上傳限制: +```env +CMD_MAX_UPLOAD_SIZE=104857600 +``` + +2. 在 Nginx 配置中增加限制: +```nginx +client_max_body_size 100M; +``` + +## 重置服務 + +### 完全重置(會遺失所有資料) + +```bash +# 停止並移除所有容器 +docker-compose down + +# 移除資料庫和上傳檔案 +rm -rf pgdata upload-data + +# 重新啟動 +docker-compose up -d +``` + +### 重置資料庫(保留上傳檔案) + +```bash +# 停止服務 +docker-compose down + +# 移除資料庫 +rm -rf pgdata + +# 重新啟動 +docker-compose up -d +``` + +## 日誌除錯 + +### 查看即時日誌 + +```bash +# 所有服務 +docker-compose logs -f + +# 僅 CodiMD +docker-compose logs -f codimd + +# 僅資料庫 +docker-compose logs -f database +``` + +### 查看最近錯誤 + +```bash +docker-compose logs --tail=50 codimd | grep -i error +docker-compose logs --tail=50 codimd | grep -i warn +``` + +## 升級問題 + +### 升級後無法啟動 + +**解決方案:** + +1. 備份資料: +```bash +# 備份資料庫 +docker-compose exec database pg_dump -U codimd codimd > backup.sql + +# 備份上傳檔案 +cp -r upload-data upload-data.backup +``` + +2. 恢復舊版本: +```bash +# 編輯 docker-compose.yml,改回舊版本 +# 然後重新啟動 +docker-compose down +docker-compose up -d +``` + +3. 查看升級說明: +- 檢查:https://github.com/hackmdio/codimd/releases + +## 需要更多幫助? + +- [CodiMD GitHub Issues](https://github.com/hackmdio/codimd/issues) +- [CodiMD 官方文件](https://hackmd.io/) +- [Docker 文件](https://docs.docker.com/)