Як правильно зберігати конфіги на продакшені
Конфіги nginx дозволяють робити include, тому можете всі sensitivity дані викласти в окремий файлик, і додати його в .gitignore, а інше можна і в гіт зберігати (але краще не гітхаб, а свій).
Стандартний велосипедний спосіб для конфігів - перед тим, як поміняти config.cfg робиш cp config.cfg config.cfg-yymmdd можна і їм обійтися.
NOONE: Напишіть скрипт, який копіює всі конфігураційні файли ночами, зберігайте останні 30 днів, або хоч усі - конфіги мало місця займають, і забудьте про забутість. Можна навіть робити так, що на місці у вас лежить два файли config.cfg config.cfg.nightly
або etc/nginx/ etc/nginx.nightly/
А в окремій папці вже архіви за датами. При цьому прийшли, поправили, і завжди під рукою оригінал для diff без зайвих рухів тіла.
правильна відповідь - не зберігати конфіги з секретами у системі контролю версій.
ти можеш зробити так, щоб конфіг із гіта надавав т.зв. "Sensible defaults", а всі секрети будуть перевизначені другим конфігом, який підкладе система деплою. Це про твої програми.
про управління конфігураціями вузлів (контуперів, тобто), кошерно використовувати системи управління конфігурацією - ansible, salt та ін.
Будь-яка сучасна розвинена система контролю версій git, mercurrial.
Як правильно помітили - ключі та паролі зберігати окремо від конфігів.
Конфігурацію потрібно зберігати в VCS, наприклад, на тому ж github або gitlab. Особисто я б рекомендував GitHub, якщо ваш проект не підпадає під державну таємницю або не є системою управління ядерним реактором. В інших випадках код можна зберігати на GitHub. Навіть Microsoft зберігає свійкод на ньому.
Для зберігання ключів і т.д. необхідно використовувати рішення на кшталт Vault.