Как создать файл env

Обновлено: 07.07.2024

При разработки web-приложения или бота мы часто имеем дело с какой-либо секретной информацией, различными токенами и паролями (API-ключами, секретами веб-форм). "Хардкодить" эту информацию, а тем более сохранять в публично доступной системе контроля версий это очень плохая идея.

Конфигурационные файлы

Самый простой путь решения данной проблемы, это создание отдельного конфигурационного файла со всей чувствительной информацией и добавление его в .gitignore . Минус такого подхода в том, что в гит нужно держать ещё и шаблон конфигурационного файла и не забывать его периодически обновлять.

Переменные окружения

Более продвинутый подход, это использование переменных окружения. Переменные окружения это именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы. Например, чтобы запустить flask-приложение, вначале нужно указать в переменной окружения FLASK_APP имя нашего приложения:

С помощью переменных окружения можно получать различные параметры приложение и секретные ключи:

Библиотека python-dotenv

Чтобы не задавать каждый раз вручную переменные окружения при новом запуске терминала, можно воспользоваться пакетом python-dotenv. Он позволяет загружать переменные окружения из файла .env в корневом каталоге приложения.
Устанавливаем пакет:

Теперь можно создать файл .env со всеми переменными среды, которые необходимы вашему приложению. Важно, добавьте .env -файл в .gitignore , не храните его в системе контроля версий.

Этот .env-файл можно использовать для всех переменных конфигурации, но его нельзя использовать для переменных среды FLASK_APP и FLASK_DEBUG , так как они необходимы уже в процессе начальной загрузки приложения.

Утилита direnv

Переменные среды могут быть автоматически загружены при входе в папку с проектом, это особенно удобно при работе с несколькими проектами одновременно. Сделать это позволяет утилита direnv. Direnv — это менеджер переменных среды для терминала, поддерживает bash, zsh, tcsh и др. оболочки. Позволяет автоматически загружать и выгружать переменные среды в зависимости от вашего текущего каталога. Это позволяет иметь переменные среды, специфичные для каждого проекта. Перед каждым приглашением проверяется наличие файла .envrc в текущем и родительском каталогах. Если файл существует, он загружается в подшаблон bash, и все экспортированные переменные затем захватываются direnv, а затем становятся доступными для оболочки.

Далее необходимо в нести изменения для настройки нашей оболочки, для bash необходимо в конец файла


Переменные окружения или переменные среды (environment variables) — это некие глобальные значения, расположенные на уровне операционной системы, доступные программам, например настройки системы.

Самой известной переменной, можно считать PATH. Операционная система использует значение этой переменной для того, чтобы найти нужные исполняемые файлы в командной строке или окне терминала. Например, когда мы выполняем в терминале команду node, npm или другую, именно переменная PATH подсказывает где искать исполняемые файлы. Об этом, подробнее рассказывается в этом посте, на платформах linux и macos. Наверняка вы сталкивались с этой коварной переменной в начале своей карьеры 😅.

Замечу, чт о значения в переменных окружения хранятся в виде строк. Поэтому старайтесь не использовать цифровые и булевы типы данных, иначе при записи они преобразуются к строкам. Помните об этом.

Проблема

В процессе разработки приложения, будь то клиентское или серверное, может понадобится использовать приватные данные, например секретный токен для запросов на сторонний сервер. Вот так:


Но мы не можем сохранить такой код в git, иначе мы просто расскажем всему миру наш секретный ключ.

Время переменных окружения

Мы можем хранить секретные данные, настройки сборки и другие данные в переменных окружения. Программа на nodejs имеет к ним доступ.

В nodejs есть глобальный объект process (доступный из любого места программы, как window в браузере), хранящий информацию о текущем процессе. У этого объекта есть свойство env — оно и дает доступ к переменным окружения. Попробуйте запустить node в терминале и выполнить console.log(process.env):


Мы увидим как в терминал выведется объект со всеми значениями переменных окружения.

