Hướng Dẫn Chi Tiết Sử Dụng File .env
Trong Ứng Dụng Spring Boot Triển Khai Trên Docker
Trong quá trình phát triển và triển khai ứng dụng, việc quản lý các biến môi trường (environment variables) hết sức quan trọng. Biến môi trường giúp bạn tùy chỉnh cấu hình ứng dụng mà không cần phải thay đổi mã nguồn, đồng thời đảm bảo an toàn thông tin nhạy cảm bằng cách không lưu trữ chúng trực tiếp trong mã nguồn. Đặc biệt, khi làm việc với Spring Boot và Docker, việc sử dụng file .env
là một cách tiếp cận phổ biến và hiệu quả để quản lý các biến môi trường. Bài viết này sẽ hướng dẫn bạn chi tiết về cách sử dụng file .env
cho dự án Spring Boot với Docker, giúp bạn dễ dàng quản lý và triển khai ứng dụng.
1. Giới Thiệu Về Sử Dụng File .env
Trong Ứng Dụng Spring Boot
Trong quá trình phát triển ứng dụng, việc tách biệt cấu hình ứng dụng khỏi mã nguồn là một thực hành tốt, giúp bạn dễ dàng quản lý và thay đổi cấu hình cho các môi trường khác nhau như development, staging, và production. Điều này rất cần thiết khi triển khai ứng dụng trên các môi trường có cấu hình khác nhau như cơ sở dữ liệu, địa chỉ máy chủ, và thông tin xác thực.
Spring Boot cho phép bạn quản lý các biến môi trường thông qua file .env
, giúp định nghĩa các biến và giá trị tương ứng. Ứng dụng Spring Boot sẽ tự động đọc và sử dụng các giá trị này để cấu hình đúng với môi trường triển khai.
2. Hướng Dẫn Cấu Hình Và Sử Dụng File .env
Trong Ứng Dụng Spring Boot Triển Khai Trên Docker
Trong phần này, chúng ta sẽ xem xét một ví dụ cụ thể về cách sử dụng file .env
để cấu hình và triển khai một ứng dụng Spring Boot trên Docker.
2.1. Cấu Trúc Dự Án Mẫu
Dự án Spring Boot mẫu của chúng ta có cấu trúc như sau:
- application.yaml: File cấu hình chính của ứng dụng, sử dụng các biến môi trường để cấu hình kết nối cơ sở dữ liệu.
- .env: File chứa các biến môi trường chung cho ứng dụng.
- .env.dev: File chứa các biến môi trường cho môi trường phát triển (development).
- .env.prod: File chứa các biến môi trường cho môi trường production.
- Dockerfile: File định nghĩa cách build image Docker cho ứng dụng.
- docker-compose.yaml: File định nghĩa cách triển khai ứng dụng trên Docker với Docker Compose.
2.2. Cấu Hình Biến Môi Trường Trong application.yaml
Trong file application.yaml
, bạn có thể sử dụng cú pháp ${BIEN_MOI_TRUONG}
để tham chiếu đến các biến môi trường. Ví dụ:
yaml
server:
port: ${PORT:8080}
spring:
datasource:
url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASS}
2.3. Quản Lý Biến Môi Trường Trong File .env
Các biến môi trường chung cho ứng dụng được định nghĩa trong file .env
như sau:
NAME=ENV_DEMO
PORT=8011
Ngoài ra, bạn cũng cần định nghĩa các biến môi trường cho từng môi trường cụ thể trong các file tương ứng:
.env.dev
DB_URL=jdbc:postgresql://10.147.19.178:5432/postgres
DB_USER=postgres
DB_PASS=123456789
.env.prod
DB_URL=jdbc:postgresql://10.147.19.40:5432/env_dev
DB_USER=meomeo
DB_PASS=meocoder@1001
2.4. Cấu Hình Dockerfile
Và docker-compose.yaml
File Dockerfile định nghĩa cách build image Docker cho ứng dụng Spring Boot như sau:
FROM eclipse-temurin:17-jre-alpine
LABEL author="Nguyen"
COPY ./target/*.jar ./app.jar
ENV TZ=Asia/Ho_Chi_Minh
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENTRYPOINT ["java", "-jar", "./app.jar"]
File docker-compose.yaml như sau:
version: '3.7'
services:
app:
container_name: env_demo
build: .
volumes:
- /home/web/log:/log
ports:
- ${PORT}:${PORT}
env_file:
- .env
- .env.dev
2.5. Xây Dựng Và Chạy Ứng Dụng Với Docker Compose
Sau khi cấu hình xong, bạn có thể xây dựng file jar của ứng dụng tương ứng bằng lệnh mvn clean install
, sau đó chạy lệnh docker-compose up -d
để build image Docker và khởi chạy container.
2.6. Kiểm Tra Kết Quả
Khi container khởi chạy, bạn có thể kiểm tra log để xem ứng dụng đang chạy với cấu hình nào bằng lệnh docker logs <container_name>
. Nếu ứng dụng được triển khai với môi trường phát triển (dev), log sẽ hiển thị rằng ứng dụng đang chạy trên cổng 8011:
Việc sử dụng file .env
giúp chúng ta dễ dàng quản lý và thay đổi cấu hình cho các môi trường khác nhau mà không làm ảnh hưởng đến mã nguồn. Để thực hành chi tiết hơn, bạn có thể tham khảo repo mẫu tại đây. Trong repo này, tôi đã cung cấp một ví dụ đầy đủ về cách sử dụng file .env
để cấu hình và triển khai một ứng dụng Spring Boot trên Docker. Hãy tự mình thử nghiệm và trải nghiệm quy trình làm việc với file .env
trong môi trường thực tế.
source: viblo