服务器 不明文密码处理
总计:
- ① dotenv 零依赖的 Node.js 模块,主要作用是将环境变量从 .env 文件加载到 process.env 中
- ② 调用 dotenv.config() 方法即可加载环境变量
dotenv.config({ path: path.resolve(_dirname, './config') })
- ③ 项目外部的文件引入时,如果使用的是 docker,一定要在配置文件中将宿主机上的文件保存到容器中
volumes: - ../config.env:/config.env
- ④后续使用直接调用即可
process.env.CHECK_AUTH
deepseek 密码处理
1、在服务器添加文件来保存密码
vi config.env // 创建文件
npm install dotenv
在工程中 安装 dotenv 处理工程外文件
npm i dotenv
两个路径问题
-
Nextjs 构建后文件结构、路径可能会有变化
- 在 Next.js 项目里,.next 目录是构建输出目录,当项目构建之后,代码的执行环境和文件结构会有所改变,__dirname 指向的可能就是 .next 目录下的某个子目录,而不是你原本项目文件所在的目录
-
服务器构建镜像、容器部署,文件系统结构可能发生变化
- config.env 文件在宿主机上位于项目根目录之外,但在容器内,文件系统的布局可能发生了变化
- 容器有自己独立的文件系统,path.resolve 解析路径是基于容器内的文件系统,所以可能找不到正确的 config.env 文件
【step1:docker-compose.yml 文件】
volumes:
- ../config.env:/app/config.env
# 将宿主机上的 config.env 挂载到容器内的 /app/config.env
【step2:next.config.ts 文件配置 env】
import dotenv from 'dotenv';
// dotenv.config({ path: '../config.env' }); 路径:/config.env
dotenv.config({ path: path.resolve(__dirname, './config.env') }) // 路径:/app/config.env
export default {
env: {
DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY,
CHECK_AUTH: process.env.CHECK_AUTH,
},
}
【step3:在 request.ts 中创建 AI 请求】
import OpenAI from 'openai'
const apiKey = process.env.DEEPSEEK_API_KEY || 'a'; // 【核心】
const openai = new OpenAI({
baseURL: 'https://api.deepseek.com',
apiKey,
dangerouslyAllowBrowser: true // 客户端发起请求需要配置
})
export async function AIPOST(messages: MessageProp[]) {
try {
const completion = await openai.chat.completions.create({
messages: messages,
model: 'deepseek-chat',
response_format: {
type: 'json_object',
},
})
return completion.choices[0].message.content // 返回 API 响应给客户端
} catch (error) {
console.error('Error calling DeepSeek API:', error)
}
}