Теперь если представить, что наш секретный ключ уже находится в переменных окружения, то предыдущий пример можно переписать так:


Мы получаем наш секретный ключ из окружения. Отличный пример 😂.

Еще, вы наверняка использовали или встречали конструкцию node.env.NODE_ENV === ‘production’ для определения режима сборки своего приложения.

Но как же установить эти переменные окружения?

Установка переменных окружения

Главной сложностью, является различие в способах установки переменных окружения в разных операционных системах и разных терминальных оболочках. В основном мы имеем две платформы: Windows и Linux (MacOS). Давайте посмотрим как это сделать в обоих.

Linux, MacOS

Отобразить весь список переменных можно командой printenv.

Показать конкретную переменную можно так:

Для добавления переменной можно использовать комманду export.

Однако нужно помнить, такой способ задает переменную только на текущий сеанс операционной системы.

Так же, можно определить переменные во время запуска программы, в одной строке. Такая переменная будет жить только во время работы программы.

Для сохранения постоянной переменной используйте следующее решение. Поскольку Mac и большинство Linux дистрибутивов используют оболочку bash, переменные окружения могут быть добавлены в каталог .bash_profile для текущего пользователя. Путь к этому файлу можно найти с помощью команды:

В этот файл нужно добавить определение переменной, просто на новой строке.

При старте системы переменная будет инициализирована. Не забудьте закрыть и снова открыть терминал, прежде чем использовать новую переменную среды. Повторное открытие терминала загружает обновленный файл .bash_profile.

Windows

Что бы посмотреть список переменных в коммандной строке (Command Prompt) используйте комманду set.


Вывести значение по имени переменной можно так:

Добавление новой переменной скрыто за несколькими графическими окнами. Для добавления переменной нажмите Win+R, в открывшемся окне введите sysdm.cpl и нажмите Enter.


В открывшемся окне перейдите на вкладку «Дополнительно» и затем нажмите кнопку «Переменные среды» в правом нижнем углу окна.


Открывшееся окно имеет два разных раздела. Один из них — это список переменных среды, характерных только для вашего пользователя. Это означает, что они недоступны для других пользователей. В другом разделе содержатся общесистемные переменные, общие для всех пользователей.


Создайте пользовательскую переменную, нажав кнопку «Создать» ниже раздела, предназначенного для пользователя. Укажите имя переменной и значение.


Так же можно использовать утилиту setx. Она появилась еще со времен Windows Vista и Windows Server 2008:

Такой способ сохраняет переменную в памяти ОС и не удаляет ее после перезагрузки. Что бы начать использовать новую переменную, так же нужно перезагрузить терминал.

Установить временную переменную и запустить процесс node так же возможно:

Избавляемся от различий

Как вы уже заметили. Запуск node приложения с временными переменными отличается в разных платформах. Что бы решить эту проблему я использую пакет cross-env. Эта небольшая библиотечка позволяет определять временные переменные окружения в одном виде. Определите скрипт в package.json:


Так должно без проблем работать на windows, mac и linux. Конечно хранить никакие ключи тут не нужно.

Все переменные в одном месте

Просто создайте файл .env в корневом каталоге проекта и добавьте в него все необходимые переменные. В нашем случае:

Не забудьте добавить этот файл в свой .gitignore, ведь мы не хотим раздавать всем наши ключи. В некоторых репозиториях возможно встретить файлы с именами .env.example — это всего лишь шаблон/схема для ваших значений, просто скопируйте все в .env и подставьте свои значения. Важно понимать, что такие названия это всего лишь общая договоренность и ничего больше. Некоторые редакторы даже подставляют иконки для таких файлов:


Далее, необходимо прочитать переменные и добавить их в переменные окружения. Самый распространенный способ — использовать модуль npm, под названием dotenv. Просто установите модуль через npm:

Затем добавьте следующую строку в самое начало вашего файла (первой точки входа в приложение):

