Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions scripts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# LifeContext 脚本管理

本目录包含项目的所有部署和管理脚本。

## 📁 脚本文件说明

### 部署脚本

#### Linux/macOS
```bash
./scripts/deploy.sh
```
- 一键启动所有服务(后端、前端、浏览器扩展)
- 自动检查依赖项(conda、Node.js、npm)
- 自动创建 conda 环境(如果不存在)
- 启动前清理旧进程
- 将服务 PID 保存到 `logs/` 目录

#### Windows
```bash
scripts\deploy.bat
```
- Windows 一键启动脚本
- 在新窗口中启动各个服务
- 支持自动依赖项安装

### 停止脚本

#### Linux/macOS
```bash
./scripts/stop.sh
```
- 停止所有运行中的服务
- 优先使用保存的 PID 文件停止进程
- 如果 PID 文件不存在,通过进程名称查找并停止

#### Windows
```bash
scripts\stop.bat
```
- 停止所有 LifeContext 服务窗口

## 🚀 使用方法

### Linux/macOS 用户

**启动所有服务:**
```bash
cd /path/to/lifetcontext
./scripts/deploy.sh
```

**停止所有服务:**
```bash
cd /path/to/lifetcontext
Comment on lines +49 to +55
Copy link

Copilot AI Nov 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrected spelling of 'lifetcontext' to 'lifecontext'.

Suggested change
cd /path/to/lifetcontext
./scripts/deploy.sh
```
**停止所有服务:**
```bash
cd /path/to/lifetcontext
cd /path/to/lifecontext
./scripts/deploy.sh

停止所有服务:

cd /path/to/lifecontext

Copilot uses AI. Check for mistakes.
./scripts/stop.sh
```

### Windows 用户

**启动所有服务:**
```cmd
cd C:\path\to\lifetcontext
scripts\deploy.bat
```

**停止所有服务:**
关闭对应的服务窗口或运行:
```cmd
scripts\stop.bat
```

## 📝 服务信息

启动后可访问以下地址:

- **后端 API**: http://localhost:8000
- **前端界面**: http://localhost:3000
- **扩展服务**: http://localhost:3001

## 📊 日志文件

所有日志文件保存在项目根目录的 `logs/` 文件夹中:

- `logs/backend.log` - 后端服务日志
- `logs/extension.log` - 浏览器扩展日志
- `logs/frontend.log` - 前端服务日志
- `logs/backend.pid` - 后端进程 ID
- `logs/extension.pid` - 扩展进程 ID
- `logs/frontend.pid` - 前端进程 ID

## 💡 常见问题

### 脚本权限错误
如果在 Linux/macOS 上遇到权限错误,运行:
```bash
chmod +x ./scripts/*.sh
```

### 相对路径问题
脚本会自动检测脚本位置并计算正确的项目根目录,无需担心执行路径问题。

### 查看实时日志
```bash
# 后端日志
tail -f logs/backend.log

# 扩展日志
tail -f logs/extension.log

# 前端日志
tail -f logs/frontend.log
```

## 🔧 脚本修改指南

### 路径变量
脚本使用以下变量来管理路径:
- **Linux/macOS**: `$PROJECT_ROOT` 自动计算为脚本目录的上一级
- **Windows**: `%PROJECT_ROOT%` 自动计算为脚本所在目录的上一级

所有路径都使用绝对路径引用,确保无论从哪个目录执行脚本都能正常工作。

18 changes: 11 additions & 7 deletions deploy.bat → scripts/deploy.bat
Original file line number Diff line number Diff line change
@@ -1,33 +1,37 @@
@echo off
chcp 65001 >nul

REM Get the script directory
for /f "tokens=*" %%A in ('cd') do set "PROJECT_ROOT=%%A"

echo ============================================================
echo 🚀 LifeContext One-Click Deployment Script (Windows)
echo ============================================================
echo.

