웹사이트 검색

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

또한 direnvstdlib(direnv-stdlib)를 사용하여 에 새 디렉토리를 쉽게 추가할 수 있는 여러 기능을 제공합니다. PATH 등 훨씬 더 많은 작업을 수행할 수 있습니다.

사용 가능한 모든 기능에 대한 문서를 찾으려면 direnv-stdlib 수동 입력 페이지를 확인하세요.

man direnv-stdlib

그게 우리가 당신을 위해 가지고 있던 전부입니다! 질문이나 공유할 생각이 있으면 아래 피드백 양식을 사용하세요.