Пакет dotenv автоматически загрузит файл .env из корневого каталога проекта, и инициализирует значения. Подробнее читайте в документации к пакету. Важной особенностью этого модуля является то что он не перезаписывает уже существующие переменные окружения (хотя и есть способ это сделать) и пропускает их. Есть и другие решения, например env2 и node-env-file.

Так же важно понимать, что использовать такой подход можно только при разработке и никак не в продакшене. Дело в том что файл .env доступен для чтения и если злоумышленник получит доступ к серверу, он может найти этот файл просто по имени. Само сохранение секретных значений в открытый файл противоречит безопасности.

Замечание

При использовании node.env есть проблемы с производительностью. Например нам необходимо часто делать запрос на сторонний сервис и токен мы берем напрямую из node.env.TOKEN. То есть проблема заметна при большой нагрузке. Есть способы решения этой проблемы, но это уже другая история.

Заключение

Мы разобрались что такое переменные окружения/среды (environment variables), узнали как создавать временные и постоянные переменные на разных платформах и посмотрели как можно автоматизировать установку значений.

Конечно, эта тема очень большая, и я пробежался по основным возможностям. Но думаю этого достаточно что бы начать с ними работать 😊.

Я надеюсь, вам понравился пост. Если да, похлопайте 👏, чтобы помочь другим найти эту информацию. И не стесняйтесь оставлять комментарии — буду рад любым замечаниям!

Я пытаюсь скрыть мой ключ API, когда я фиксирую на github, и я просмотрел форум, чтобы получить рекомендации, особенно следующий пост:

Я внес изменения и перезапустил пряжу. Я не уверен, что делаю неправильно - я добавил файл .env в корень моего проекта (я назвал его process.env ), а в файл я просто поместил REACT_APP_API_KEY = 'my-secret-api-key' ,

Я думаю, что это может быть способ, которым я добавляю ключ к своему fetch в App.js, и я пробовал несколько форматов, в том числе без использования литерала шаблона, но мой проект по-прежнему не будет компилироваться.

Любая помощь высоко ценится.

1) npm install dotenv --save

2) Затем добавьте следующую строку в ваше приложение.

3 ) Затем создайте файл .env в корневом каталоге вашего приложения и добавьте в него переменные.

4 ) Наконец, добавьте .env в ваш файл .gitignore , чтобы Git игнорировал его и никогда не попадал на GitHub.

Так что я сам новичок в React и нашел способ сделать это.

Это решение не требует дополнительных пакетов.

Шаг 1 ReactDocs

В приведенных выше документах упоминается экспорт в Shell и другие параметры, один из которых я попытаюсь объяснить, это использование файла .env .

1.1 создать Root / .env

Важные примечания ДОЛЖНЫ начинаться с REACT_APP _ .

1.2 Доступ к переменной ENV

1.3 Создание Env выпуск

Поэтому после того, как я выполнил шаг 1.1 | 2, он не работал, и я нашел вышеупомянутую проблему / решение. Реагируйте на чтение / создание env при сборке, поэтому вам нужно запускать npm каждый раз, когда вы изменяете файл .env, чтобы переменные обновлялись.

Пользователи Webpack

Если вы используете веб-пакет, вы можете установить и использовать плагин dotenv-webpack , для этого выполните следующие действия:

Создать .env файл

Добавьте его в файл webpack.config.js

Используйте это в своем коде как

Для получения дополнительной информации и информации о конфигурации посетите здесь.

1. Создайте файл .env в корневой папке.

Некоторые источники предпочитают использовать .env.development и .env.production , но это не обязательно.

2. Имя вашего VARIABLE должно начинаться с REACT_APP_YOURVARIABLENAME

Кажется, что если ваша переменная окружения не запускается так, у вас будут проблемы

3. Включите вашу переменную

Чтобы включить переменную окружения просто поместите в ваш код process.env.REACT_APP_VARIABLE

Вам не нужно устанавливать какие-либо внешние зависимости

Сегодня есть более простой способ сделать это.

