0Pricing
Go Academy · Урок

Конфигурация окружения и секреты

Конфигурация по принципам двенадцати факторов, переменные окружения и секреты 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 — локальная установка не требуется.

Все уроки этого курса

  1. Многоэтапная сборка Docker для Go
  2. Конфигурация окружения и секреты
  3. Docker Compose для локальной разработки
  4. Проверки работоспособности и настройка для эксплуатации
← Назад к Go Academy