:: Check if services are already running
REM Check if services are already running
tasklist /FI "IMAGENAME eq python.exe" 2>NUL | find /I /N "python.exe">NUL
if "%ERRORLEVEL%"=="0" (
echo [Warning] Python processes detected, services may already be running
echo.
)

:: 1. Start backend service
REM 1. Start backend service
echo [1/3] Starting backend service...
echo ============================================================
start "LifeContext Backend" cmd /k "cd backend && echo Activating conda environment... && conda activate lifecontext && echo Starting backend service... && python app.py"
start "LifeContext Backend" cmd /k "cd /d "%PROJECT_ROOT%\backend" && echo Activating conda environment... && conda activate lifecontext && echo Starting backend service... && python app.py"
timeout /t 3 >nul

:: 2. Start extension service
REM 2. Start extension service
echo [2/3] Starting extension service...
echo ============================================================
start "LifeContext Extension" cmd /k "cd Extension && echo Installing dependencies... && if not exist node_modules (npm install && echo Dependencies installed successfully) else (echo Dependencies already installed) && echo Extension service ready"
start "LifeContext Extension" cmd /k "cd /d "%PROJECT_ROOT%\Extension" && echo Installing dependencies... && if not exist node_modules (npm install && echo Dependencies installed successfully) else (echo Dependencies already installed) && echo Extension service ready"
timeout /t 3 >nul

:: 3. Start frontend service
REM 3. Start frontend service
echo [3/3] Starting frontend service...
echo ============================================================
start "LifeContext Frontend" cmd /k "cd frontend && echo Installing dependencies... && if not exist node_modules (npm install && echo Dependencies installed successfully && echo Starting frontend service... && npm run dev) else (echo Dependencies already installed && echo Starting frontend service... && npm run dev)"
start "LifeContext Frontend" cmd /k "cd /d "%PROJECT_ROOT%\frontend" && echo Installing dependencies... && if not exist node_modules (npm install && echo Dependencies installed successfully && echo Starting frontend service... && npm run dev) else (echo Dependencies already installed && echo Starting frontend service... && npm run dev)"
timeout /t 3 >nul