Просто создайте файл .env.local в корневой директории и установите там переменные. В твоем случае:

Затем вы называете это в своем JS-файле следующим образом:

React поддерживает переменные окружения, так как response-scripts@0.5.0. Вам не нужен внешний пакет для этого.

Материал, посвящённый переменным окружения в Node.js, перевод которого мы сегодня публикуем, написал Берк Холланд, веб-разработчик, в сферу интересов которого входят JavaScript, Node.js и VS Code. Кроме того, стоит отметить, что у него сложились непростые отношения с Java. Вот его история.

Переменные окружения — одна из фундаментальных конструкций среды Node.js, но почему-то я никогда не стремился научиться правильно ими пользоваться. Возможно, случилось так из-за их названия — «Environment Variables». Это название вызывало у меня нечто вроде посттравматического синдрома, неприятные воспоминания о том, как я пытался добавить путь к домашней директории Java в Windows. Я тогда толком не мог понять, надо ли добавлять этот путь в переменную PATH, в переменную JAVA_HOME, или и туда и туда. Было неясно и то, нужно ли, чтобы в конце этого пути стояла точка с запятой. Собственно говоря, тогда у меня возникал и вопрос о том, почему я использую Java. Как бы там ни было, я наконец нашёл в себе силы и приступил к знакомству с переменными окружения Node.


Переменные окружения в Node.js

В Node переменные окружения могут быть глобальными (как в Windows), но часто они используются в применении к конкретному процессу, в выполнении которого заинтересован разработчик. Например, если у вас имеется веб-приложение, это значит, что в нём могут применяться следующие переменные окружения:

Кстати, на тему «hard code» — задания в коде неких значений вместо получений их из внешних источников, хочу поделиться моим собственным твитом.


Цитирую сам себя на пике помешательства

Как же использовать переменные окружения в Node.js-приложениях? Мне пришлось изрядно потрудиться для того, чтобы найти хороший материал по переменным окружения в Node, с непременным условием наличия в этом материале достаточного количества шуток о Java. Такого материала я не нашёл, поэтому решил написать его сам.

Вот несколько способов использования переменных окружения в приложениях для Node.js.

Указание переменных окружения в терминале

Вы можете указывать переменные окружения в терминале, в котором планируется запускать Node. Например, если у вас имеется приложение, использующее Express, и вы хотите передать ему сведения о порте, сделать это можно так:


Кстати, интересная вещь. Оказывается, самое большое значение, которое может принимать номер порта, это 65535. Как я это узнал? Конечно, нашёл на StackOverflow. Как вообще кто-либо что-либо узнаёт? Но в Node самый большой номер порта — это 65534. Почему? Понятия не имею. Я не могу знать абсолютно всё.

Итак, для использования переменной окружения в коде нужно воспользоваться объектом process.env . Выглядит это так:


Однако использование описанного здесь подхода может плохо кончиться. Если у вас есть, например, строка подключения к базе данных, вы, вероятно, не будете особенно рады перспективам её ввода в терминал. На самом деле, ввод длинных значений в терминале похож на болезненную зависимость, а нам это совершенно ни к чему. Посмотрите сами:


Такой подход не масштабируется, а все хотят масштабирования. По мнению каждого архитектора, рядом с которым мне доводилось сидеть на разных мероприятиях, «масштабирование» — это даже важнее, чем сам факт работоспособности приложения.

Поэтому рассмотрим другой подход, который заключается в применении файлов .env .

Использование файлов .env

Файлы .env предназначены для хранения переменных окружения. Для использования этой технологии достаточно создать в проекте файл с именем .env и внести в него переменные окружения, начиная каждую с новой строки:


Читать эти значения можно разными способами. Пожалуй, проще всего — с помощью пакета dotenv из npm :


После установки пакета его нужно подключить к проекту, а затем им можно пользоваться для работы с переменными окружения. Этот пакет найдёт файл .env и загрузит переменные, описанные в нём, в Node. Вот как это выглядит:


