服务器 不明文密码处理

Posted by CodingWithAlice on March 1, 2025

服务器 不明文密码处理

总计:

  • ① 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)
    }
}