はじめに
自宅PCのDockerでSpring BootとMySQLの趣味管理システムを運用しようと思い、パスワードをGitHubに上げたくなかったので、調べた結果をまとめました。
同じような人は少ないかもしれませんが参考になれば幸いです。
実現したいこと
MySQLのパスワードをGitHubに上げない。
バージョン
Docker 27.4.0
Docker MySQL Image 8.4.3
Spring Boot 3.4.1
git 2.44.0
Windows 10
やりかた
概要
secrets と MYSQL_PASSWORD_FILE と optional:configtree と gitignoreを使う。
ソース
詳細
1.パスワードファイルを作成
secrets/mysql_root_password
secrets/mysql_user_password
2.docker-compose.yml の secrets に パスワードファイル を指定
docker-compose.yml
secrets:
mysql_root_password:
file: ./secrets/mysql_root_password
mysql_user_password:
file: ./secrets/mysql_user_password
3.docker-compose.yml の secrets に 2で指定した変数を指定
docker-compose.yml
secrets:
- mysql_root_password
- mysql_user_password
4.docker-compose.yml の MYSQL_PASSWORD_FILE に /run/secrets/パスワードファイル を指定
docker-compose.yml
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
MYSQL_DATABASE: secret-demo
MYSQL_USER: secret-demo
MYSQL_PASSWORD_FILE: /run/secrets/mysql_user_password
5.application.yml の spring.config.import: optional:configtree: に /run/secrets を指定
application.yml
spring:
config:
import: optional:configtree:/run/secrets/
6.application.yml の spring.datasource.password に ${パスワードファイル} を指定
application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: secret-demo
password: ${mysql_user_password}
7..gitignore に パスワードのフォルダを追加
### secrets ###
/secrets/
参考資料
docker-compose の secrets
MYSQL_ROOT_PASSWORD_FILE
Spring Bootの optional:configtree
gitigonore
やりかたに辿り着いた流れ
1.docker-compose.xml にパスワードを書かないようにするためには?と調べて以下を発見。
https://qiita.com/myabu/items/89797cddfa7225ff2b5d
ふむふむと、環境変数ではなくsecretsがあることを知る。
2.application.yml にパスワードを書かないようにするためには?と調べて以下を発見。
https://stackoverflow.com/questions/70007676/how-to-handle-docker-secrets-in-application-properties-files
ふむふむと、spring.config.import と optional:configtree というモノがあることを知る。
3.spring.config.import を調べてみると、以下を発見。
https://spring.pleiades.io/spring-boot/reference/features/external-config.html
4.試してみる