Кстати, хочу поделиться важным советом. Не заливайте файлы .env на GitHub. В них находятся сведения, не предназначенные для чужих глаз. Не повторяйте моих ошибок.

Итак, пока всё хорошо, но то, о чём мы тут говорили, не очень-то удобно. Подключать dotenv придётся в каждом файле, где надо использовать переменные окружения, и dotenv придётся использовать в продакшне, когда, в сущности, вам это не нужно. Я не отношусь к фанатам развёртывания бесполезного кода в продакшне, хотя, мне кажется, до сих пор я только этим и занимался.

Что же делать? К счастью, вы пользуетесь VS Code (я абсолютно в этом уверен), а это значит, что у вас есть ещё несколько вариантов.

Работа с файлами .env в VS Code

Для начала вы можете установить расширение DotENV для VS Code, которое даст приятную подсветку синтаксиса файлов .env .


Вот как выглядит файл .env без подсветки синтаксиса и с подсветкой

Кроме того, отладчик VS Code, если вы им пользуетесь, предлагает некоторые более удобные возможности по загрузке значений из файлов .env .

Конфигурация запуска VS Code

Отладчик Node.js для VS Code (он устанавливается по умолчанию) поддерживает загрузку файлов .env посредством конфигураций запуска. Подробности о конфигурациях запуска можно почитать здесь.

Создание базовой конфигурации запуска для Node

После того, как вы создадите базовую конфигурацию запуска для Node (щёлкните по значку с шестерёнкой и выберите Node), можно выполнить одно из следующих действий, или сделать и то и другое.

Первый вариант заключается во включении переменных в конфигурационный файл.


Переменные в конфигурационном файле

Это — вполне приемлемый вариант, но меня немного беспокоит то, что каждое значение должно быть строкой. Всё-таки некоторые значения — это числа, а не строки, а в JavaScript есть лишь, скажем так, три основных типа данных, и мне не хотелось бы лишаться одного из них.

Передать переменные окружения в VS Code можно и более простым способом. Мы уже выяснили, что файлы .env — это наши друзья, поэтому вместо того, чтобы вписывать в конфигурационный файл значения переменных, просто укажем там путь к файлу .env .


Путь к файлу .env в конфигурационном файле

До тех пор, пока мы запускаем процесс Node.js из VS Code, файл с переменными окружения будет передаваться этому процессу. При этом нам не придётся втискивать числа в кавычки, делая из них строки, и не придётся разворачивать ненужный код в продакшне. Ну, по крайней мере, вам этого делать не придётся.

Запуск node-скриптов через NPM

Возможно, вы дошли до этого места и подумали о том, что никогда не запускаете Node-проекты командами вида node … , всегда пользуясь npm-скриптами вроде npm start . Конфигурациями запуска VS Code можно пользоваться и в этом случае. Однако, вместо применения стандартного запуска Node, можно настроить задачу Launch Via NPM.

Задача Launch Via NPM

После этого можно настроить значение параметра envFile , указав путь к файлу .env , и параметра runtimeArgs для запуска нужного скрипта. Обычно в качестве скрипта выступает start или debug .


Настройка запуска проекта с помощью npm

Обратите внимание на то, что в package.json нужно добавить, к npm-скрипту, флаг --inspect для того, чтобы VS Code мог подключить к процессу отладчик. В противном случае, хотя задача и запустится, отладчик не сможет сделать ничего полезного.

Флаг --inspect в package.json

Переменные окружения в продакшне

Итак, мы разобрались с тем, как пользоваться переменными окружения в ходе разработки. Вы, вероятнее всего, не будете применять файлы .env в продакшне, да и конфигурация запуска VS Code на сервере особой пользы не принесёт.

В продакшне определение переменных окружения будет зависеть от особенностей используемой платформы. Например, в случае с Azure есть три способа объявления таких переменных и управления ими.

Первый способ заключается в использовании Azure CLI.


