Nếu tôi sử dụng biến môi trường trong cấu hình nginx và nginx được định cấu hình để chỉ phục vụ các tệp tĩnh (html, js, css - ví dụ: ứng dụng AngularJs), có cách nào tôi có thể sử dụng biến môi trường trong tệp JS mà nginx phục vụ ? Hoặc là cách duy nhất để làm điều này để chạy một máy chủ không tĩnh, ví dụ: io.js, php, v.v.
Btw bạn không thể sử dụng các biến môi trường tự nhiên trong cấu hình của nginx.
Khi tôi nói về các vars môi trường trong cấu hình nginx, ý tôi là như trong bài viết này: Làm thế nào tôi có thể sử dụng các biến môi trường trong Nginx.conf nơi họ sử dụng env APP_WEB_1_PORT_5000_TCP_ADDR;
và$ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"};
Giải thích chính xác trường hợp sử dụng của bạn
Trường hợp sử dụng cụ thể của tôi là tôi có ứng dụng AngularJS được hỗ trợ bởi nginx trong một container docker. Ứng dụng này là "Ứng dụng một trang" tiêu thụ API chạy trên một hệ thống khác hoàn toàn. Hiện tại tôi chạy một bộ chứa docker khác nhau giữa sản xuất và dàn dựng vì ứng dụng có một số cấu hình khác nhau, ví dụ mã Google-Analtyics. Dữ liệu dành riêng cho môi trường này được lưu giữ trong một config.js
tệp và các giá trị hiện được mã hóa cứng, một giá trị cho master
nhánh trong git và giá trị khác nhau cho staging
nhánh. Tôi muốn thay đổi thiết kế để tôi có thể sử dụng cùng một container cho cả sản xuất và dàn dựng. Tôi muốn chuyển var ENV vào container khi tôi chạy nó ( docker run -e GACODE=UA-12345-6 ...
) và nginx sử dụng var ENV (thông qua env GACODE;
và $ENV{"GACODE"}
vì vậyconfig.js
tệp có thể sử dụng mã GoogleAnaltyics được truyền vào, thay vì mã hóa chúng). Tôi không biết liệu điều này có thể hay không (do đó là câu hỏi;)). Chỉ sử dụng nginx làm cho bộ chứa của tôi trở thành một quy trình đơn lẻ, trong khi nếu tôi phải sử dụng io.js thì tôi sẽ cần nhiều bộ chứa được liên kết và nhiều bộ phận chuyển động phức tạp hơn).