首先需要明确一个核心原则:切勿将API密钥直接硬编码在代码中——无论是本地调试还是生产环境,一旦泄露风险极高。最佳实践是通过环境变量进行注入,并且本地开发、生产部署以及不同框架(如Spring Boot、Python)都应遵循统一的配置方式。下面直接提供具体操作方法。
在开始操作之前,请务必明确:本地开发环境与生产服务器必须同时满足三个关键条件——密钥不得硬编码、不能泄露、多环境切换应流畅无阻。否则,配额耗尽或安全审计失败只是时间问题。
本地开发环境:使用shell环境变量临时注入
打开终端,直接输入以下命令:
【export GEMINI_API_KEY="your_actual_api_key_here"】
该命令仅在当前终端会话中生效,窗口关闭后即消失,非常适合临时调试单次请求。注意引号不能遗漏,否则空格会导致密钥被截断。验证方法:运行 echo $GEMINI_API_KEY,应完整输出密钥(不带引号)。
本地持久化配置:写入shell配置文件
方法一:追加到 ~/.zshrc(macOS默认)或 ~/.bashrc(Linux常用)
执行命令:echo 'export GEMINI_API_KEY="your_actual_api_key_here"' >> ~/.zshrc
然后立即加载:source ~/.zshrc
方法二:使用专用环境变量文件(推荐)
创建 ~/.gemini_env,写入 export GEMINI_API_KEY="...",再在 ~/.zshrc 末尾添加 source ~/.gemini_env。这样你可以单独对该文件设置权限 chmod 600,其他用户无法读取。
【切勿将该文件提交到Git仓库】——务必将 .gemini_env 和 *_env 添加到 .gitignore 中。
生产环境部署:通过系统级环境变量接管
第一步,登录服务器,切换为部署用户(例如 www-data 或 app)。
第二步,编辑该用户的 shell 配置文件(如 /home/app/.profile),追加 export GEMINI_API_KEY="..."。
第三步,确认服务管理器能够继承该变量。如果使用 systemd,需要在服务单元文件中显式声明:EnvironmentFile=/home/app/.gemini_env,并确保文件权限为 600。直接在 [Service] 段写 Environment=... 会导致密钥明文出现在 systemctl show 的输出中——非常不安全。
第四步,重载并重启服务:sudo systemctl daemon-reload && sudo systemctl restart your-app.service。
Spring Boot项目:通过application.yml桥接环境变量
在 src/main/resources/application.yml 中按如下方式配置:
gemini:
api-key: ${GEMINI_API_KEY}
对应的 Java 配置类必须标注 @ConfigurationProperties(prefix = "gemini"),并且启动类所在包需能被 Spring 扫描到。如果应用运行在 Docker 中,请务必在 docker run 命令中添加 -e GEMINI_API_KEY=$GEMINI_API_KEY,或在 docker-compose.yml 的 environment 字段中引用宿主机变量。
Python项目:用os.getenv安全读取
代码中采用如下方式:
import os
api_key = os.getenv("GEMINI_API_KEY")
if not api_key:
raise ValueError("GEMINI_API_KEY environment variable is not set")
这一步必须进行非空校验。切勿偷懒使用 os.environ.get("KEY", "default") 设置默认值——密钥不存在即属于致命错误,后续调用会直接返回 401,排查起来非常棘手。
