Các lọ ENV giúp tạo và định hình môi trường nơi mã chạy. Đó là một thực hành hiện đại tốt
Vấn đề
Bạn rất có thể chạy ít nhất hai môi trường của Ứng dụng của mình. Một cục bộ để phát triển và một ở đây trên fortrabbit để sản xuất. Cả hai trường hợp có thể có quyền truy cập vào cơ sở dữ liệu. Tất nhiên, MySQL cục bộ của bạn có thông tin đăng nhập khác với thông tin đăng nhập từ xa. Tệp cấu hình của bạn, lưu trữ thông tin này, nằm dưới sự kiểm soát của phiên bản Git. Vậy làm thế nào để đối phó với các cấu hình dành riêng cho môi trường khác nhau?
Dung dịch
Mọi thứ cụ thể cho môi trường phải được lưu trữ trong Biến môi trường hoặc "Vars ENV" ngắn
Giới thiệu về lọ ENV
Một ENV var là một cặp giá trị khóa, như vậy.
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
8. Các biến này, như bạn hy vọng bây giờ có thể đoán được, được lưu trữ cụ thể cho mỗi môi trường. Các lọ ENV có khả năng được lưu trữ ở nhiều nơi. Đây là cách bạn có thể xác định biến ENV với cấu hình Apache
SetEnv MY_SQL_PASS sCRAmblEDegGGs
Đây là một ví dụ cơ bản về cách bạn có thể làm điều đó tại địa phương. Trong hầu hết các trường hợp, bạn sẽ không cần chạm vào cấp độ đó tại đây. Vui lòng đọc tiếp để biết thêm cách sử dụng và cách thực hiện trên fortrabbit
ENV vars trong PHP hiện đại
Bạn có thể truy cập các lọ ENV từ PHP. Và đó là một phương pháp hay nhất thường được phổ biến rộng rãi để làm điều đó
Các. tập tin env
Xử lý cài đặt máy chủ không thuận tiện cho nhiều nhà phát triển. Vì vậy, cộng đồng Ruby đã tìm ra định dạng tệp
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
9. Đây là một tệp cấu hình đơn giản với 30 cặp echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
0, dễ viết bởi con người và không phụ thuộc vào thời gian chạy. Tất cả những gì bạn cần là một thư viện trình phân tích cú pháp, đọc tệp và làm cho các vars có thể truy cập được từ cơ sở mã của bạnPHP dotenv
Khái niệm tệp
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
9 đã trở nên khá phổ biến và có cổng cho tất cả các ngôn ngữ. Dưới đây là những cái phổ biến nhất cho PHP- github. com/vlucas/phpdotenv
- github. com/symfony/dotenv
Các khung công tác PHP hiện đại — Laravel, Symfony…] và CMS [Craft] sử dụng cái này hay cái kia dưới mui xe
Các lọ ENV trên fortrabbit
Tóm tắt lại. Các lọ ENV là môi trường cụ thể. Vì vậy, do đó, tệp
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
9 sẽ KHÔNG được triển khai cho Ứng dụng fortrabbit của bạn. Nó thường bị loại khỏi theo dõi trong GitBây giờ, ứng dụng fortrabbit của bạn nên biết về các lọ ENV của nó như thế nào? . Đó không phải là cách nó hoạt động. Ứng dụng fortrabbit có các lọ ENV được đặt trực tiếp với máy chủ. Những thứ đó có thể được đặt trong Bảng điều khiển với Ứng dụng
Tóm tắt lại. Bản thân ứng dụng PHP sẽ chỉ truy vấn các lọ ENV. Một thư viện chỉ giúp đưa các lọ ENV vào cơ sở mã, nhưng chỉ khi chúng chưa được thiết lập
Các fortrabbit là nơi phép màu xảy ra. Trong khi tạo Ứng dụng trên fortrabbit, bạn sẽ chọn CMS hoặc khung mong muốn của mình. Lựa chọn này sẽ cấu hình các lọ ENV của máy chủ theo các cách mà phần mềm có thể làm việc với nó. Ví dụ: đối với Laravel và Craft, ENV var
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
3 sẽ được điền bằng mật khẩu của cơ sở dữ liệu Ứng dụng. Đối với Symfony, chúng tôi cung cấp DSN sẵn sàng sử dụng trong biến echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
4. Đây là liên kết đến các cài đặt của Ứng dụng của bạn- bảng điều khiển. cấm đoán. com/apps/{{tên ứng dụng}}/vars
Vì vậy, rất có thể, Ứng dụng fortrabbit của bạn sẽ hoạt động tốt. Như một phần thưởng, bạn thậm chí còn đặt lại mật khẩu cơ sở dữ liệu mà không cần chạm vào bất kỳ cấu hình nào
Thêm và chỉnh sửa các lọ ENV trên fortrabbit
Bạn có thể thêm các lọ ENV cho Ứng dụng của mình trong Bảng điều khiển > Ứng dụng của bạn > Cài đặt > Các lọ ENV. Đầu vào hỗ trợ định dạng tệp dotenv và cho phép bạn tạo hoặc cập nhật nhiều biến cùng một lúc
Thêm lọ ENV vào ứng dụng của bạn. {{tên ứng dụng}}
Các thay đổi sẽ được phân phối sau khi bạn lưu trang. Có thể mất khoảng 60 giây, không cần triển khai lại. Một số khung và CMS có thể lưu trữ các lọ ENV, như Laravel, xem
Truy cập các lọ ENV từ PHP thô
Bạn có thể truy cập các lọ ENV của mình từ PHP bằng cách sử dụng biến toàn cục
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
5 hoặc hàm echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
6echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
Chủ đê nâng cao
Cho đến nay, chúng tôi đã đề cập đến những điều cơ bản, hãy đọc tiếp để tìm hiểu sâu hơn về các lọ ENV và cách chúng có thể giúp bạn
Các loại biến ENV trên fortrabbit
Có bốn loại lọ ENV khác nhau ở đây trên fortrabbit có sẵn cho Ứng dụng của bạn khi chạy
Bình ENV tùy chỉnh
Đó là những thứ bạn tự thêm vào Bảng điều khiển
Các lọ ứng dụng ENV
Bạn không thể ghi đè các lọ ENV chung. Chúng luôn có sẵn
7 chứa tên Ứng dụng của bạnecho $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
8 chứa đường dẫn đến tệp được mã hóa JSON chứa Bí mật ứng dụngecho $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
Các lọ ENV cài sẵn phần mềm
Tùy thuộc vào những gì bạn đã chọn khi tạo Ứng dụng của mình, các lọ ENV bổ sung sẽ được tạo cho bạn. Ví dụ. Khi chọn Laravel, ENV var
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
9 với một chuỗi dài 32 ký tự ngẫu nhiên sẽ được tạo [trong số các chuỗi khác]. Bạn có thể thay thế hoặc xóa các lọ Stack ENV đó sau khi tạo Ứng dụng giống như cách bạn có thể thay thế hoặc xóa các lọ ENV được tạo thủ công của mìnhCác lọ ENV động
Các lọ ENV động sẽ khả dụng nếu bạn đã bật "Các lọ ENV động" trong Bảng điều khiển, đây là mặc định cho các Ứng dụng mới. Chúng chứa chi tiết truy cập cho các dịch vụ do fortrabbit cung cấp. Bạn có thể tìm thấy chúng trong Bảng điều khiển > {{tên ứng dụng}} > lọ ENV ở phía bên tay phải. Chúng sẽ không bao giờ ghi đè lên các lọ ENV hiện có, được tạo thủ công. Điều này có nghĩa là. nếu bạn tạo biến ENV theo cách thủ công, chúng tôi đảm bảo rằng chúng tôi sẽ không thay thế giá trị của biến đó bằng biến ENV được tạo động
Theo dõi danh sách các lọ ENV động có sẵn
MySQL [Tất cả ứng dụng phổ biến hoặc Thành phần ứng dụng chuyên nghiệp]
0. Chứa tên cơ sở dữ liệu của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
1. Chứa tên máy chủ cơ sở dữ liệu của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
2. Chứa mật khẩu cơ sở dữ liệu của ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
3. Chứa cổng cơ sở dữ liệu của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
4. Chứa người dùng cơ sở dữ liệu của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
Lưu trữ đối tượng [Thành phần ứng dụng chuyên nghiệp]
5. Chứa tên bộ chứa của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
6. Chứa khóa truy cập bộ chứa của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
7. Chứa vùng xô của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
8. Chứa bí mật truy cập vùng chứa của Ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
9. Chứa máy chủ API lưu trữ đối tượng của ứng dụng# will work: MY_VAR=${OTHER_VAR} OTHER_VAR=something
Memcache [Thành phần ứng dụng chuyên nghiệp]
90. Chứa số lượng máy chủ memcache khả dụng [Kế hoạch sản xuất. 2, nếu không. 1]echo $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
91. Chứa tên máy chủ nút Memcache đầu tiênecho $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
92. Chứa cổng nút Memcache đầu tiênecho $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
93. Chứa tên máy chủ nút Memcache thứ hai [nếu sử dụng gói Sản xuất]echo $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
94. Chứa cổng nút Memcache thứ hai [nếu sử dụng gói Sản xuất]echo $_SERVER["MY_ENV_VAR"]; # or echo getenv["MY_ENV_VAR"];
Lọ ENV lồng nhau
Bạn có thể sử dụng đơn giản, trong các lọ ENV tùy chỉnh của mình. Đơn giản có nghĩa là bạn có thể đặt các biến tham chiếu đến các biến khác, chẳng hạn như biến chứa giá trị
# will work:
MY_VAR=${OTHER_VAR}
OTHER_VAR=something
Chúng tôi không hỗ trợ nhiều cấp độ nội suy, điều đó có nghĩa là bạn không thể sử dụng các biến tham chiếu đến các biến khác, chẳng hạn như tham chiếu lại các biến khác
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
9ENV vars so với bảo mật
Lưu trữ thông tin đăng nhập [mật khẩu, bí mật,. ] trong các biến môi trường không phải là không có rủi ro. Chúng có thể bị lộ do lỗi lập trình hoặc sơ suất, chẳng hạn như khi bạn quên xóa
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
95 khỏi sản xuất. Vui lòng đọc một cuộc thảo luận chuyên sâu trong Blog của chúng tôi. Chúng tôi cung cấp một giải pháp thuận tiện cho vấn đề này với Bí mật ứng dụng của chúng tôiXác thực biến ENV
Các quy tắc xác thực nghiêm ngặt cho các lọ ENV đang được sử dụng trong Bảng điều khiển khi nhập. Các ký tự như ký hiệu "$" có thể gây hại trong hệ thống Linux. Đây là biểu thức chính quy mà chúng tôi sử dụng để xác thực đầu vào var ENV trong Bảng điều khiển
echo $_SERVER["MY_ENV_VAR"];
# or
echo getenv["MY_ENV_VAR"];
7Vì vậy, đôi khi, khi bạn muốn lưu trữ khóa API bên ngoài dưới dạng biến ENV, bạn có thể gặp lỗi xác thực như. "Giá trị biến chứa các ký tự không hợp lệ". Nếu bạn không thể thay đổi giá trị của biến ENV của mình, bạn có thể mã hóa và giải mã chúng
Mã hóa và giải mã các lọ ENV
Sử dụng chuỗi được mã hóa base64 và giải mã nó khi áp dụng nó vào cấu hình trong mã của bạn. Mã hóa hoạt động như thế này