Graduate OS Docs
Research · AI · Career
📦 操作文档

项目安装

源码、.env、依赖、Prisma、管理员与构建

项目安装#

源码、.env、依赖、Prisma、管理员与构建

7. 上传最终源码#

进入:

宝塔 → 文件 → /www/wwwroot/graduate-os

上传最终源码 ZIP,解压到当前目录。

最终必须直接看到:

/www/wwwroot/graduate-os/package.json
/www/wwwroot/graduate-os/package-lock.json
/www/wwwroot/graduate-os/app/
/www/wwwroot/graduate-os/components/
/www/wwwroot/graduate-os/lib/
/www/wwwroot/graduate-os/prisma/
/www/wwwroot/graduate-os/.env.example
/www/wwwroot/graduate-os/ecosystem.config.cjs

错误:

/www/wwwroot/graduate-os/Graduate-OS/package.json

正确:

/www/wwwroot/graduate-os/package.json

如果多套一层目录,用宝塔文件管理器把内层文件移动到项目根目录。


8. 创建运行目录#

终端:

cd /www/wwwroot/graduate-os
mkdir -p storage/papers logs
chmod 750 storage storage/papers logs

不要:

chmod -R 777 storage

9. 创建 .env#

宝塔文件管理器复制:

.env.example

为:

.env

也可以:

cd /www/wwwroot/graduate-os
cp .env.example .env

然后在宝塔文件编辑器打开:

/www/wwwroot/graduate-os/.env

推荐模板:

DATABASE_URL="mysql://graduate_os:你的数据库密码@127.0.0.1:3306/graduate_os"

# 官方 OpenAI 可留空;如果从网站后台配置 Provider,不必在这里填写真实 Key。
OPENAI_API_KEY=""
OPENAI_MODEL="gpt-5.6"
OPENAI_PDF_DETAIL="high"

# 用于加密数据库中的 AI / SerpApi Key。生成一次后永久保留。
SECRET_ENCRYPTION_KEY="填写64位十六进制字符串"

# 后台配置 SerpApi 时可以留空;这里保留兼容回退。
SERPAPI_API_KEY=""

ADMIN_USERNAME="你的系统管理员用户名"
ADMIN_PASSWORD="首次创建管理员时使用的强密码"

SESSION_SECRET="填写随机长字符串"
APP_URL="https://xjtu.example.com"
UPLOAD_DIR="/www/wwwroot/graduate-os/storage/papers"
MAX_PDF_SIZE_MB="40"

AI_ENABLED="true"
SCHOLAR_ENABLED="true"
RADAR_MAX_RESULTS_PER_KEYWORD="20"

PORT="3000"
BACKUP_DIR="/backup/graduate-os"

9.1 生成 SESSION_SECRET#

openssl rand -hex 48

复制输出到:

SESSION_SECRET="..."

9.2 生成 SECRET_ENCRYPTION_KEY#

openssl rand -hex 32

复制输出到:

SECRET_ENCRYPTION_KEY="..."

这个值以后不要重新生成#

后台保存的:

  • OpenAI API Key
  • OpenAI Compatible / Sub2API Key
  • SerpApi Key

会使用它加密。更换该密钥会导致已经保存的密钥无法解密。

9.3 true 拼写必须正确#

正确:

AI_ENABLED="true"
SCHOLAR_ENABLED="true"

错误:

AI_ENABLED="ture"
SCHOLAR_ENABLED="ture"

ture 会被程序视为未启用。

9.4 权限#

cd /www/wwwroot/graduate-os
chmod 600 .env

10. 安装 Node 依赖#

cd /www/wwwroot/graduate-os
npm ci

最终整合包已经把真实部署中缺失过的:

server-only@0.0.1

正式写入 package.jsonpackage-lock.json,因此新部署不需要再手动 npm install server-only

检查:

npm ls server-only --depth=0

应看到:

server-only@0.0.1

如果 npm ci 只出现 npm WARN,通常不是失败;真正失败会出现 npm ERR!


11. 初始化 Prisma 数据库#

执行:

cd /www/wwwroot/graduate-os
npx prisma generate
npx prisma migrate deploy
npx prisma migrate status

当前最终包包含:

20260824000000_init
20260826000000_phase2_task1_ai_provider
20260826010000_phase2_task2_search_provider
20260826020000_phase2_task4_interview_link
20260826030000_phase2_task5b_question_analysis
20260826040000_phase2_task6_question_practice

最后应看到数据库 schema 已是最新。

常见数据库错误#

P1000 / Authentication failed#

数据库账号或密码错误。

检查 .env

DATABASE_URL="mysql://graduate_os:正确密码@127.0.0.1:3306/graduate_os"

P1001#

MySQL 未启动、地址/端口错误。

P1045#

数据库用户名或密码错误。

绝对不要为了解决连接错误执行:

npx prisma migrate reset
npx prisma db push --force-reset

12. 创建唯一管理员#

执行:

cd /www/wwwroot/graduate-os
npm run admin:create

创建成功后,在 .env 中把:

ADMIN_PASSWORD=""

清空,避免首次密码长期留在配置中。

系统不开放注册,只有一个管理员。


13. 构建 standalone#

cd /www/wwwroot/graduate-os
npm run typecheck
npm run lint
npm run build

npm run build 已包含:

Prisma generate
Next.js build
standalone 资源整理
public/static 同步

检查:

test -f .next/standalone/server.js && echo "server OK"
test -d .next/standalone/.next/static && echo "static OK"
test -d .next/standalone/public && echo "public OK"

应该看到:

server OK
static OK
public OK