Конфигурация окружения и секреты
Конфигурация по принципам двенадцати факторов, переменные окружения и секреты Docker
«Конфигурация окружения и секреты» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Конфигурация приложения по методологии 12 факторов
Методология приложений 12 факторов рекомендует хранить конфигурацию в переменных окружения, а не в коде или конфигурационных файлах. Это делает приложение переносимым между средами разработки, тестирования и эксплуатации без изменений в коде.
os.Getenv
Читайте переменные окружения с помощью os.Getenv (возвращает "", если переменная не задана) или os.LookupEnv (возвращает значение и логическое значение наличия переменной):
port := os.Getenv("PORT")
if port == "" { port = "8080" }
dsn, ok := os.LookupEnv("DATABASE_URL")
if !ok { log.Fatal("DATABASE_URL not set") }Загрузка файлов .env
Используйте github.com/joho/godotenv для загрузки файлов .env при разработке. В рабочей среде передавайте переменные окружения через платформу (Docker, Kubernetes, облако).
godotenv.Load() // loads .env if present; ignores error in prodСтруктурированная конфигурация с envconfig
github.com/kelseyhightower/envconfig сопоставляет переменные окружения с полями структур, выполняя преобразование типов и проверку:
type Config struct {
Port int `envconfig:"PORT" default:"8080"`
DBUrl string `envconfig:"DB_URL" required:"true"`
LogLevel string `envconfig:"LOG_LEVEL" default:"info"`
}
var cfg Config
envconfig.MustProcess("", &cfg)Управление секретами
Никогда не храните секреты (пароли, ключи API, сертификаты TLS) в переменных окружения в рабочей среде — они отображаются в списках процессов и журналах. Используйте менеджер секретов: AWS Secrets Manager, HashiCorp Vault или секреты Kubernetes, подключённые как файлы.
Чтение секретов из файлов
Подключите секреты как файлы и прочитайте их при запуске:
secret, err := os.ReadFile("/run/secrets/db_password")
if err != nil { log.Fatal(err) }
dsn := fmt.Sprintf("postgres://user:%s@host/db", strings.TrimSpace(string(secret)))Секреты Kubernetes
В Kubernetes подключайте значения Secret как переменные окружения или как файлы в томе. Подключение файлов предпочтительнее, поскольку их можно заменять без перезапуска пода.
Переключатели функций
Храните имена переключателей функций в переменных окружения для простого включения и выключения. Для сложных правил переключения (поэтапного включения для заданного процента пользователей, таргетирования) используйте специализированный сервис переключателей функций.
Проверка конфигурации при запуске
Проверяйте всю обязательную конфигурацию при запуске и немедленно завершайте работу, если что-либо отсутствует или некорректно. Лучше сразу завершить работу, чем получить сбой при первом запросе.
if cfg.DBUrl == "" { log.Fatal("DB_URL required") }Неизменяемая конфигурация
Считайте конфигурацию неизменяемой после запуска. Если нужны обновления конфигурации без перезапуска, используйте сервис переключателей функций или хранилище конфигурации с механизмом наблюдения, а не горячую перезагрузку переменных окружения.
Конфигурация в тестах
Используйте t.Setenv, чтобы задать переменные окружения на время выполнения теста. Это безопасно для параллельных тестов в Go 1.17 и более поздних версиях.
t.Setenv("PORT", "9090")
// test code here...Быстрая проверка
Почему не следует хранить секреты в переменных окружения в рабочей среде?
Итоги: конфигурация окружения и секреты
Основные положения:
- Храните конфигурацию в переменных окружения; для локальных файлов .env используйте godotenv
- Используйте envconfig для заполнения типизированных структур значениями по умолчанию
- Подключайте секреты как файлы; в рабочей среде используйте Vault или Secrets Manager
- Проверяйте всю конфигурацию при запуске и немедленно завершайте работу, если что-либо отсутствует
Часто задаваемые вопросы
Урок «Конфигурация окружения и секреты» бесплатный?
Да — полный текст урока «Конфигурация окружения и секреты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Конфигурация окружения и секреты»?
Конфигурация по принципам двенадцати факторов, переменные окружения и секреты Docker Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Конфигурация окружения и секреты»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Многоэтапная сборка Docker для Go
- Конфигурация окружения и секреты
- Docker Compose для локальной разработки
- Проверки работоспособности и настройка для эксплуатации