Назад | Перейти на главную страницу

Как автоматически и безопасно развернуть новый экземпляр mySQL с помощью docker?

Я хотел бы иметь возможность запускать сценарий, который развертывает мое приложение на новом сервере с минимальным количеством ручных действий, не раскрывая пароль базы данных миру.

Приложение состоит из веб-приложения (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.