echo.
Expand Down
36 changes: 20 additions & 16 deletions deploy.sh → scripts/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# Check dependencies
check_dependencies() {
echo "🔍 Checking dependencies..."
Expand Down Expand Up @@ -46,16 +50,16 @@ check_conda_env() {
echo -e "${GREEN}✅ Found lifecontext environment${NC}"
else
echo -e "${YELLOW}⚠️ lifecontext environment not found, creating...${NC}"
cd backend
cd "$PROJECT_ROOT/backend"
conda env create -f environment.yml
cd ..
cd "$PROJECT_ROOT"
echo -e "${GREEN}✅ Environment created${NC}"
fi
echo ""
}

# Create logs directory
mkdir -p logs
mkdir -p "$PROJECT_ROOT/logs"

# Check dependencies
check_dependencies
Expand All @@ -73,33 +77,33 @@ sleep 2
# 1. Start backend service
echo "[1/3] Starting backend service..."
echo "============================================================"
cd backend
cd "$PROJECT_ROOT/backend"
source "$(conda info --base)/etc/profile.d/conda.sh"
conda activate lifecontext
nohup python app.py > ../logs/backend.log 2>&1 &
nohup python app.py > "$PROJECT_ROOT/logs/backend.log" 2>&1 &
BACKEND_PID=$!
echo -e "${GREEN}✅ Backend service started (PID: $BACKEND_PID)${NC}"
cd ..
cd "$PROJECT_ROOT"
sleep 3

# 2. Start browser extension service
echo "[2/3] Starting browser extension service..."
echo "============================================================"
cd Extension
cd "$PROJECT_ROOT/Extension"
if [ ! -d "node_modules" ]; then
echo "📦 First run, installing dependencies..."
npm install
fi
nohup node server.js > ../logs/extension.log 2>&1 &
nohup node server.js > "$PROJECT_ROOT/logs/extension.log" 2>&1 &
EXTENSION_PID=$!
echo -e "${GREEN}✅ Extension service started (PID: $EXTENSION_PID)${NC}"
cd ..
cd "$PROJECT_ROOT"
sleep 3

# 3. Start frontend service
echo "[3/3] Starting frontend service..."
echo "============================================================"
cd frontend
cd "$PROJECT_ROOT/frontend"
if [ ! -d "node_modules" ]; then
echo "📦 First run, installing dependencies..."
npm install
Expand All @@ -108,10 +112,10 @@ if [ ! -d "node_modules" ]; then
chmod +x node_modules/.bin/vite
fi
fi
nohup npm run dev > ../logs/frontend.log 2>&1 &
nohup npm run dev > "$PROJECT_ROOT/logs/frontend.log" 2>&1 &
FRONTEND_PID=$!
echo -e "${GREEN}✅ Frontend service started (PID: $FRONTEND_PID)${NC}"
cd ..
cd "$PROJECT_ROOT"
sleep 5

echo ""
Expand Down Expand Up @@ -143,15 +147,15 @@ echo " tail -f logs/extension.log"
echo " tail -f logs/frontend.log"
echo ""
echo " 4. Stop all services:"
echo " ./stop.sh"
echo " ./scripts/stop.sh"
echo " Or manually: kill $BACKEND_PID $EXTENSION_PID $FRONTEND_PID"
echo ""
echo "============================================================"

# Save PID to file for easy stop
echo "$BACKEND_PID" > logs/backend.pid
echo "$EXTENSION_PID" > logs/extension.pid
echo "$FRONTEND_PID" > logs/frontend.pid
echo "$BACKEND_PID" > "$PROJECT_ROOT/logs/backend.pid"
echo "$EXTENSION_PID" > "$PROJECT_ROOT/logs/extension.pid"
echo "$FRONTEND_PID" > "$PROJECT_ROOT/logs/frontend.pid"

# Wait for user input
echo ""
Expand Down
6 changes: 3 additions & 3 deletions stop.bat → scripts/stop.bat
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@ echo.
echo Stopping all LifeContext services...
echo.

:: Stop backend service
REM Stop backend service
echo [1/3] Stopping backend service...
for /f "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq LifeContext Backend*" /NH 2^>NUL ^| find "cmd.exe"') do (
taskkill /PID %%i /T /F >nul 2>&1
)
echo ✅ Backend service stopped

:: Stop extension service
REM Stop extension service
echo [2/3] Stopping extension service...
for /f "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq LifeContext Extension*" /NH 2^>NUL ^| find "cmd.exe"') do (
taskkill /PID %%i /T /F >nul 2>&1
)
echo ✅ Extension service stopped

:: Stop frontend service
REM Stop frontend service
echo [3/3] Stopping frontend service...
for /f "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq LifeContext Frontend*" /NH 2^>NUL ^| find "cmd.exe"') do (
taskkill /PID %%i /T /F >nul 2>&1
Expand Down
10 changes: 7 additions & 3 deletions stop.sh → scripts/stop.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"

# Stop service function
stop_service() {
local service_name=$1
Expand Down Expand Up @@ -46,13 +50,13 @@ stop_service() {
}

# Stop backend service
stop_service "Backend Service" "logs/backend.pid" "python.*app.py"
stop_service "Backend Service" "$PROJECT_ROOT/logs/backend.pid" "python.*app.py"

# Stop extension service
stop_service "Extension Service" "logs/extension.pid" "node.*server.js"
stop_service "Extension Service" "$PROJECT_ROOT/logs/extension.pid" "node.*server.js"

# Stop frontend service
stop_service "Frontend Service" "logs/frontend.pid" "vite"
stop_service "Frontend Service" "$PROJECT_ROOT/logs/frontend.pid" "vite"

echo ""
echo "============================================================"
Expand Down