Direnv: ‘Cứu cánh’ giúp tự động hóa biến môi trường theo từng dự án trên Linux

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Khi biến môi trường trở thành “mê cung” rắc rối

Nếu bạn đang quản lý 5-7 dự án trên cùng một máy Linux, việc nhầm lẫn API Key hay Database URL là chuyện xảy ra như cơm bữa. Dự án A cần truy cập DB Staging, dự án B lại cần API Key Production của Stripe. Thông thường, anh em hay tiện tay gõ export STRIPE_KEY=sk_test_... trực tiếp vào terminal để làm cho nhanh.

Thực tế thường khắc nghiệt hơn lý thuyết. Sáng sớm mới nhâm nhi ly cafe, bạn gõ một đống lệnh export để debug dự án A. 15 phút sau, sếp báo lỗi gấp ở dự án B. Bạn cd sang thư mục mới, chạy lệnh deploy và chợt nhận ra biến môi trường của dự án A vẫn còn “nằm vùng” trong session terminal đó. Hậu quả là dữ liệu nhảy lung tung, thậm chí ghi đè cấu hình sai lệch hoàn toàn.

Bản thân mình từng suýt bay màu database 500GB chỉ vì biến ENVIRONMENT=PRODUCTION còn sót lại từ phiên làm việc trước. Do lười không tắt terminal cũ, mình đã chạy script migrate nhầm lên server thật thay vì máy local. May mắn là mình kịp rollback trong vòng 2 phút, nếu không chắc giờ này đã phải đi rải CV khắp nơi. Sau cú phốt đó, mình tìm đến direnv và nó thực sự thay đổi cách mình làm việc.

Direnv là gì và tại sao bạn nên dùng nó ngay?

Hiểu nôm na, direnv là một plugin cho shell (như Bash, Zsh, Fish) giúp tự động hóa việc thiết lập môi trường dựa trên thư mục hiện hành. Khi bạn cd vào thư mục có file .envrc, direnv sẽ tự động “bơm” các biến đó vào. Khi bạn thoát ra thư mục cha, nó sẽ tự động “gỡ” toàn bộ các biến đó đi như chưa từng xuất hiện.

Cái hay của direnv là sự tách biệt hoàn toàn. Bạn không bao giờ phải lo dự án này làm “ô nhiễm” dự án kia. Khác với các thư viện như python-dotenv hay dotenv (Node.js) vốn phụ thuộc vào code ứng dụng, direnv hoạt động ở tầng shell. Điều này đồng nghĩa với việc nó hỗ trợ mọi công cụ, từ script shell, lệnh CLI cho đến các trình quản lý database.

Cài đặt direnv trên Linux trong 1 nốt nhạc

Việc cài đặt direnv rất nhanh vì hầu hết các repo Linux chính thức đều đã có sẵn package này.

Bước 1: Cài đặt package

Với anh em dùng Ubuntu, Debian hoặc Linux Mint:

sudo apt update
sudo apt install direnv -y

Dành cho các hệ thống Fedora, CentOS hoặc AlmaLinux:

sudo dnf install direnv -y

Riêng với Arch Linux, bạn dùng lệnh quen thuộc:

sudo pacman -S direnv

Bước 2: Cấu hình Shell Hook

Để direnv tự kích hoạt mỗi khi bạn chuyển thư mục, bạn cần thêm một dòng lệnh vào file cấu hình shell. Đây là bước cực kỳ quan trọng.

Dành cho Bash: Bạn thêm dòng sau vào cuối file ~/.bashrc:

eval "$(direnv hook bash)"

Dành cho Zsh (anh em dùng Oh My Zsh): Thêm vào cuối file ~/.zshrc:

eval "$(direnv hook zsh)"

Cuối cùng, hãy gõ source ~/.bashrc hoặc khởi động lại terminal để mọi thứ bắt đầu hoạt động.

Ứng dụng thực tế: Case study với dự án web

Hãy thử thiết lập một kịch bản thực tế để thấy direnv giúp bạn tiết kiệm 10-15 phút switch context mỗi ngày như thế nào.

Tạo môi trường riêng cho dự án

Giả sử bạn có dự án itfromzero-app:

mkdir ~/itfromzero-app
cd ~/itfromzero-app

Thay vì export thủ công, hãy tạo file .envrc và lưu cấu hình vào đó:

echo "export DB_USER=admin_dev" >> .envrc
echo "export DEBUG=true" >> .envrc
echo "export API_TOKEN=secret_123" >> .envrc

Cấp quyền bảo mật

Ngay khi file được tạo, terminal sẽ báo lỗi: “direnv: error .envrc is blocked”. Đây là cơ chế bảo mật để ngăn kẻ xấu tự động chạy script độc hại khi bạn vô tình cd vào một thư mục lạ. Để xác nhận file này an toàn, hãy gõ:

direnv allow .

Thông báo direnv: loading… sẽ hiện ra. Lúc này, toàn bộ biến đã sẵn sàng để sử dụng.

Kiểm tra sự kỳ diệu

echo $DB_USER để thấy kết quả admin_dev. Thử gõ cd .. thoát ra ngoài, rồi echo $DB_USER lần nữa, bạn sẽ thấy biến đó biến mất hoàn toàn. Môi trường của bạn luôn sạch sẽ và cực kỳ chuyên nghiệp.

Mẹo nhỏ để dùng direnv chuyên nghiệp hơn

  • Nguyên tắc vàng: Đừng commit .envrc. File này thường chứa mật khẩu và token quan trọng. Hãy đưa nó vào .gitignore và chỉ commit file .envrc.example làm mẫu cho team.
  • Tự động bật Virtualenv cho Python: Thay vì gõ source venv/bin/activate mỗi lần, hãy thêm dòng layout python vào .envrc. Direnv sẽ tự kích hoạt môi trường ảo ngay khi bạn vào thư mục.
  • Tận dụng file .env cũ: Nếu dự án đã có sẵn file .env từ Docker, bạn chỉ cần ghi dotenv vào file .envrc. Direnv sẽ tự động “nhặt” toàn bộ biến từ đó mà không cần copy-paste thủ công.

Lời kết

Quản lý biến môi trường thủ công giống như việc bạn đi dây điện trong nhà mà không có cầu chì. Lúc bình thường thì không sao, nhưng khi có sự cố thì hậu quả cực kỳ khó lường. Với direnv, bạn đã trang bị một cái “cầu chì” thông minh, giúp tách biệt dự án một cách triệt để.

Công cụ này nhỏ gọn nhưng lại giúp mình tránh được những lỗi ngớ ngẩn và tiết kiệm hàng giờ đồng hồ gõ lệnh lặp đi lặp lại. Nếu bạn làm việc trên Linux thường xuyên, hãy cài đặt direnv ngay hôm nay. Bạn sẽ thấy hối hận vì đã không biết đến nó sớm hơn.

Share: