forked from joseph/notebooklm-api
113 lines
4.2 KiB
Bash
Executable File
113 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# ── Màu terminal ──────────────────────────────────────────────────────────────
|
|
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
|
|
ok() { echo -e "${GREEN}✓${NC} $1"; }
|
|
warn() { echo -e "${YELLOW}!${NC} $1"; }
|
|
fail() { echo -e "${RED}✗${NC} $1"; exit 1; }
|
|
hdr() { echo -e "\n${GREEN}── $1 ──${NC}"; }
|
|
|
|
echo ""
|
|
echo " NotebookLM API — Setup"
|
|
echo " ======================"
|
|
|
|
# ── 1. Node.js ────────────────────────────────────────────────────────────────
|
|
hdr "Kiểm tra Node.js"
|
|
|
|
if ! command -v node &>/dev/null; then
|
|
fail "Node.js chưa được cài. Tải tại https://nodejs.org (cần v18+)"
|
|
fi
|
|
|
|
NODE_VER=$(node -e "process.exit(parseInt(process.versions.node))")
|
|
# node -e exit trick: dùng node để lấy version number
|
|
NODE_MAJOR=$(node -e "console.log(parseInt(process.versions.node))")
|
|
if [ "$NODE_MAJOR" -lt 18 ]; then
|
|
fail "Node.js $NODE_MAJOR quá cũ. Cần v18 trở lên."
|
|
fi
|
|
ok "Node.js $(node -v)"
|
|
|
|
# ── 2. Chrome ────────────────────────────────────────────────────────────────
|
|
hdr "Kiểm tra Google Chrome"
|
|
|
|
CHROME_FOUND=false
|
|
CHROME_PATHS=(
|
|
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
"/Applications/Chromium.app/Contents/MacOS/Chromium"
|
|
"/usr/bin/google-chrome"
|
|
"/usr/bin/google-chrome-stable"
|
|
"/usr/bin/chromium-browser"
|
|
"/usr/bin/chromium"
|
|
)
|
|
|
|
for p in "${CHROME_PATHS[@]}"; do
|
|
if [ -f "$p" ]; then
|
|
ok "Chrome: $p"
|
|
CHROME_FOUND=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$CHROME_FOUND" = false ]; then
|
|
warn "Không tìm thấy Chrome — Puppeteer sẽ dùng Chromium tích hợp"
|
|
warn "Khuyến nghị cài Google Chrome: https://www.google.com/chrome"
|
|
fi
|
|
|
|
# ── 3. npm install ────────────────────────────────────────────────────────────
|
|
hdr "Cài đặt dependencies"
|
|
|
|
if [ -d "node_modules" ]; then
|
|
ok "node_modules đã tồn tại — bỏ qua npm install"
|
|
warn "Chạy 'npm install' thủ công nếu cần cập nhật packages"
|
|
else
|
|
npm install
|
|
ok "npm install xong"
|
|
fi
|
|
|
|
# ── 4. .env ───────────────────────────────────────────────────────────────────
|
|
hdr "Cấu hình môi trường"
|
|
|
|
if [ ! -f ".env" ]; then
|
|
if [ -f ".env.example" ]; then
|
|
cp .env.example .env
|
|
ok ".env tạo từ .env.example"
|
|
else
|
|
cat > .env <<'EOF'
|
|
PORT=3456
|
|
HEADLESS=false
|
|
# CHROME_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
|
|
API_KEY=
|
|
EOF
|
|
ok ".env tạo mới với cấu hình mặc định"
|
|
fi
|
|
else
|
|
ok ".env đã tồn tại"
|
|
fi
|
|
|
|
# ── 5. chrome-profile ─────────────────────────────────────────────────────────
|
|
if [ ! -d "chrome-profile" ]; then
|
|
mkdir -p chrome-profile
|
|
ok "Thư mục chrome-profile/ tạo mới"
|
|
fi
|
|
|
|
# ── 6. Kết quả ────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo -e "${GREEN}Setup hoàn tất!${NC}"
|
|
echo ""
|
|
echo " Khởi động server:"
|
|
echo " npm start"
|
|
echo ""
|
|
echo " Sau khi server chạy, đăng nhập Google:"
|
|
echo " curl -X POST http://localhost:3456/api/auth/login"
|
|
echo ""
|
|
echo " Swagger UI: http://localhost:3456/docs"
|
|
echo " Tài liệu: API.md"
|
|
echo ""
|
|
|
|
# ── 7. Hỏi có muốn start ngay không ─────────────────────────────────────────
|
|
read -r -p "Khởi động server ngay bây giờ? [y/N] " REPLY
|
|
if [[ "$REPLY" =~ ^[Yy]$ ]]; then
|
|
echo ""
|
|
npm start
|
|
fi
|