Direnv - Linux에서 프로젝트별 환경 변수 관리
direnv는 Linux 및 macOS와 같은 UNIX 운영 체제의 셸을 위한 멋진 오픈 소스 확장입니다. 단일 정적 실행 파일로 컴파일되며 bash, zsh, tcsh 및 fish와 같은 셸을 지원합니다.
direnv의 주요 목적은 ~/.profile
또는 관련 셸 시작 파일을 복잡하게 하지 않고 프로젝트별 환경 변수를 허용하는 것입니다. 현재 디렉터리에 따라 환경 변수를 로드 및 언로드하는 새로운 방법을 구현합니다.
이는 12factor 앱(서비스형 소프트웨어 앱을 구축하기 위한 방법론) 환경 변수를 로드하고, 프로젝트별로 격리된 개발 환경을 만들고, 배포를 위한 비밀을 로드하는 데 사용됩니다. 또한 rbenv, pyenv 및 phpenv와 유사한 다중 버전 설치 및 관리 솔루션을 구축하는 데 사용할 수 있습니다.
그렇다면 direnv는 어떻게 작동하나요?
셸이 명령 프롬프트를 로드하기 전에 direnv는 현재(pwd 명령을 사용하여 표시할 수 있음) 디렉터리와 상위 디렉터리에 .envrc
파일이 있는지 확인합니다. 확인 프로세스는 신속하며 각 프롬프트에서 확인할 수 없습니다.
적절한 권한이 있는 .envrc
파일을 찾으면 이를 bash 하위 셸에 로드하고 내보낸 모든 변수를 캡처하여 현재 셸에서 사용할 수 있게 만듭니다.
Linux 시스템에 direnv 설치
대부분의 Linux 배포판에서 direnv 패키지는 표시된 대로 시스템 패키지 관리자를 사용하여 기본 저장소에서 설치할 수 있습니다.
sudo apt install direnv #Debian,Ubuntu and Mint
sudo dnf install direnv #Fedora
Red Hat Enterprise Linux(RHEL) 및 CentOS와 같은 다른 배포판이나 스냅을 지원하는 배포판에서는 >스냅. 이를 위해서는 시스템에 snapd가 설치되어 있어야 합니다.
sudo snap install direnv
Bash 쉘에 direnv를 연결하는 방법
direnv를 설치한 후 현재 Linux 셸에 연결해야 합니다. 예를 들어 Bash의 경우 ~/.bashrc
파일 끝에 다음 줄을 추가합니다.
rvm, git-prompt 및 프롬프트를 조작하는 기타 셸 확장 프로그램 뒤에도 표시되는지 확인하세요.
eval "$(direnv hook bash)"
ZSH 쉘의 경우
~/.zshrc
파일 끝에 다음 줄을 추가합니다.
eval "$(direnv hook zsh)"
생선 껍질의 경우
~/.config/fish/config.fish
파일 끝에 다음 줄을 추가합니다.
eval (direnv hook fish)
그런 다음 활성 터미널 창을 닫고 새 셸을 열거나 표시된 대로 파일을 소스로 지정합니다.
source ~/.bashrc
source ~/.zshrc
source ~/.config/fish/config.fish
Linux 쉘에서 direnv를 사용하는 방법
direnv의 작동 방식을 보여주기 위해 tecmint_projects
라는 새 디렉터리를 만들고 그 디렉터리로 이동합니다.
mkdir ~/tecmint_projects
cd tecmint_projects/
다음으로, 명령줄에서 TEST_VARIABLE
이라는 새 변수를 생성해 보겠습니다. 이 변수가 에코되면 값은 비어 있어야 합니다.
echo $TEST_VARIABLE
이제 direnv에 의해 로드될 Bash 코드가 포함된 새로운 .envrc
파일을 생성하겠습니다. 또한 echo 명령과 출력 리디렉션 문자 (>)
를 사용하여 "export the TEST_VARIABLE=tecmint" 줄을 추가하려고 합니다.
echo export TEST_VARIABLE=tecmint > .envrc
기본적으로 보안 메커니즘은 .envrc
파일 로드를 차단합니다. 안전한 파일임을 알고 있으므로 다음 명령을 실행하여 해당 콘텐츠를 승인해야 합니다.
direnv allow .
이제 .envrc
파일의 내용을 로드할 수 있으므로 이전에 설정한 TEST_VARIABLE
값을 확인해 보겠습니다.
echo $TEST_VARIABLE
tecmint_project
디렉토리를 종료하면 direnv가 언로드되고 TEST_VARIABLE
값을 다시 한 번 확인하면 비어 있어야 합니다.
cd ..
echo $TEST_VARIABLE
tecmint_projects 디렉터리로 이동할 때마다 .envrc
파일이 다음 스크린샷과 같이 로드됩니다.
cd tecmint_projects/
특정 .envrc
의 승인을 취소하려면 deny 명령을 사용하세요.
direnv deny . #in current directory
OR
direnv deny /path/to/.envrc
자세한 내용 및 사용 지침은 direnv 매뉴얼 페이지를 참조하세요.
man direnv
또한 direnv는 stdlib(direnv-stdlib)를 사용하여 에 새 디렉토리를 쉽게 추가할 수 있는 여러 기능을 제공합니다. PATH 등 훨씬 더 많은 작업을 수행할 수 있습니다.
사용 가능한 모든 기능에 대한 문서를 찾으려면 direnv-stdlib 수동 입력 페이지를 확인하세요.
man direnv-stdlib
그게 우리가 당신을 위해 가지고 있던 전부입니다! 질문이나 공유할 생각이 있으면 아래 피드백 양식을 사용하세요.