Это работает, но выглядит не очень. Ещё один способ — использование веб-портала Azure. Я не часто пользуюсь веб-порталом, но когда это случается, я обращаюсь к нему именно для установки переменных окружения.

Здесь то, что мы называем «переменными окружения», называется «Application Settings».


Настройка переменных окружения в Azure

Ещё один вариант, учитывая то, что вы пользуетесь VS Code, заключается в установке расширения App Service и в настройке вышеописанных Application Settings прямо из редактора.

Настройка переменных окружения из VS Code

Мне нравится делать в VS Code абсолютно всё, и если бы там можно было бы писать электронные письма, я бы так и поступал. Кстати, похоже, моя мечта сбылась.

Итоги

Теперь вы знаете то же, что знаю я (не так много, позволю заметить), и я чувствую, что выполнил свою цель по шуткам на тему Java. Если вдруг их тут недостаточно — вот ещё одна, автор которой неизвестен: «Java — это очень мощный инструмент по превращению XML в стек-трейсы».

Надеемся, этот материал дал возможность восполнить пробелы в знаниях о переменных окружения в Node тем, кто раньше ими не пользовался, а тем, кто уже о них знал, позволил узнать что-нибудь новое о файлах .env, о применении переменных окружения на боевых серверах, и о том, как облегчить себе жизнь, занимаясь разработкой Node-проектов в VS Code. Если тема переменных окружения Node вам интересна — вот одна из наших предыдущих публикаций на эту тему, посвящённая особенностям работы с process.env.

С документация Я вижу, что можно создать проект laravel через установщик laravel:

или через Composer:

Если я попробую первый способ .env файл не создается. Как я могу попросить laravel, ремесленника или композитора создать.файл env для меня?

У меня была эта проблема нет .env файлы в проект.

оказывается, IDE, которую я использовал (Netbeans, старайтесь не судить), покажет определенные типы .скрытые файлы, но не все.

немного поразмыслив, я проверил файловую систему и нашел .env + .env.пример файлов / изменение их с помощью текстового редактора.

оставив этот ответ для редкой ситуации, кто-то использует изворотливую IDE, как я.

просто попробовал оба пути и в обоих направлениях я получил генерируется :

enter image description here

Composer должен автоматически создавать .файл env. В на composer.json вы можете найти:

обе стороны используют одно и то же composer.json файл, поэтому не должно быть никакой разницы.

Я предлагаю вам обновить laravel/installer до последняя версия: 1.2 и попробуйте снова:

вы всегда можете generate .env файл вручную, запустив:

В ОС windows вы можете открыть командную строку, изменить каталог в каталог проекта.
Пример,
Каталог проекта


Вы можете ввести в командной строке, как это (нажмите введите каждую строку):

тогда вы можете ввести,

Если вы используете Linux, вы можете типа cp, вместо скопировать

.env файлы скрыты Netbeans. Чтобы показать им это:

Инструменты > Параметры > Разное > Файлы

при игнорировании файлов IDE игнорируется шаблон файлов:

значение по умолчанию

добавить env в исключенный-не исключенный бит

файлы с именем .env сейчас показывают.

если .env файл отсутствует, тогда есть другой способ создать .файл env

можно скачать env.пример, переименуйте его в .env и редактировать его. Просто настройте правильные учетные данные DB и т. д.

не забудьте, когда вы используете php artisan key:generate он будет генерировать новый ключ к вашему

в консоли (cmd) перейдите в корневой путь приложения и выполните:

Это старый поток, но поскольку он по-прежнему просматривается и недавно активен "26" дней назад с этого поста, вот быстрое решение.

Если нет .env, в windows, вы можете открыть командная строка или командной строки и вставьте ниже код внутри корневого каталога проекта. Должен включать ( на стартовой линии без пробела.

просто нажмите enter, чтобы выйти из приглашения, и вы должны иметь .env файл с настройками по умолчанию, созданными в том же каталоге, который вы набрали выше .

Читайте также: