Я хотел бы иметь возможность запускать сценарий, который развертывает мое приложение на новом сервере с минимальным количеством ручных действий, не раскрывая пароль базы данных миру.
Приложение состоит из веб-приложения (nginx + кастомный материал) и базы данных mysql. Я знаю, как развернуть его автоматически, но небезопасно: просто сохраните пароль root в docker-compose и где-нибудь в конфигурациях веб-приложений. Это, очевидно, совсем не безопасно.
Я знаю, как безопасно развернуть: текущий документация mySQL предлагает развернуть образ mySQL по умолчанию, сгенерировать сгенерированный пароль root с помощью команды grep, затем запустить mysql в контейнере, чтобы изменить этот пароль на «пароль по вашему выбору». Затем, я полагаю, мне придется указать этот «пароль по моему выбору» в конфигурации веб-приложения, чтобы мое веб-приложение могло подключиться к базе данных.
Я не знаю, каков рекомендуемый способ развертывания mySQL как автоматически, так и безопасно. Я могу сгенерировать «пароль по своему выбору» во время развертывания, но если я все равно помещаю его в конфигурации, какой смысл возиться с одноразовым случайно сгенерированным паролем mySQL? Может кто-нибудь указать мне на лучшие практики?
См. Официальное руководство для переменные среды при составлении.
Ты хочешь свой docker-compose.yml
привязаны к системе контроля версий, поэтому паролей там быть не должно. По официальной документы mysql на dockerhub основная переменная, которую вам нужно предоставить, это MYSQL_ROOT_PASSWORD
.
Фактически их пример показывает это docker run
команда с -e
флаг:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
Это может закончиться в журналах, поэтому вместо этого я помещаю это в файл .env
с другими переменными конфигурации в корне моего проекта.
# .env
MYSQL_ROOT_PASSWORD=my-secret-pw
Затем в файле создания укажите это .env
файл:
version: '3.1'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
env_file:
- .env
Вы также можете добавить строку .env
на ваш .gitignore
файл внутри проекта, чтобы секреты не были случайно переданы.
Затем разверните .env
файл другим способом в каждую среду. Конечно обязательно chmod 600 .env
.