2015-11-06 2 views
7

Ну, у меня проблемы. Как я могу хранить пароли, db url и важные строки, которые не должны идти в мой открытый контроль версий?Где хранить секретные строки на сервере Node?

У меня есть 3 решения. В первые работает только на Dev:

var config = require('./config'); 
var port = config.serverPort; 

config.js

module.exports = { 
    'serverPort' : '8182' 
} 

второй один должен работать как на разработчика и прод. Но файл config.js был добавлен в файл .gitignore, поэтому он не будет загружен на сервер. Когда сервер пытается потребовать config.js и не может найти его, он выдаст ошибку.

var config = require('./config'); 
var port = process.env.PORT || config.serverPort; 

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

Итак, что мне делать?

+0

кажется, что конфигурационный файл, который содержит секретные настройки и не проверяется в систему управления версиями это общий способ сделать это. – jfriend00

+0

Но как я могу управлять этим неопределенным требованием на моем сервере? Мой сбой сервера, потому что он не может найти файл config.js. – Rodmentou

+1

Когда вы устанавливаете установку, вы вручную создаете или копируете файл config.js. Это часть локальной настройки конфигурации, характерная для данной установки. Например, БД разработки может иметь отличный путь и пароль, чем производственная БД (фактически, если это более крупная компания, вам даже не будет позволено знать пароль производственного БД). Таким образом, вы создаете соответствующий файл конфигурации каждый раз, когда вы настраиваете сервер, который соответствует конфигурации в этой среде (пути, пароли, сертификаты и т. Д.). – jfriend00

ответ

8

Общее решение состоит в том, чтобы добавить файл config.js.example в элемент управления версиями (содержащий пустые/фиктивные значения для документирования того, что доступно).

Затем вы добавляете config.js в .gitignore (или что-то, что подходит вашему VCS).

Для запуска приложения вы просто скопируете config.js.example в config.js и введите правильные значения.

Конечно, путь к config.js можно взять из переменной окружения, чтобы легко использовать разные конфигурации - но все же вы не ставили бы фактические файлы конфигурации под контроль версий (если у вас нет отдельного частного репо для файлов конфигурации и т. д.)

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

+0

Итак, это будет нечто вроде var config = require (process.env.configPath); ? Тогда у меня будет файл config.js.example, который можно использовать как пустой файл и будет добавлен в VCS, а мои config.js будут существовать только на компьютерах разработчиков. – Rodmentou

+0

Точно. Ну, почти. 'config.js' также будет существовать на производственных машинах, но никогда в VCS. – ThiefMaster

+0

Получил. Спасибо! – Rodmentou

2

Вот мое предложение:

1. Используя сочетание файлов и окр переменных

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

Вы можете сделать что-то вроде этого:

var port = process.env.PORT || config.serverPort; 

С сегодняшнего дня, работа с docker это правило, вы должны попробовать это.

2.Использование Образца

Вы можете добавить config.json.example в свое репо с примером переменных, которые вы должны определить, но здесь вам нужно будет запомнить его при развертывании на производство.

Не забудьте добавить настоящий config.json в файл .gitignore. Это не мой выбор, но все же вариант.

1

Пакет dotenv можно использовать для загрузки конфигурации и секретов из файла .env в process.env. Для производства файл .env не обязательно должен существовать.

Пример:

require('dotenv').config(); 

const oauth2 = require('simple-oauth2').create({ 
    client: { 
    id: process.env.TWITTER_CONSUMER_KEY, 
    secret: process.env.TWITTER_CONSUMER_SECRET 
    } 
}); 

.env файл:

TWITTER_CONSUMER_KEY=bMm... 
TWITTER_CONSUMER_SECRET=jQ39... 

.gitignore:

.env 
Смежные вопросы