중요한 변수를 숨겨야할 때, 사용할 수 있는 환경변수(env)설정
chatgpt의 api key는 사용하면 과금이 되기 때문에 프로그램에 노출되면 그대로 돈 털릴 위험이 있다.
비슷하게 노출되면 위험한 정보를 프로그램에 그대로 작성하기 꺼려지는 경우, 환경변수 env를 설정하여
해당 정보를 숨기면서 프로그램에 사용할 수 있다
1) 패키지 설치
pip install python-dotenv
2) 테스트를 위해 fastapi 서버 구축
env 설정 테스트를 위해 간단히 fastapi 서버를 구축해본다.
3) .env 파일 생성
.env 파일을 생성하고, 숨겨야하는 정보를 작성해준다.
여기에 SECRET_KEY = "taeyeon"해도 상관은 없는듯
하지마라는데도 있었는데 해도 에러가 없어
4) main.py에서 설정
from dotenv import load_dotenv
load_dotenv(".env파일 경로")를 수행하면, .env에서 설정해놓은 모든 환경변수를 로드한다
그리고 os.environ["환경변수이름"]을 수행하면, 해당 환경변수 이름에 맞는 값을 가져온다
혹은 os.getenv("환경변수이름")도 가능하다.
from fastapi import FastAPI
from dotenv import load_dotenv
import os
load_dotenv()
SECRET_KEY = os.environ["SECRET_KEY"]
#SECRET_KEY = os.getenv("SECRET_KEY")
app = FastAPI()
@app.get("/")
async def root():
return {"message":f"{SECRET_KEY}"}
서버를 실행하고 확인해본다면... 환경변수 값을 불러와서 잘 적용된다는 것을 확인할 수 있다.
load_dotenv()에 경로를 적지 않는다면.. 현재 경로의 .env를 불러오는듯
실제로 숨기는 것이 의미있을려면, .env 파일을 숨겨야 의미가 있겠지
실제 github에 push할때는 .gitignore에 .env를 기록하고, push해서 .env파일도 숨겨준다
그리고 실제로 push해서 확인해보면.. .env파일은 존재하지 않는다
그러면 해당 repo를 clone해서 가지고오면 어떨까
.env파일이 없는데... 이래도 동작할까?
이 상태에서 서버를 켜보면..
(requirements.txt)로 freeze했어야했는데.. 그걸 안했네;;
할수없이 다음을 차례대로 수
python -m venv venv
source venv/Scripts/activate
pip install fastapi[all]
pip install python-dotenv
uvicorn main:app --reload
헉 아무것도 없는데..??
당연히 아무것도 없다!
.env에 설정한 값들은 노출되면 안되는 값들이니까 gitignore에 설정하여 github에 올리지 않도록 하기 위함이며..
.env파일은 개인적으로 가지고 나중에 필요하면 가지고 있는 파일로 재생성해서 사용하든지 해야한다
그러니까 github에 올리는 순간 없어지는건 당연한것
그러면 배포할때는 어떻게해야함..?
배포서버에 들어가서 직접 생성해야하는듯..?
너무 귀찮을것 같은데
Fast API 에서 .env 파일로 환경변수 관리하기 (python-dotenv) (tistory.com)
[FastAPI/Python] FastAPI 프로젝트 배포하기 (tistory.com)
laravel - How do I recover a .env file that was gone after I commited a .gitignore - Stack Overflow
배포시 .env 처리 방법 - 인프런 | 질문 & 답변 (inflearn.com)