diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..38ec379 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules +npm-debug.log +.env +.git +database/app.db +token.json +plans/ +UI.md +screenshots/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..57b5ed4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +# 使用 Node.js 18 LTS 版本 +FROM node:18-alpine + +# 设置工作目录 +WORKDIR /app + +# 复制 package.json 和 package-lock.json +COPY package*.json ./ + +# 安装依赖 +RUN npm ci --only=production + +# 复制项目文件 +COPY . . + +# 创建数据库目录 +RUN mkdir -p database + +# 暴露端口 +EXPOSE 3000 + +# 启动命令 +CMD ["npm", "start"] diff --git a/README.md b/README.md index 9ddc46c..6bcb5c4 100644 --- a/README.md +++ b/README.md @@ -53,14 +53,34 @@ ## 快速开始 -### 1. 安装依赖 +### 方式一:Docker 部署(推荐) + +使用 Docker Compose 一键部署: + +```bash +# 克隆项目 +git clone https://github.com/lulistart/gpt2api-node.git +cd gpt2api-node + +# 启动服务 +docker-compose up -d + +# 查看日志 +docker-compose logs -f +``` + +服务将在 `http://localhost:3000` 启动。 + +### 方式二:本地部署 + +#### 1. 安装依赖 ```bash cd gpt2api-node npm install ``` -### 2. 初始化数据库 +#### 2. 初始化数据库 ```bash npm run init-db @@ -70,7 +90,7 @@ npm run init-db - 用户名:`admin` - 密码:`admin123` -### 3. 启动服务 +#### 3. 启动服务 ```bash npm start @@ -82,7 +102,7 @@ npm start npm run dev ``` -### 4. 访问管理后台 +#### 4. 访问管理后台 打开浏览器访问:`http://localhost:3000/admin` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b18eac6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.8' + +services: + gpt2api: + build: . + container_name: gpt2api-node + restart: unless-stopped + ports: + - "3000:3000" + volumes: + - ./database:/app/database + - ./models.json:/app/models.json + environment: + - PORT=3000 + - LOAD_BALANCE_STRATEGY=round-robin + - SESSION_SECRET=${SESSION_SECRET:-change-this-secret-in-production} + command: sh -c "npm run init-db && npm start" + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s